public SchemaEditor(Type rootClass, ISchemaEditorNodeFactory factory) { this.factory = factory; serializer = new XmlSerializer(rootClass); this.rootClass = rootClass; }
private static void PopulateElements(ISchemaEditorNode node, ISchemaEditorNodeFactory factory) { Type nodeObjectType = node.Value.GetType(); foreach (FieldInfo field in ElementFields(nodeObjectType)) { if(field.FieldType.IsArray) AddArrayField(node,field, factory); else AddField(node,field, factory); } }
private static void AddField(ISchemaEditorNode node, FieldInfo field, ISchemaEditorNodeFactory factory) { object fieldValue = field.GetValue(node.Value); NodeFieldReference fieldReference = new NodeFieldReference(node.Value, field, factory, node); node.AddNodeField(fieldReference); if (ReflectionUtil.HasValue(fieldValue) ) AddActiveChildNode(node,fieldReference, fieldValue, factory); }
private static void AddArrayField(ISchemaEditorNode node, FieldInfo field, ISchemaEditorNodeFactory factory) { object fieldValue = field.GetValue(node.Value); ArrayNodeFieldReference fieldReference = new ArrayNodeFieldReference(node.Value, field, factory, node); node.AddNodeField(fieldReference); if (ReflectionUtil.HasValue(fieldValue)) { foreach (object o in (Array) fieldValue) { AddActiveChildNode(node, fieldReference, o, factory); } } }
private static ISchemaEditorNode AddActiveChildNode(ISchemaEditorNode parentNode, NodeFieldReference fieldReference, object fieldValue, ISchemaEditorNodeFactory factory) { ISchemaEditorNode child = fieldReference.AddExistingValue(fieldValue); BuildNodeState(child, factory); return child; }
internal static void BuildNodeState(ISchemaEditorNode node, ISchemaEditorNodeFactory factory) { if (ReflectionUtil.HasValue(node.Value) == false) return; PopulateAttributes(node); PopulateElements(node, factory); PopulateTextField(node); CheckSchemaCompliance(node); }