public ITranslationProvider CreateTranslationProvider(Uri translationProviderUri, string translationProviderState, ITranslationProviderCredentialStore credentialStore)
        {
            if (!SupportsTranslationProviderUri(translationProviderUri))
            {
                throw new Exception("Cannot handle URI.");
            }

            ListTranslationProvider tp = new ListTranslationProvider(new ListTranslationOptions(translationProviderUri));

            return(tp);
        }
        /// <summary>
        /// Show the plug-in settings form when the user is adding the translation provider plug-in
        /// through the GUI of SDL Trados Studio
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="languagePairs"></param>
        /// <param name="credentialStore"></param>
        /// <returns></returns>
        #region "Browse"
        public ITranslationProvider[] Browse(IWin32Window owner, LanguagePair[] languagePairs, ITranslationProviderCredentialStore credentialStore)
        {
            ListProviderConfDialog dialog = new ListProviderConfDialog(new ListTranslationOptions());

            if (dialog.ShowDialog(owner) == DialogResult.OK)
            {
                ListTranslationProvider testProvider = new ListTranslationProvider(dialog.Options);
                return(new ITranslationProvider[] { testProvider });
            }
            return(null);
        }
        /// <summary>
        /// If the plug-in settings can be changed by the user,
        /// SDL Trados Studio will display a Settings button.
        /// By clicking this button, users raise the plug-in user interface,
        /// in which they can modify any applicable settings, in our implementation
        /// the delimiter character and the list file name.
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="translationProvider"></param>
        /// <param name="languagePairs"></param>
        /// <param name="credentialStore"></param>
        /// <returns></returns>
        #region "Edit"
        public bool Edit(IWin32Window owner, ITranslationProvider translationProvider, LanguagePair[] languagePairs, ITranslationProviderCredentialStore credentialStore)
        {
            ListTranslationProvider editProvider = translationProvider as ListTranslationProvider;

            if (editProvider == null)
            {
                return(false);
            }

            ListProviderConfDialog dialog = new ListProviderConfDialog(editProvider.Options);

            if (dialog.ShowDialog(owner) == DialogResult.OK)
            {
                editProvider.Options = dialog.Options;
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Instantiates the variables and fills the list file content into
        /// a Dictionary collection object.
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="languages"></param>
        #region "ListTranslationProviderLanguageDirection"
        public ListTranslationProviderLanguageDirection(ListTranslationProvider provider, LanguagePair languages)
        {
            #region "Instantiate"
            _provider           = provider;
            _languageDirection  = languages;
            _options            = _provider.Options;
            _visitor            = new ListTranslationProviderElementVisitor(_options);
            _listOfTranslations = new Dictionary <string, string>();
            #endregion

            #region "CompileCollection"
            // Load the content of the specified list file and fill it
            // into the multiple identical sources are not allowed
            using (StreamReader sourceFile = new StreamReader(_options.ListFileName))
            {
                sourceFile.ReadLine(); // Skip the first line as it contains the language direction.

                char fileDelimiter = Convert.ToChar(_options.Delimiter);
                while (!sourceFile.EndOfStream)
                {
                    string[] currentPair = sourceFile.ReadLine().Split(fileDelimiter);
                    if (currentPair.Count <string>() != 2)
                    {
                        // The current line does not contain a proper source/target segment pair.
                        continue;
                    }

                    // Add the source/target segment pair to the collection
                    // after checking that the current source segment does not
                    // already exist in the Dictionary.
                    if (!_listOfTranslations.ContainsKey(currentPair[0]))
                    {
                        _listOfTranslations.Add(currentPair[0], currentPair[1]);
                    }
                }
                sourceFile.Close();
            }
            #endregion
        }