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;
                }
            }
        }
Example #2
0
        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;
                }
            }
        }
Example #4
0
        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;
        }
Example #6
0
        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);
        }