private void BuildPropertySets(DataTable table, Dictionary <int, PropertySetType> propertySetTypes) { List <NodeTypeInfo> ntiList = new List <NodeTypeInfo>(); foreach (DataRow row in table.Rows) { int id = TypeConverter.ToInt32(row["PropertySetID"]); int parentID = row["ParentID"] is DBNull ? 0 : TypeConverter.ToInt32(row["ParentID"]); string name = TypeConverter.ToString(row["Name"]); string className = row["ClassName"] is DBNull ? null : TypeConverter.ToString(row["ClassName"]); PropertySetType propertySetType = propertySetTypes[TypeConverter.ToInt32(row["PropertySetTypeID"])]; switch (propertySetType) { case PropertySetType.NodeType: ntiList.Add(new NodeTypeInfo(id, parentID, name, className)); break; case PropertySetType.ContentListType: CreateContentListType(id, name); break; default: throw new InvalidSchemaException(String.Concat(SR.Exceptions.Schema.Msg_UnknownPropertySetType, propertySetType)); } } while (ntiList.Count > 0) { for (int i = ntiList.Count - 1; i >= 0; i--) { NodeTypeInfo nti = ntiList[i]; NodeType parent = null; if (nti.ParentId == 0 || ((parent = _nodeTypes.GetItemById(nti.ParentId)) != null)) { CreateNodeType(nti.Id, _nodeTypes.GetItemById(nti.ParentId), nti.Name, nti.ClassName); ntiList.Remove(nti); } } } }
private static void BuildNodeTypeRow(XmlNode node, XmlNamespaceManager nsmgr, DataTable table, PropertySetType propertySetType, Dictionary <PropertySetType, int> propertySetTypes) { // <NodeType itemID="2" name="NodeType11" className="NodeTypeClass2"> // <PropertyType name="Int1" /> // <PropertyType name="DateTime1" /> // <NodeType itemID="8" name="NodeType111" className="NodeTypeClass111" /> // </NodeType> int id = GetIntFromXmlAttribute(node, "itemID"); int parentId = node.ParentNode == null ? 0 : GetIntFromXmlAttribute(node.ParentNode, "itemID"); string name = GetStringFromXmlAttribute(node, "name"); string className = GetStringFromXmlAttribute(node, "className"); int propertySetTypeId = propertySetTypes[propertySetType]; table.Rows.Add(id, parentId == 0 ? DBNull.Value : (object)parentId, name, propertySetTypeId, className == null ? (object)DBNull.Value : (object)className); foreach (XmlNode subNode in node.SelectNodes("x:PropertyType", nsmgr)) { BuildPropertySetPropertyTypeRow(subNode, table.DataSet.Tables["PropertySetsPropertyTypes"]); } foreach (XmlNode subNode in node.SelectNodes("x:NodeType", nsmgr)) { BuildNodeTypeRow(subNode, nsmgr, table, propertySetType, propertySetTypes); } }
private static void BuildNodeTypeRow(XmlNode node, XmlNamespaceManager nsmgr, DataTable table, PropertySetType propertySetType, Dictionary<PropertySetType, int> propertySetTypes) { //table.Columns.Add("PropertySetID", typeof(int)); //table.Columns.Add("ParentID", typeof(int)); //table.Columns.Add("Name", typeof(string)); //table.Columns.Add("PropertySetTypeID", typeof(int)); //table.Columns.Add("ClassName", typeof(string)); //<NodeType itemID="2" name="NodeType11" className="NodeTypeClass2"> // <PropertyType name="Int1" /> // <PropertyType name="DateTime1" /> // <NodeType itemID="8" name="NodeType111" className="NodeTypeClass111" /> //</NodeType> int id = GetIntFromXmlAttribute(node, "itemID"); int parentId = node.ParentNode == null ? 0 : GetIntFromXmlAttribute(node.ParentNode, "itemID"); string name = GetStringFromXmlAttribute(node, "name"); string className = GetStringFromXmlAttribute(node, "className"); int propertySetTypeId = propertySetTypes[propertySetType]; table.Rows.Add(id, parentId == 0 ? DBNull.Value : (object)parentId, name, propertySetTypeId, className == null ? (object)DBNull.Value : (object)className); foreach (XmlNode subNode in node.SelectNodes("x:PropertyType", nsmgr)) BuildPropertySetPropertyTypeRow(subNode, table.DataSet.Tables["PropertySetsPropertyTypes"]); foreach (XmlNode subNode in node.SelectNodes("x:NodeType", nsmgr)) BuildNodeTypeRow(subNode, nsmgr, table, propertySetType, propertySetTypes); }