SIL.CoreImpl.PalasoWritingSystemManager.Replace C# (CSharp) Method

Replace() public method

Replaces an existing writing system with the specified writing system if they have the same identifier.
public Replace ( IWritingSystem ws ) : void
ws IWritingSystem The writing system.
return void
		public void Replace(IWritingSystem ws)
		{
			var palasoWs = (PalasoWritingSystem)ws;
			lock (m_syncRoot)
			{
				IWritingSystem existingWs;
				if (TryGet(palasoWs.Id, out existingWs))
				{
					if (existingWs == palasoWs)
						// don't do anything
						return;

					m_handleWss.Remove(existingWs.Handle);
					m_localStore.Remove(existingWs.Id);
					m_localStore.Set(palasoWs);
					palasoWs.WritingSystemManager = this;
					palasoWs.Handle = existingWs.Handle;
					m_handleWss[palasoWs.Handle] = palasoWs;
				}
				else
				{
					Set(ws);
				}
			}
		}

Usage Example

        public void GlobalStore_WritingSystemsToIgnore()
        {
            string storePath1      = PrepareTempStore("Store1");
            string storePath2      = PrepareTempStore("Store2");
            string globalStorePath = PrepareTempStore("GlobalStore");

            var globalStore = new GlobalFileWritingSystemStore(globalStorePath);
            var wsManager   = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath1, globalStore), globalStore);
            var ws = wsManager.Set("en-US");

            ws.SpellCheckingId = "id1";
            wsManager.Save();

            Thread.Sleep(1000);

            wsManager = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath2, globalStore), globalStore);
            ws = wsManager.Set("en-US");
            ws.SpellCheckingId = "id2";
            wsManager.Save();

            wsManager = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath1, globalStore), globalStore);
            IEnumerable <IWritingSystem> sharedWss = wsManager.CheckForNewerGlobalWritingSystems();

            Assert.AreEqual(1, sharedWss.Count());
            Assert.AreEqual("en-US", sharedWss.First().Id);
            ws = wsManager.Get("en-US");
            Assert.AreEqual("id1", ws.SpellCheckingId);
            wsManager.Save();

            wsManager = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath1, globalStore), globalStore);
            sharedWss = wsManager.CheckForNewerGlobalWritingSystems();
            Assert.AreEqual(0, sharedWss.Count());
            wsManager.Save();

            Thread.Sleep(1000);

            wsManager = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath2, globalStore), globalStore);
            ws = wsManager.Get("en-US");
            ws.LegacyMapping = "encoding converter";
            wsManager.Save();

            wsManager = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath1, globalStore), globalStore);
            ws = wsManager.Get("en-US");
            Assert.IsNullOrEmpty(ws.LegacyMapping);
            sharedWss = wsManager.CheckForNewerGlobalWritingSystems();
            Assert.AreEqual(1, sharedWss.Count());
            IWritingSystem sharedWs = sharedWss.First();

            Assert.AreEqual("en-US", sharedWs.Id);
            wsManager.Replace(sharedWs);
            wsManager.Save();
            ws = wsManager.Get("en-US");
            Assert.AreEqual("encoding converter", ws.LegacyMapping);
        }
All Usage Examples Of SIL.CoreImpl.PalasoWritingSystemManager::Replace