From: Owen R. <exo...@us...> - 2005-04-07 04:30:48
|
Update of /cvsroot/netreflector/NetReflector/src/NetReflector In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16181/src/NetReflector Modified Files: NetReflector.cs NetReflectorTypeTable.cs Log Message: NETREF-3: NetReflector now generates warning events if the configuration xml contains unused nodes. Index: NetReflector.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/NetReflector.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NetReflector.cs 15 Nov 2004 05:13:02 -0000 1.2 --- NetReflector.cs 7 Apr 2005 04:30:39 -0000 1.3 *************** *** 6,28 **** namespace Exortech.NetReflector { ! public class NetReflector { ! public static string Write(object target) { ! StringWriter buffer = new StringWriter(); ! Write(buffer, target); ! return buffer.ToString(); } ! public static void Write(TextWriter writer, object target) { ! CheckNull(writer, "writer", typeof (TextWriter)); ! Write(new XmlTextWriter(writer), target); } ! public static void Write(XmlWriter writer, object target) { ! CheckNull(writer, "writer", typeof (TextWriter)); ! CheckNull(target, "target", typeof (object)); ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(target); --- 6,28 ---- namespace Exortech.NetReflector { ! public class NetReflectorWriter { ! private readonly XmlWriter writer; ! ! public NetReflectorWriter(TextWriter writer) { ! NetReflector.CheckNull(writer, "writer", typeof (TextWriter)); ! this.writer = new XmlTextWriter(writer); } ! public NetReflectorWriter(XmlWriter writer) { ! NetReflector.CheckNull(writer, "writer", typeof (XmlWriter)); ! this.writer = writer; } ! public void Write(object target) { ! NetReflector.CheckNull(target, "target", typeof (object)); ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(target); *************** *** 33,128 **** attribute.Write(writer, target); } public static object Read(string xml) { ! return Read(xml, null); } public static object Read(string xml, NetReflectorTypeTable table) { ! return Read(new StringReader(xml), table); } public static object Read(TextReader reader) { ! return Read(reader, null); } public static object Read(TextReader reader, NetReflectorTypeTable table) { ! CheckNull(reader, "reader", typeof (TextReader)); ! return Read(new XmlTextReader(reader), table); } public static object Read(XmlReader reader) { ! return Read(reader, null); } public static object Read(XmlReader reader, NetReflectorTypeTable table) { ! CheckNull(reader, "reader", typeof (XmlReader)); ! return Read(XmlUtil.ReadNode(reader), table); } public static object Read(XmlNode node) { ! return Read(node, null); } public static object Read(XmlNode node, NetReflectorTypeTable table) { ! CheckNull(node, "node", typeof (XmlNode)); ! if (table == null) ! { ! table = NetReflectorTypeTable.CreateDefault(); ! } ! ! IXmlSerialiser serialiser = table[node.Name]; ! if (serialiser == null) ! { ! throw new NetReflectorException(string.Format("No loaded type is marked up with a ReflectorType attribute that matches the Xml node ({0}). Xml Source: {1}", node.Name, node.OuterXml)); ! } ! return serialiser.Read(node, table); } public static void Read(string xml, object instance) { ! Read(xml, instance, null); } public static void Read(string xml, object instance, NetReflectorTypeTable table) { ! Read(new XmlTextReader(new StringReader(xml)), instance, table); } public static void Read(XmlReader reader, object instance) { ! Read(reader, instance, null); ! } public static void Read(XmlReader reader, object instance, NetReflectorTypeTable table) { ! Read(XmlUtil.ReadNode(reader), instance, table); } public static void Read(XmlNode node, object instance) { ! Read(node, instance, null); } public static void Read(XmlNode node, object instance, NetReflectorTypeTable table) { ! CheckNull(node, "node", typeof (XmlNode)); ! CheckNull(instance, "instance", typeof (object)); ! if (table == null) ! { ! table = NetReflectorTypeTable.CreateDefault(); ! } ! new XmlTypeSerialiser(instance.GetType(), new ReflectorTypeAttribute(instance.GetType().Name)).ReadMembers(node, instance, table); } ! private static void CheckNull(object obj, string param, Type expected) { if (obj == null) --- 33,195 ---- attribute.Write(writer, target); } + } + + public class NetReflectorReader + { + private readonly NetReflectorTypeTable table; + + public NetReflectorReader() : this(NetReflectorTypeTable.CreateDefault()) + {} + + public NetReflectorReader(NetReflectorTypeTable table) + { + this.table = table; + } + + public object Read(string xml) + { + return Read(new StringReader(xml)); + } + + public object Read(TextReader reader) + { + NetReflector.CheckNull(reader, "reader", typeof (TextReader)); + return Read(new XmlTextReader(reader)); + } + + public object Read(XmlReader reader) + { + NetReflector.CheckNull(reader, "reader", typeof (XmlReader)); + return Read(XmlUtil.ReadNode(reader)); + } + + public object Read(XmlNode node) + { + NetReflector.CheckNull(node, "node", typeof (XmlNode)); + IXmlSerialiser serialiser = table[node.Name]; + if (serialiser == null) + { + throw new NetReflectorException(string.Format("No loaded type is marked up with a ReflectorType attribute that matches the Xml node ({0}). Xml Source: {1}", node.Name, node.OuterXml)); + } + return serialiser.Read(node, table); + } + + public void Read(string xml, object instance) + { + NetReflector.CheckNull(xml, "xml", typeof (string)); + Read(new StringReader(xml), instance); + } + + public void Read(TextReader reader, object instance) + { + NetReflector.CheckNull(reader, "reader", typeof (TextReader)); + Read(new XmlTextReader(reader), instance); + } + + public void Read(XmlReader reader, object instance) + { + NetReflector.CheckNull(reader, "reader", typeof (XmlReader)); + Read(XmlUtil.ReadNode(reader), instance); + } + + public void Read(XmlNode node, object instance) + { + NetReflector.CheckNull(node, "node", typeof (XmlNode)); + NetReflector.CheckNull(instance, "instance", typeof (object)); + new XmlTypeSerialiser(instance.GetType(), new ReflectorTypeAttribute(instance.GetType().Name)).ReadMembers(node, instance, table); + } + } + + // [Obsolete("Use the instance methods instead")] + public class NetReflector + { + public static string Write(object target) + { + StringWriter buffer = new StringWriter(); + new NetReflectorWriter(buffer).Write(target); + return buffer.ToString(); + } + + public static void Write(TextWriter writer, object target) + { + new NetReflectorWriter(writer).Write(target); + } + + public static void Write(XmlWriter writer, object target) + { + new NetReflectorWriter(writer).Write(target); + } public static object Read(string xml) { ! return new NetReflectorReader().Read(xml); } public static object Read(string xml, NetReflectorTypeTable table) { ! return new NetReflectorReader(table).Read(xml); } public static object Read(TextReader reader) { ! return new NetReflectorReader().Read(reader); } public static object Read(TextReader reader, NetReflectorTypeTable table) { ! return new NetReflectorReader(table).Read(reader); } public static object Read(XmlReader reader) { ! return new NetReflectorReader().Read(reader); } public static object Read(XmlReader reader, NetReflectorTypeTable table) { ! return new NetReflectorReader(table).Read(reader); } public static object Read(XmlNode node) { ! return new NetReflectorReader().Read(node); } public static object Read(XmlNode node, NetReflectorTypeTable table) { ! return new NetReflectorReader(table).Read(node); } public static void Read(string xml, object instance) { ! new NetReflectorReader().Read(xml, instance); } public static void Read(string xml, object instance, NetReflectorTypeTable table) { ! new NetReflectorReader(table).Read(xml, instance); } public static void Read(XmlReader reader, object instance) { ! new NetReflectorReader().Read(reader, instance); } public static void Read(XmlReader reader, object instance, NetReflectorTypeTable table) { ! new NetReflectorReader(table).Read(reader, instance); } public static void Read(XmlNode node, object instance) { ! new NetReflectorReader().Read(node, instance); } public static void Read(XmlNode node, object instance, NetReflectorTypeTable table) { ! new NetReflectorReader(table).Read(node, instance); } ! protected internal static void CheckNull(object obj, string param, Type expected) { if (obj == null) Index: NetReflectorTypeTable.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/NetReflectorTypeTable.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** NetReflectorTypeTable.cs 7 Mar 2005 05:46:06 -0000 1.4 --- NetReflectorTypeTable.cs 7 Apr 2005 04:30:39 -0000 1.5 *************** *** 3,23 **** using System.IO; using System.Reflection; using Exortech.NetReflector.Util; namespace Exortech.NetReflector { public class NetReflectorTypeTable : IEnumerable { private readonly IInstantiator instantiator; ! public NetReflectorTypeTable() : this (new DefaultInstantiator()) { } public NetReflectorTypeTable(IInstantiator instantiator) { this.instantiator = instantiator; } - private Hashtable reflectorTypes = new Hashtable(); - public int Count { --- 3,28 ---- using System.IO; using System.Reflection; + using System.Xml; using Exortech.NetReflector.Util; namespace Exortech.NetReflector { + public delegate void UnusedNodeEventHandler(XmlNode node); + public class NetReflectorTypeTable : IEnumerable { + public event UnusedNodeEventHandler UnusedNode; private readonly IInstantiator instantiator; + private readonly IDictionary reflectorTypes = new Hashtable(); ! public NetReflectorTypeTable() : this(new DefaultInstantiator()) ! {} public NetReflectorTypeTable(IInstantiator instantiator) { this.instantiator = instantiator; + UnusedNode = new UnusedNodeEventHandler(NullHandler); } public int Count { *************** *** 37,47 **** if (! reflectorTypes.Contains(attribute.Name)) { ! IXmlSerialiser serialiser = attribute.CreateSerialiser(type); ! serialiser.Instantiator = instantiator; reflectorTypes.Add(attribute.Name, serialiser); } else if (type != this[attribute.Name].Type) { ! throw new NetReflectorException(string.Format("Multiple types exist with the same ReflectorTypeAttribute name ({0}): {1}, {2}", attribute.Name, type, this[attribute.Name].Type)); } --- 42,51 ---- if (! reflectorTypes.Contains(attribute.Name)) { ! IXmlSerialiser serialiser = attribute.CreateSerialiser(type, instantiator); reflectorTypes.Add(attribute.Name, serialiser); } else if (type != this[attribute.Name].Type) { ! throw new NetReflectorException(string.Format(@"Multiple types exist with the same ReflectorTypeAttribute name ""{0}"": ({1}, {2})", attribute.Name, type, this[attribute.Name].Type)); } *************** *** 95,99 **** return table; } ! public static NetReflectorTypeTable CreateDefault(IInstantiator instantiator) { --- 99,103 ---- return table; } ! public static NetReflectorTypeTable CreateDefault(IInstantiator instantiator) { *************** *** 112,115 **** --- 116,127 ---- return reflectorTypes.Values.GetEnumerator(); } + + public void OnUnusedNode(XmlNode orphan) + { + UnusedNode(orphan); + } + + private void NullHandler(XmlNode node) + {} } } \ No newline at end of file |