//---------------------------------------------------------------------------- // // Copyright (c) Intel Corporation, 2008 - 2010 All Rights Reserved. // // File: CimObjectData.cs // // Contents: CimObjectData is a part of the CimFramework project. // It contains an abstract class that keeps its internal data sorted alphabetically. // //---------------------------------------------------------------------------- using System; using System.Collections; using System.Xml; using Intel.Manageability.Exceptions; namespace Intel.Manageability.Cim.Untyped { /// /// An abstract class that maintains its data sorted alphabetically. /// This class is the base class for the untyped CIM class (CimObject). /// public abstract class CimObjectData : CimData { /// /// Constructor that recieves the class name and namespace and constructs the object accordingly. /// /// The name of the class /// The namespace of the class protected CimObjectData(string className, string nameSpace) : base(className, nameSpace) { } /// /// Copy constructor /// /// Object to be copied protected CimObjectData(CimObjectData other) : base(other) { } /// /// Adds a new CIM Field /// /// Field name /// Array of field values public override void AddField(string name, string[] values) { //Arguments sanity check if (values == null || containNullValue(values)) throw new ArgumentNullException("values"); if (ContainsField(name)) throw (new CimException(string.Format("AddField: Field \"{0}\" already exists", name))); XmlElement root = XmlMembers.DocumentElement; //Insert element sorted foreach (string val in values) { //Create a new node XmlElement elem = XmlMembers.CreateElement(root.Prefix, name, _xmlNamespace); elem.InnerXml = val; //Insert the element in a sorted way IEnumerator ienum = XmlMembers.DocumentElement.GetEnumerator(); XmlNode currentNode = null; bool found = false; while (ienum.MoveNext()) { currentNode = (XmlNode)ienum.Current; if (String.Compare(currentNode.LocalName, name, false) > 0) { found = true; break; } } if (found) { root.InsertBefore(elem, currentNode); } else { root.AppendChild(elem); } } } } }