public override void StartElement(string localName, string qName, SortedList <string, string> attributes, int lineNumber = 0, int columnNumber = 0) { string type = localName; string namespaceName = string.Empty; if (qName.Contains(StringManipulationManager.SeparatorColon)) { namespaceName = qName.Substring(0, qName.IndexOf(StringManipulationManager.SeparatorColon)); } if (string.Compare(qName, rdfRootQ, true) == 0) { //// rdf:RDF element - extract attributes if ((attributes != null) && (attributes.Count > 0)) { foreach (string attrName in attributes.Keys) { if (!attrName.StartsWith(xmlnsPrefix, true, null)) { namespaces.Add(attrName, attributes[attrName]); } } } } if (string.Compare(rdfRoot, type, true) != 0) { string id = TryReadRDFIdAttribute(attributes); //// start of new main element if (currentElement == null) { if (id != null) { inLevel = Level.Element; sourceText.Clear(); currentElement = new CIMEntity(); currentElement.RdfID = StringManipulationManager.ExtractAllAfterSeparator(id, StringManipulationManager.SeparatorSharp); currentElement.StartLine = lineNumber - 1; currentElement.StartColumn = columnNumber; GoToPosistion(lineNumber, columnNumber); x = true; } } //// start of new subelement (attribute or embedded element) else { //// new attribute inLevel = Level.Property; } } }
public override void StartDocument() { currentElement = null; if (stream != null) { reader = new StreamReader(stream); } else { reader = new StreamReader(this.filePath); } inLevel = Level.Root; changeType = ChangeType.None; }
public override void EndElement(string localName, string qName, int lineNumber = 0, int columnNumber = 0) { string type = localName; if (string.Compare(rdfRoot, type, true) != 0) { //// end of main element if (inLevel == Level.Element) { inLevel = Level.Root; if (currentElement != null) { currentElement.EndLine = lineNumber; currentElement.EndColumn = columnNumber + qName.Length + 3; ReadToPosition(currentElement.EndLine, currentElement.EndColumn); currentElement.Source = sourceText.ToString(); currentElement.Hash = GetMd5Sum(currentElement.Source); if (!string.IsNullOrEmpty(currentElement.MRID)) { model.AddToModelMRID(currentElement); } else { model.AddToModelRDFID(currentElement); } model.AddToModelRDFIDFull(currentElement); currentElement = null; } } //// end of an attribute (property) else if (inLevel == Level.Property) { inLevel = Level.Element; content = content.Trim(); if (string.Compare(CIMConstants.AttributeNameIdentifiedObjectMRID, localName) == 0) { currentElement.MRID = content; } content = string.Empty; } } }
public override void EndElement(string localName, string qName, int lineNumber = 0, int columnNumber = 0) { string type = localName; if (string.Compare(rdfRoot, type, true) != 0) { //// end of main element if (inLevel == Level.Element) { inLevel = Level.Root; if (currentElement != null) { currentElement.EndLine = lineNumber; currentElement.EndColumn = columnNumber + qName.Length + 3; ReadToPosition(currentElement.EndLine, currentElement.EndColumn); currentElement.Source = sourceText.ToString(); ////add it to forward or reverse if (changeType == ChangeType.Forward) { added.Add(currentElement); } if (changeType == ChangeType.Reverse) { removed.Add(currentElement); } currentElement = null; } } //// end of an attribute (property) else if (inLevel == Level.Property) { inLevel = Level.Element; content = content.Trim(); if (string.Compare(CIMConstants.AttributeNameIdentifiedObjectMRID, localName) == 0) { currentElement.MRID = content; } content = string.Empty; } } }
public override void StartDocument() { currentElement = null; if (model == null) { model = new CIMModelSets(); model.SourcePath = this.filePath; } if (stream != null) { reader = new StreamReader(stream); } else { reader = new StreamReader(model.SourcePath); } inLevel = Level.Root; }
public override void StartElement(string localName, string qName, SortedList <string, string> attributes, int lineNumber = 0, int columnNumber = 0) { if (string.Compare(qName, forwardDiffQ, true) == 0) { changeType = ChangeType.Forward; } if (string.Compare(qName, reverseDiffQ, true) == 0) { changeType = ChangeType.Reverse; } string type = localName; if (string.Compare(rdfRoot, type, true) != 0) { string id = TryReadRDFIdAttribute(attributes); //// start of new main element if (currentElement == null) { if (id != null) { inLevel = Level.Element; sourceText.Clear(); currentElement = new CIMEntity(); currentElement.RdfID = StringManipulationManager.ExtractAllAfterSeparator(id, StringManipulationManager.SeparatorSharp); currentElement.StartLine = lineNumber - 1; currentElement.StartColumn = columnNumber; GoToPosistion(lineNumber, columnNumber); x = true; } } //// start of new subelement (attribute or embedded element) else { //// new attribute inLevel = Level.Property; } } }
public Stream ApplyDifference(ref Stream stream) { StringBuilder duplicateErrors = new StringBuilder(); foreach (CIMEntity entity in removed) { if (model.ModelRDFIDFull.ContainsKey(entity.RdfID)) { // Removing whole entity from map if (!entity.Source.Contains("rdf:Description")) { model.ModelRDFIDFull.Remove(entity.RdfID); } else { // Removing property from entity CIMEntity changed = model.ModelRDFIDFull[entity.RdfID]; string[] parts = entity.Source.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (string part in parts) { if (changed.Source.Contains(part)) { int start = changed.Source.IndexOf(part); changed.Source = changed.Source.Remove(start, part.Length); } } } } } foreach (CIMEntity entity in added) { // Add whole entity to map if (!entity.Source.Contains("rdf:Description")) { if (!model.ModelRDFIDFull.ContainsKey(entity.RdfID)) { model.ModelRDFIDFull.Add(entity.RdfID, entity); } else { if (duplicateErrors.Length == 0) { duplicateErrors.Append("Patch adds element with ID that is already in model."); } duplicateErrors.AppendLine("Duplicate rdf ID: " + entity.RdfID); } } else { // Add only a property if (model.ModelRDFIDFull.ContainsKey(entity.RdfID)) { CIMEntity changed = model.ModelRDFIDFull[entity.RdfID]; string[] parts = entity.Source.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); string[] finalParts = changed.Source.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); string lastLine = finalParts[finalParts.Length - 1]; StringBuilder newSource = new StringBuilder(); for (int i = 0; i < finalParts.Length - 1; i++) { newSource.AppendLine(finalParts[i]); } foreach (string part in parts) { if (!part.Contains("rdf:Description")) { newSource.AppendLine(part); } } newSource.AppendLine(lastLine); changed.Source = newSource.ToString(); } } } if (duplicateErrors.Length > 0) { throw new Exception(duplicateErrors.ToString()); } SaveDifference(ref stream); return(stream); }