private static void ReadChangesElement(XmlReader reader, WritingSystemChangeLog log) { AssertOnElement(reader, "Changes"); while (reader.Read() && !(reader.NodeType == XmlNodeType.EndElement && reader.Name == "Changes")) { if (reader.IsStartElement()) { switch (reader.Name) { case "Change": ReadChangeElement(reader, log); break; case "Merge": ReadMergeElement(reader, log); break; case "Add": ReadAddElement(reader, log); break; case "Delete": ReadDeleteElement(reader, log); break; } } } }
private static void WriteChanges(XmlWriter writer, WritingSystemChangeLog log) { foreach (var logEvent in log.Events) { WriteLogEvent(writer, logEvent); } }
public void Write(WritingSystemChangeLog log) { if (log == null) { throw new ArgumentNullException("log"); } if (!File.Exists(FilePath)) { string logDirectory = Path.GetDirectoryName(FilePath); Directory.CreateDirectory(logDirectory); } using (var streamWriter = new StreamWriter(FilePath)) { using (var writer = XmlWriter.Create(streamWriter, CanonicalXmlSettings.CreateXmlWriterSettings())) { writer.WriteStartDocument(); writer.WriteStartElement("WritingSystemChangeLog"); writer.WriteAttributeString("Version", log.Version); writer.WriteStartElement("Changes"); WriteChanges(writer, log); writer.WriteEndElement(); // Changes writer.WriteEndElement(); // WritingSystemChangeLog writer.Close(); } } }
private static void ReadDeleteElement(XmlReader reader, WritingSystemChangeLog log) { AssertOnElement(reader, "Delete"); string producer = reader.GetAttribute("Producer") ?? string.Empty; string producerVersion = reader.GetAttribute("ProducerVersion") ?? string.Empty; string dateTimeString = reader.GetAttribute("TimeStamp") ?? string.Empty; var dateTime = DateTime.Parse(dateTimeString); string id = ""; while (reader.Read() && !(reader.NodeType == XmlNodeType.EndElement && reader.Name == "Delete")) { if (reader.IsStartElement()) { switch (reader.Name) { case "Id": reader.Read(); // get to the text node id = reader.Value; break; } } } log.AddEvent(new WritingSystemLogDeleteEvent(id) { DateTime = dateTime, Producer = producer, ProducerVersion = producerVersion }); }
private static void ReadLog(XmlReader reader, WritingSystemChangeLog log) { Debug.Assert(reader != null); if (reader.MoveToContent() != XmlNodeType.Element || reader.Name != "WritingSystemChangeLog") { throw new ApplicationException("Unable to load writing system definition: Missing <WritingSystemChangeLog> tag."); } log.Version = reader.GetAttribute("Version") ?? string.Empty; if (FindStartElement(reader, "Changes")) { ReadChangesElement(reader, log); } }
public void Read(WritingSystemChangeLog log) { if (File.Exists(FilePath)) { try { using (StreamReader streamReader = File.OpenText(FilePath)) { using (XmlReader reader = XmlReader.Create(streamReader, _xmlReadSettings)) { ReadLog(reader, log); } } } catch (FormatException) //This exception is thrown when the time format is locale specific. This was the case for a very short time when the log was introduced. (WS-34444) { File.Delete(FilePath); } } }
private static void ReadMergeElement(XmlReader reader, WritingSystemChangeLog log) { AssertOnElement(reader, "Merge"); string producer = reader.GetAttribute("Producer") ?? string.Empty; string producerVersion = reader.GetAttribute("ProducerVersion") ?? string.Empty; string dateTimeString = reader.GetAttribute("TimeStamp") ?? string.Empty; var dateTime = DateTime.Parse(dateTimeString); string from = ""; string to = ""; while (reader.Read() && !(reader.NodeType == XmlNodeType.EndElement && reader.Name == "Merge")) { if (reader.IsStartElement()) { switch (reader.Name) { case "From": reader.Read(); // get to the text node from = reader.Value; break; case "To": reader.Read(); // get to the text node to = reader.Value; break; } } } log.AddEvent(new WritingSystemLogConflateEvent(from, to){ DateTime = dateTime, Producer = producer, ProducerVersion = producerVersion }); }
private static void ReadAddElement(XmlReader reader, WritingSystemChangeLog log) { AssertOnElement(reader, "Add"); string producer = reader.GetAttribute("Producer") ?? string.Empty; string producerVersion = reader.GetAttribute("ProducerVersion") ?? string.Empty; string dateTimeString = reader.GetAttribute("TimeStamp") ?? string.Empty; var dateTime = DateTime.Parse(dateTimeString); string id = ""; while (reader.Read() && !(reader.NodeType == XmlNodeType.EndElement && reader.Name == "Add")) { if (reader.IsStartElement()) { switch (reader.Name) { case "Id": reader.Read(); // get to the text node id = reader.Value; break; } } } log.AddEvent(new WritingSystemLogAddEvent(id) { DateTime = dateTime, Producer = producer, ProducerVersion = producerVersion }); }
public void Write(WritingSystemChangeLog log) { }
public void Read(WritingSystemChangeLog log) { }
public void Read(WritingSystemChangeLog log) { if (File.Exists(FilePath)) { try { using (StreamReader streamReader = File.OpenText(FilePath)) { using (XmlReader reader = XmlReader.Create(streamReader, _xmlReadSettings)) { ReadLog(reader, log); } } } catch(FormatException) //This exception is thrown when the time format is locale specific. This was the case for a very short time when the log was introduced. (WS-34444) { File.Delete(FilePath); } } }