private void IncludeTermbaseInStudio(ITermbase termbase, TermbaseGeneration termbaseCreator, string termbasePath)
        {
            ITelemetryTracker telemetryTracker = new TelemetryTracker();

            try
            {
                telemetryTracker.StartTrackRequest("Including the termbase into Trados Studio");
                telemetryTracker.TrackEvent("Including the termbase into Trados Studio", null);

                #region TbConfig
                var project = SdlTradosStudio.Application.GetController <ProjectsController>().CurrentProject;
                TermbaseConfiguration termbaseConfig = project.GetTermbaseConfiguration();
                #endregion

                #region AddTb
                var studioTermbase = new LocalTermbase(termbasePath);
                termbaseConfig.Termbases.Add(studioTermbase);
                #endregion

                #region TermRecOptions
                TermRecognitionOptions options = termbaseConfig.TermRecognitionOptions;
                options.MinimumMatchValue = 50;
                options.SearchDepth       = 200;
                options.ShowWithNoAvailableTranslation = true;
                options.SearchOrder = TermbaseSearchOrder.Hierarchical;
                #endregion

                #region TermbaseLanguageIndex
                var langs = termbaseCreator.GetProjectLanguages();
                termbaseConfig.LanguageIndexes.Clear();
                foreach (var lang in langs.Keys)
                {
                    termbaseConfig.LanguageIndexes.Add(new TermbaseLanguageIndex(new Language(CultureInfo.GetCultureInfo(langs[lang])), lang));
                }
                #endregion

                #region UpdateTermbaseConfiguration
                project.UpdateTermbaseConfiguration(termbaseConfig);
                #endregion
            }
            catch (Exception e)
            {
                telemetryTracker.TrackException(new UploadTermbaseException(PluginResources.Error_IncludeTermbaseInStudio + e.Message));
                telemetryTracker.TrackTrace((new UploadTermbaseException(PluginResources.Error_IncludeTermbaseInStudio + e.Message)).StackTrace, Microsoft.ApplicationInsights.DataContracts.SeverityLevel.Error);
                throw new UploadTermbaseException(PluginResources.Error_IncludeTermbaseInStudio + e.Message);
            }
        }
        protected override void Execute()
        {
            try
            {
                if (SdlTradosStudio.Application.GetController <FilesController>().SelectedFiles.Count() > 1)
                {
                    MessageBox.Show(PluginResources.MessageContent_multipleFilesTermbase, PluginResources.MessageType_Info);
                    return;
                }
                var selectedFileName     = Path.GetFileNameWithoutExtension(SdlTradosStudio.Application.GetController <FilesController>().SelectedFiles.FirstOrDefault().Name);
                var extractedXmlFileName = Utils.GetXmlFileName(Utils.GetProjectPath());
                if (selectedFileName != extractedXmlFileName)
                {
                    MessageBox.Show(PluginResources.MessageContent_GenerateTermbaseAction, PluginResources.MessageType_Info);
                    return;
                }

                var termbaseCreator = new TermbaseGeneration();

                var termbaseDefaultContent = TermbaseDefinitionFile.GetResourceTextFile("termbaseDefaultDefinitionFile.xdt");
                var termbaseDefinitionPath = TermbaseDefinitionFile.SaveTermbaseDefinitionToTempLocation(termbaseDefaultContent);

                TermbaseDefinitionFile.AddLanguages(termbaseDefinitionPath, termbaseCreator.GetProjectLanguages());
                TermbaseDefinitionFile.AddLanguageGroups(termbaseDefinitionPath, termbaseCreator.GetProjectLanguages(), "EmptyEntry");
                TermbaseDefinitionFile.AddLanguageGroups(termbaseDefinitionPath, termbaseCreator.GetProjectLanguages(), "DummyEntry");
                TermbaseDefinitionFile.AddLanguageGroups(termbaseDefinitionPath, termbaseCreator.GetProjectLanguages(), "FullEntry");
                TermbaseDefinitionFile.AddSchemaElements(termbaseDefinitionPath, termbaseCreator.GetProjectLanguages());

                var termbase = termbaseCreator.CreateTermbase(termbaseDefinitionPath);
                if (termbase == null)
                {
                    DisplayMessage(PluginResources.Info_TermbaseExists, PluginResources.MessageTitle);
                    return;
                }

                termbaseCreator.PopulateTermbase(termbase);

                string termbaseDirectoryPath = Path.Combine(Path.GetDirectoryName(SdlTradosStudio.Application.GetController <ProjectsController>().CurrentProject.FilePath), "Tb");

                if (!Directory.Exists(termbaseDirectoryPath))
                {
                    Directory.CreateDirectory(termbaseDirectoryPath);
                }

                string termbasePath = Path.Combine(termbaseDirectoryPath, Path.GetFileName(termbase._Path));
                File.Copy(termbase._Path, termbasePath);

                IncludeTermbaseInStudio(termbase, termbaseCreator, termbasePath);

                DisplayMessage(PluginResources.Info_SuccessfullyAdded, PluginResources.MessageTitle);
            }
            catch (ProjectTermsException e)
            {
                DisplayMessage(e.Message, PluginResources.MessageType_Error);
            }
            catch (TermbaseDefinitionException e)
            {
                DisplayMessage(e.Message, PluginResources.MessageType_Error);
            }
            catch (TermbaseGenerationException e)
            {
                DisplayMessage(e.Message, PluginResources.MessageType_Error);
            }
            catch (UploadTermbaseException e)
            {
                DisplayMessage(e.Message, PluginResources.MessageType_Error);
            }
        }