public static void LoadCIMObject(ref CIMObject cimObject, CIMModelContext cimModelContext, string text) { if (!string.IsNullOrEmpty(text)) { bool success; TimeSpan durationOfParsing; CIMRDFObjectXMLHandler handler = new CIMRDFObjectXMLHandler(); handler.CimModelContext = cimModelContext; //// call parsing: handler = (CIMRDFObjectXMLHandler)XMLParsingManager.DoParseText(handler, XMLParsingManager.ParsingFileTypes.CIMModelFile, text, out success, out durationOfParsing); if (success) { cimObject = handler.Object; } } }
private void FindAttributeDifferences() { modified = new List <CIMEntityDifference>(); if (updated != null) { CIMModelContext context = new CIMModelContext(); foreach (KeyValuePair <CIMEntity, CIMEntity> pair in updated) { CIMObject oldVersion = null; CIMModelLoader.LoadCIMObject(ref oldVersion, context, string.Format("{0}{1}\n</rdf:RDF>", beforeModel.Header, pair.Key.Source)); CIMObject newVersion = null; CIMModelLoader.LoadCIMObject(ref newVersion, context, string.Format("{0}{1}\n</rdf:RDF>", afterModel.Header, pair.Value.Source)); if ((oldVersion != null) && (newVersion != null)) { CIMEntityDifference diff = new CIMEntityDifference(); diff.RdfId = oldVersion.ID; //// TODO uporediti atribute u oba objekta i spakovati ih u CIMEntityDifference instancu //PROVERA ZA OLD if (oldVersion.HasAttributes) { foreach (ObjectAttribute oldAtt in oldVersion.MyAttributesAsList) { if (string.Compare(oldAtt.FullName, CIMConstants.AttributeNameIdentifiedObjectMRID) == 0) { //postavi mrid diff.MRID = oldAtt.Value; } //uzmem sve sa istim imenom - ako nema dodajem ako ima proveravam if (newVersion.GetAttributeList(oldAtt.FullName) != null) { if (newVersion.GetAttributeList(oldAtt.FullName).Count == 0) { //dodajem diff.AddAttribute(oldAtt, null); } else { bool found = false; if (newVersion.HasAttributes) { foreach (ObjectAttribute newAtt in newVersion.GetAttributeList(oldAtt.FullName)) { //proveravam da li se javlja ista vrednost if (string.Compare(oldAtt.Value, newAtt.Value) == 0) { //ako se javlja dodajem ga kao nadjen i ne treba da se pojavi found = true; break; } } } //ako je found false, znaci da je dodat if (!found) { diff.AddAttribute(oldAtt, null); } } } else { diff.AddAttribute(oldAtt, null); } } } //PROVERA ZA NEW if (newVersion.HasAttributes) { if (newVersion.MyAttributesAsList != null) { foreach (ObjectAttribute newAtt in newVersion.MyAttributesAsList) { if (string.Compare(newAtt.FullName, CIMConstants.AttributeNameIdentifiedObjectMRID) == 0) { //postavi mrid if (string.IsNullOrEmpty(diff.MRID)) { diff.MRID = newAtt.Value; } } //uzmem sve sa istim imenom - ako nema dodajem ako ima proveravam if (oldVersion.GetAttributeList(newAtt.FullName) != null) { if (oldVersion.GetAttributeList(newAtt.FullName).Count == 0) { //dodajem diff.AddAttribute(newAtt, null); } else { bool found = false; if (oldVersion.HasAttributes) { foreach (ObjectAttribute oldAtt in oldVersion.GetAttributeList(newAtt.FullName)) { //proveravam da li se javlja ista vrednost if (string.Compare(newAtt.Value, oldAtt.Value) == 0) { //ako se javlja i isti je obelezavam ga kao nadjen found = true; break; } } } //ako je found false, znaci da je dodat if (!found) { diff.AddAttribute(null, newAtt); } } } else { diff.AddAttribute(null, newAtt); } } } } if (diff.Attributes.Count > 0) { this.modified.Add(diff); } } } } }