示例#1
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Cleans the name of the project given the project type. (e.g. For an XML type, this
        /// will ensure that the name is rooted and ends with the correct extension)
        /// </summary>
        /// <param name="type">The type of the project.</param>
        /// <param name="name">The name of the project.</param>
        /// <returns>The cleaned up name with the appropriate extension</returns>
        /// ------------------------------------------------------------------------------------
        private static string CleanUpNameForType(BackendProviderType type, string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                return(null);
            }

            string ext;

            switch (type)
            {
            case BackendProviderType.kXML:
                ext = LcmFileHelper.ksFwDataXmlFileExtension;
                break;

            default:
                return(name);
            }

            if (!SysPath.IsPathRooted(name))
            {
                string sProjName = (SysPath.GetExtension(name) == ext) ? SysPath.GetFileNameWithoutExtension(name) : name;
                name = SysPath.Combine(SysPath.Combine(FwDirectoryFinder.ProjectsDirectory, sProjName), name);
            }
            // If the file doesn't have the expected extension and exists with the extension or
            // does not exist without it, we add the expected extension.
            if (SysPath.GetExtension(name) != ext && (FileUtils.SimilarFileExists(name + ext) || !FileUtils.SimilarFileExists(name)))
            {
                name += ext;
            }
            return(name);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="backendProviderType">Type of backend provider to create.</param>
 /// <param name="ui">The UI service.</param>
 /// <param name="dirs">The directories service.</param>
 /// <param name="settings">The LCM settings.</param>
 internal LcmServiceLocatorFactory(BackendProviderType backendProviderType, ILcmUI ui, ILcmDirectories dirs, LcmSettings settings)
 {
     m_backendProviderType = backendProviderType;
     m_ui       = ui;
     m_dirs     = dirs;
     m_settings = settings;
 }
示例#3
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Protected constructor for initialization in tests
 /// </summary>
 /// <param name="projectsRootFolder">The root folder for projects (typically the
 /// default, but if these setings represent a project elsewhere, then this will be the
 /// root folder for this project).</param>
 /// <param name="projectName">Name of the project.</param>
 /// <param name="linkedFilesPath">The linked files path.</param>
 /// <param name="originalProjType">Type of the project before converting for backup.</param>
 /// <param name="destFolder">The destination folder.</param>
 /// <param name="fwVersion">The FieldWorks version.</param>
 /// ------------------------------------------------------------------------------------
 protected BackupProjectSettings(string projectsRootFolder, string projectName, string linkedFilesPath,
                                 BackendProviderType originalProjType, string destFolder, string fwVersion)
     : base(projectsRootFolder, linkedFilesPath)
 {
     ProjectName    = projectName;
     DbVersion      = BackendProvider.ModelVersion;
     FwVersion      = fwVersion;
     DatabaseFolder = (originalProjType == BackendProviderType.kXML || originalProjType == BackendProviderType.kSharedXML)
                         ? ProjectPath : Path.GetTempPath();
     DestinationFolder = destFolder;
     BackupTime        = DateTime.Now;
 }
示例#4
0
        public ProjectIdentifier(string projectPath)
        {
            Path = System.IO.Path.GetFullPath(projectPath);
            string ext = System.IO.Path.GetExtension(Path);

            switch (ext.ToLowerInvariant())
            {
            case LcmFileHelper.ksFwDataXmlFileExtension:
                m_backendProviderType = BackendProviderType.kXML;
                break;
            }
        }
示例#5
0
        public void CleanUpNameForType_Default_onlyName()
        {
            m_defaultBepType = BackendProviderType.kXML;
            string expectedPath = Path.Combine(Path.Combine(FwDirectoryFinder.ProjectsDirectory, "ape"),
                                               LcmFileHelper.GetXmlDataFileName("ape"));

            m_mockFileOs.AddExistingFile(expectedPath);

            ProjectId proj = new ProjectId("ape");

            Assert.AreEqual(expectedPath, proj.Path);
            Assert.AreEqual(BackendProviderType.kXML, proj.Type);
            Assert.IsTrue(proj.IsValid);
        }
        public void PortAllBEPsTestsUsingAnUnopenedSource(
            [Values(BackendProviderType.kXMLWithMemoryOnlyWsMgr)]
            BackendProviderType sourceType,
            [Values(BackendProviderType.kXMLWithMemoryOnlyWsMgr, BackendProviderType.kMemoryOnly)]
            BackendProviderType targetType)
        {
            var path = Path.Combine(Path.GetTempPath(), "FieldWorksTest");

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            var sourceBackendStartupParameters = GenerateBackendStartupParameters(false, sourceType);
            var targetBackendStartupParameters = GenerateBackendStartupParameters(true, targetType);

            var sourceGuids = new List <Guid>();

            // Set up data source
            var sourceProjectId = new TestProjectId(sourceBackendStartupParameters.ProjectId.Type,
                                                    sourceBackendStartupParameters.ProjectId.Path);

            using (LcmCache sourceCache = LcmCache.CreateCacheWithNewBlankLangProj(sourceProjectId, "en", "fr", "en", new DummyLcmUI(),
                                                                                   m_lcmDirectories, new LcmSettings()))
            {
                // BEP is a singleton, so we shouldn't call Dispose on it. This will be done
                // by service locator.
                var sourceDataSetup = GetMainBEPInterface(sourceCache);
                sourceCache.ServiceLocator.GetInstance <IUndoStackManager>().Save();                // persist the new db so we can reopen it.
                sourceDataSetup.LoadDomain(BackendBulkLoadDomain.All);
                sourceGuids.AddRange(GetAllCmObjects(sourceCache).Select(obj => obj.Guid));         // Collect all source Guids
            }

            // Migrate source data to new BEP.
            IThreadedProgress progressDlg = new DummyProgressDlg();
            var targetProjectId           = new TestProjectId(targetBackendStartupParameters.ProjectId.Type, null);

            using (var targetCache = LcmCache.CreateCacheWithNoLangProj(targetProjectId, "en", new DummyLcmUI(),
                                                                        m_lcmDirectories, new LcmSettings()))
            {
                // BEP is a singleton, so we shouldn't call Dispose on it. This will be done
                // by service locator.
                var targetDataSetup = GetMainBEPInterface(targetCache);
                targetDataSetup.InitializeFromSource(new TestProjectId(targetBackendStartupParameters.ProjectId.Type,
                                                                       targetBackendStartupParameters.ProjectId.Path), sourceBackendStartupParameters, "en", progressDlg);
                targetDataSetup.LoadDomain(BackendBulkLoadDomain.All);
                CompareResults(sourceGuids, targetCache);
            }
            sourceGuids.Clear();
        }
        public void PortAllBEPsTestsUsingAnAlreadyOpenedSource(
            [Values(BackendProviderType.kXMLWithMemoryOnlyWsMgr, BackendProviderType.kMemoryOnly)]
            BackendProviderType sourceType,
            [Values(BackendProviderType.kXMLWithMemoryOnlyWsMgr, BackendProviderType.kMemoryOnly)]
            BackendProviderType targetType)
        {
            var sourceBackendStartupParameters = GenerateBackendStartupParameters(false, sourceType);
            var targetBackendStartupParameters = GenerateBackendStartupParameters(true, targetType);

            // Set up data source, but only do it once.
            var sourceGuids     = new List <Guid>();
            var sourceProjectId = new TestProjectId(sourceBackendStartupParameters.ProjectId.Type,
                                                    sourceBackendStartupParameters.ProjectId.Path);

            using (var sourceCache = LcmCache.CreateCacheWithNewBlankLangProj(sourceProjectId, "en", "fr", "en", new DummyLcmUI(),
                                                                              m_lcmDirectories, new LcmSettings()))
            {
                // BEP is a singleton, so we shouldn't call Dispose on it. This will be done
                // by service locator.
                var sourceDataSetup = GetMainBEPInterface(sourceCache);
                // The source is created ex nihilo.
                sourceDataSetup.LoadDomain(sourceBackendStartupParameters.BulkLoadDomain);
                sourceGuids.AddRange(GetAllCmObjects(sourceCache).Select(obj => obj.Guid));                 // Collect all source Guids

                DeleteDatabase(targetBackendStartupParameters);

                // Migrate source data to new BEP.
                var targetProjectId = new TestProjectId(targetBackendStartupParameters.ProjectId.Type,
                                                        targetBackendStartupParameters.ProjectId.Path);
                using (var targetCache = LcmCache.CreateCacheCopy(targetProjectId, "en", new DummyLcmUI(),
                                                                  m_lcmDirectories, new LcmSettings(), sourceCache))
                {
                    // BEP is a singleton, so we shouldn't call Dispose on it. This will be done
                    // by service locator.
                    var targetDataSetup = GetMainBEPInterface(targetCache);
                    targetDataSetup.LoadDomain(BackendBulkLoadDomain.All);

                    CompareResults(sourceGuids, targetCache);
                }
            }
        }
示例#8
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Initializes a new instance of the <see cref="FWProjectId"/> class.
 /// </summary>
 /// ------------------------------------------------------------------------------------
 public FWProjectId(BackendProviderType type, string name)
 {
     m_type = type;
     Path   = name;
 }
        private BackendStartupParameter GenerateBackendStartupParameters(bool isTarget, BackendProviderType type)
        {
            var    nameSuffix = (isTarget ? "_New" : "") + m_random.Next(1000);
            string name       = null;

            switch (type)
            {
            case BackendProviderType.kXMLWithMemoryOnlyWsMgr:
                name = Path.Combine(m_projectsFolder.Path, LcmFileHelper.GetXmlDataFileName("TLP" + nameSuffix));
                break;
                //case BackendProviderType.kMemoryOnly: name = null;
            }

            return(new BackendStartupParameter(true, BackendBulkLoadDomain.All, new TestProjectId(type, name)));
        }
示例#10
0
 public ParatextLexiconPluginProjectId(BackendProviderType backendProviderType, string projectPath)
 {
     m_backendProviderType = backendProviderType;
     Path = projectPath;
 }
示例#11
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Initializes a new instance of the <see cref="ProjectId"/> class.
 /// </summary>
 /// <param name="type">The type of BEP.</param>
 /// <param name="name">The project name (for local projects, this can be a filename).
 /// </param>
 /// ------------------------------------------------------------------------------------
 public ProjectId(BackendProviderType type, string name)
 {
     Debug.Assert(type != BackendProviderType.kMemoryOnly);
     m_type = type;
     m_path = CleanUpNameForType(type, name);
 }
示例#12
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Initializes a new instance of the <see cref="TestProjectId"/> class.
 /// </summary>
 /// ------------------------------------------------------------------------------------
 public TestProjectId(BackendProviderType type, string name)
 {
     Type = type;
     Path = name;
 }
示例#13
0
 public void Setup()
 {
     m_defaultBepType = BackendProviderType.kXML;
     m_mockFileOs     = new MockFileOS();
     FileUtils.Manager.SetFileAdapter(m_mockFileOs);
 }