Exemple #1
0
        public void PerformMigration(IDomainObjectDTORepository repoDto)
        {
            DataMigrationServices.CheckVersionNumber(repoDto, 7000043);

            if (repoDto.ProjectFolder != Path.GetTempPath())
            {
                // Skip migrating the global repository if we're just running tests. Slow and may not be wanted.
                // In a real project we do this first; thus if by any chance a WS is differently renamed in
                // the two folders, the renaming that is right for this project wins.
                var globalWsFolder = LcmFileHelper.OldGlobalWritingSystemStoreDirectory;
                var globalMigrator = new LdmlInFolderWritingSystemRepositoryMigrator(globalWsFolder, NoteMigration, 2);
                globalMigrator.Migrate();
            }

            var ldmlFolder = Path.Combine(repoDto.ProjectFolder, LcmFileHelper.ksWritingSystemsDir);
            var migrator   = new LdmlInFolderWritingSystemRepositoryMigrator(ldmlFolder, NoteMigration, 2);

            migrator.Migrate();

            var wsIdMigrator = new WritingSystemIdMigrator(repoDto, TryGetNewTag, "*_Layouts.xml");

            wsIdMigrator.Migrate();

            DataMigrationServices.IncrementVersionNumber(repoDto);
        }
        public void PerformMigration(IDomainObjectDTORepository repoDto)
        {
            DataMigrationServices.CheckVersionNumber(repoDto, 7000070);

            // Skip migrating the global repository if we're just running tests. Slow and may not be wanted.
            // In a real project we do this first; thus if by any chance a WS is differently renamed in
            // the two folders, the renaming that is right for this project wins.
            if (!repoDto.ProjectFolder.StartsWith(Path.GetTempPath()))
            {
                var globalMigrator = new GlobalWritingSystemRepositoryMigrator(GlobalWritingSystemRepository.DefaultBasePath, versionToMigrateTo: 3);
                // first migrate any existing global writing systems in the new global writing system directory
                if (globalMigrator.NeedsMigration())
                {
                    globalMigrator.Migrate();
                }
                string migratedFilePath = Path.Combine(LcmFileHelper.OldGlobalWritingSystemStoreDirectory, ".migrated");
                if (Directory.Exists(LcmFileHelper.OldGlobalWritingSystemStoreDirectory) && !File.Exists(migratedFilePath))
                {
                    // copy over all FW global writing systems from the old directory to the new directory and migrate
                    string globalRepoPath = Path.Combine(GlobalWritingSystemRepository.DefaultBasePath, "3");
                    if (!Directory.Exists(globalRepoPath))
                    {
                        GlobalWritingSystemRepository.CreateGlobalWritingSystemRepositoryDirectory(globalRepoPath);
                    }
                    CopyDirectoryContents(LcmFileHelper.OldGlobalWritingSystemStoreDirectory, globalRepoPath);
                    globalMigrator.Migrate();
                    // add ".migrated" file to indicate that this folder has been migrated already
                    File.WriteAllText(migratedFilePath, string.Format("The writing systems in this directory have been migrated to {0}.", globalRepoPath));
                }
            }

            string ldmlFolder = Path.Combine(repoDto.ProjectFolder, LcmFileHelper.ksWritingSystemsDir);
            var    migrator   = new LdmlInFolderWritingSystemRepositoryMigrator(ldmlFolder, NoteMigration, 3);

            migrator.Migrate();

            string sharedSettingsPath = LexiconSettingsFileHelper.GetSharedSettingsPath(repoDto.ProjectFolder);

            if (!Directory.Exists(sharedSettingsPath))
            {
                Directory.CreateDirectory(sharedSettingsPath);
            }
            var projectSettingsStore = new FileSettingsStore(LexiconSettingsFileHelper.GetProjectLexiconSettingsPath(repoDto.ProjectFolder));
            var userSettingsStore    = new FileSettingsStore(LexiconSettingsFileHelper.GetUserLexiconSettingsPath(repoDto.ProjectFolder));
            var repo = new CoreLdmlInFolderWritingSystemRepository(ldmlFolder, projectSettingsStore, userSettingsStore);

            migrator.ResetRemovedProperties(repo);

            // migrate local keyboard settings from CoreImpl application settings to new lexicon user settings file
            // skip if we're running unit tests, could interfere with the test results
            string localKeyboards;

            if (!repoDto.ProjectFolder.StartsWith(Path.GetTempPath()) && TryGetLocalKeyboardsSetting(out localKeyboards))
            {
                if (localKeyboards.Length > 0)
                {
                    XElement keyboardsElem = XElement.Parse(localKeyboards);
                    foreach (XElement keyboardElem in keyboardsElem.Elements("keyboard"))
                    {
                        var wsId = (string)keyboardElem.Attribute("ws");
                        CoreWritingSystemDefinition ws;
                        if (repo.TryGet(wsId, out ws))
                        {
                            var    layout     = (string)keyboardElem.Attribute("layout");
                            var    locale     = (string)keyboardElem.Attribute("locale");
                            string keyboardId = string.IsNullOrEmpty(locale) ? layout : $"{locale}_{layout}";
                            IKeyboardDefinition keyboard;
                            if (!Keyboard.Controller.TryGetKeyboard(keyboardId, out keyboard))
                            {
                                keyboard = Keyboard.Controller.CreateKeyboard(keyboardId, KeyboardFormat.Unknown, Enumerable.Empty <string>());
                            }
                            ws.LocalKeyboard = keyboard;
                        }
                    }
                }
                repo.Save();
            }

            var wsIdMigrator = new WritingSystemIdMigrator(repoDto, TryGetNewLangTag, "*.fwlayout");

            wsIdMigrator.Migrate();

            DataMigrationServices.IncrementVersionNumber(repoDto);
        }