2 using System.Collections;
\r
3 using System.Configuration;
\r
7 namespace Mainsoft.Drawing.Configuration
\r
10 /// Summary description for MetadataConfigurationHandler.
\r
12 public class ResolutionConfigurationHandler : IConfigurationSectionHandler
\r
14 public ResolutionConfigurationHandler()
\r
17 // TODO: Add constructor logic here
\r
21 public virtual object Create (object parent, object configContext, XmlNode section) {
\r
23 if (section.Attributes != null && section.Attributes.Count != 0)
\r
24 HandlersUtil.ThrowException ("Unrecognized attribute", section);
\r
26 ResolutionConfigurationCollection col =
\r
27 new ResolutionConfigurationCollection(parent as ResolutionConfigurationCollection);
\r
29 XmlNodeList imageFormats = section.ChildNodes;
\r
30 foreach (XmlNode child in imageFormats) {
\r
32 XmlNodeType ntype = child.NodeType;
\r
33 if (ntype == XmlNodeType.Whitespace || ntype == XmlNodeType.Comment)
\r
36 if (ntype != XmlNodeType.Element)
\r
37 HandlersUtil.ThrowException ("Only elements allowed", child);
\r
39 string imageFormatName = HandlersUtil.ExtractAttributeValue ("name", child, false, false);
\r
41 string xResPath = HandlersUtil.ExtractNodeValue(child["xresolution"]);
\r
42 string yResPath = HandlersUtil.ExtractNodeValue(child["yresolution"]);
\r
43 string unitsType = HandlersUtil.ExtractNodeValue(child["unitstype"], false, true);
\r
45 string xResDefault = HandlersUtil.ExtractAttributeValue ("default", child["xresolution"]);
\r
46 string yResDefault = HandlersUtil.ExtractAttributeValue ("default", child["yresolution"]);
\r
47 string unitsTypeDefault = HandlersUtil.ExtractAttributeValue ("default", child["unitstype"], true);
\r
49 Hashtable unitScale = new Hashtable(3);
\r
51 XmlNodeList unitScaleNodes = child.SelectNodes("unitscale");
\r
52 foreach (XmlNode unitScaleNode in unitScaleNodes) {
\r
54 HandlersUtil.ExtractAttributeValue ("value", unitScaleNode),
\r
55 HandlersUtil.ExtractNodeValue(unitScaleNode) );
\r
58 ResolutionConfiguration resConf = new ResolutionConfiguration(
\r
60 xResPath, yResPath, unitsType,
\r
61 xResDefault, yResDefault, unitsTypeDefault,
\r
72 internal sealed class HandlersUtil {
\r
73 private HandlersUtil () {
\r
76 static internal string ExtractNodeValue(XmlNode node, bool optional, bool allowEmpty) {
\r
80 ThrowException ("Required node not found", node);
\r
83 string nodeValue = node.InnerText;
\r
85 if (!allowEmpty && nodeValue == String.Empty) {
\r
86 string opt = optional ? "Optional" : "Required";
\r
87 ThrowException (opt + " node is empty", node);
\r
93 static internal string ExtractNodeValue(XmlNode node, bool optional) {
\r
94 return ExtractNodeValue(node, false, false);
\r
97 static internal string ExtractNodeValue(XmlNode node) {
\r
98 return ExtractNodeValue(node, false);
\r
101 static internal string ExtractAttributeValue (string attKey, XmlNode node) {
\r
102 return ExtractAttributeValue (attKey, node, false);
\r
105 static internal string ExtractAttributeValue (string attKey, XmlNode node, bool optional) {
\r
106 return ExtractAttributeValue (attKey, node, optional, false);
\r
109 static internal string ExtractAttributeValue (string attKey, XmlNode node, bool optional,
\r
111 if (node.Attributes == null) {
\r
115 ThrowException ("Required attribute not found: " + attKey, node);
\r
118 XmlNode att = node.Attributes.RemoveNamedItem (attKey);
\r
122 ThrowException ("Required attribute not found: " + attKey, node);
\r
125 string value = att.Value;
\r
126 if (!allowEmpty && value == String.Empty) {
\r
127 string opt = optional ? "Optional" : "Required";
\r
128 ThrowException (opt + " attribute is empty: " + attKey, node);
\r
134 static internal void ThrowException (string msg, XmlNode node) {
\r
135 if (node != null && node.Name != String.Empty)
\r
136 msg = msg + " (node name: " + node.Name + ") ";
\r
137 throw new ConfigurationException (msg, node);
\r