The Labs \ Source Viewer \ SSCLI \ System.Configuration \ HandlerBase

  1. //------------------------------------------------------------------------------
  2. // <copyright file="HandlerBase.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Configuration
  16. {
  17.    
  18.     using System.Globalization;
  19.     using System.Xml;
  20.    
  21.     internal class HandlerBase
  22.     {
  23.        
  24.         private HandlerBase()
  25.         {
  26.         }
  27.        
  28.         //
  29.         // XML Attribute Helpers
  30.         //
  31.        
  32.         private static XmlNode GetAndRemoveAttribute(XmlNode node, string attrib, bool fRequired)
  33.         {
  34.             XmlNode a = node.Attributes.RemoveNamedItem(attrib);
  35.            
  36.             // If the attribute is required and was not present, throw
  37.             if (fRequired && a == null) {
  38.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_missing_required_attribute, attrib, node.Name), node);
  39.             }
  40.            
  41.             return a;
  42.         }
  43.        
  44.         private static XmlNode GetAndRemoveStringAttributeInternal(XmlNode node, string attrib, bool fRequired, ref string val)
  45.         {
  46.             XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
  47.             if (a != null)
  48.                 val = a.Value;
  49.            
  50.             return a;
  51.         }
  52.        
  53.         static internal XmlNode GetAndRemoveStringAttribute(XmlNode node, string attrib, ref string val)
  54.         {
  55.                 /*fRequired*/            return GetAndRemoveStringAttributeInternal(node, attrib, false, ref val);
  56.         }
  57.        
  58.        
  59.         // input.Xml cursor must be at a true/false XML attribute
  60.         private static XmlNode GetAndRemoveBooleanAttributeInternal(XmlNode node, string attrib, bool fRequired, ref bool val)
  61.         {
  62.             XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
  63.             if (a != null) {
  64.                 try {
  65.                     val = bool.Parse(a.Value);
  66.                 }
  67.                 catch (Exception e) {
  68.                     throw new ConfigurationErrorsException(SR.GetString(SR.GetString(SR.Config_invalid_boolean_attribute, a.Name)), e, a);
  69.                 }
  70.             }
  71.            
  72.             return a;
  73.         }
  74.        
  75.         static internal XmlNode GetAndRemoveBooleanAttribute(XmlNode node, string attrib, ref bool val)
  76.         {
  77.                 /*fRequired*/            return GetAndRemoveBooleanAttributeInternal(node, attrib, false, ref val);
  78.         }
  79.        
  80.        
  81.         // input.Xml cursor must be an integer XML attribute
  82.         private static XmlNode GetAndRemoveIntegerAttributeInternal(XmlNode node, string attrib, bool fRequired, ref int val)
  83.         {
  84.             XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
  85.             if (a != null) {
  86.                 if (a.Value.Trim() != a.Value) {
  87.                     throw new ConfigurationErrorsException(SR.GetString(SR.Config_invalid_integer_attribute, a.Name), a);
  88.                 }
  89.                
  90.                 try {
  91.                     val = int.Parse(a.Value, CultureInfo.InvariantCulture);
  92.                 }
  93.                 catch (Exception e) {
  94.                     throw new ConfigurationErrorsException(SR.GetString(SR.Config_invalid_integer_attribute, a.Name), e, a);
  95.                 }
  96.             }
  97.            
  98.             return a;
  99.         }
  100.        
  101.         static internal XmlNode GetAndRemoveIntegerAttribute(XmlNode node, string attrib, ref int val)
  102.         {
  103.                 /*fRequired*/            return GetAndRemoveIntegerAttributeInternal(node, attrib, false, ref val);
  104.         }
  105.        
  106.        
  107.        
  108.        
  109.        
  110.        
  111.        
  112.        
  113.        
  114.         static internal void CheckForUnrecognizedAttributes(XmlNode node)
  115.         {
  116.             if (node.Attributes.Count != 0) {
  117.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_unrecognized_attribute, node.Attributes[0].Name), node);
  118.             }
  119.         }
  120.        
  121.         //
  122.         // Obsolete XML Attribute Helpers
  123.         //
  124.        
  125.         // if attribute not found return null
  126.         static internal string RemoveAttribute(XmlNode node, string name)
  127.         {
  128.            
  129.             XmlNode attribute = node.Attributes.RemoveNamedItem(name);
  130.            
  131.             if (attribute != null) {
  132.                 return attribute.Value;
  133.             }
  134.            
  135.             return null;
  136.         }
  137.        
  138.         // if attr not found throw standard message - "attribute x required"
  139.         static internal string RemoveRequiredAttribute(XmlNode node, string name)
  140.         {
  141.                 /*allowEmpty*/            return RemoveRequiredAttribute(node, name, false);
  142.         }
  143.        
  144.         static internal string RemoveRequiredAttribute(XmlNode node, string name, bool allowEmpty)
  145.         {
  146.             XmlNode attribute = node.Attributes.RemoveNamedItem(name);
  147.            
  148.             if (attribute == null) {
  149.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_required_attribute_missing, name), node);
  150.             }
  151.            
  152.             if (String.IsNullOrEmpty(attribute.Value) && allowEmpty == false) {
  153.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_required_attribute_empty, name), node);
  154.             }
  155.            
  156.             return attribute.Value;
  157.         }
  158.        
  159.        
  160.        
  161.         //
  162.         // XML Element Helpers
  163.         //
  164.        
  165.         static internal void CheckForNonElement(XmlNode node)
  166.         {
  167.             if (node.NodeType != XmlNodeType.Element) {
  168.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_elements_only), node);
  169.             }
  170.         }
  171.        
  172.        
  173.         static internal bool IsIgnorableAlsoCheckForNonElement(XmlNode node)
  174.         {
  175.             if (node.NodeType == XmlNodeType.Comment || node.NodeType == XmlNodeType.Whitespace) {
  176.                 return true;
  177.             }
  178.            
  179.             CheckForNonElement(node);
  180.            
  181.             return false;
  182.         }
  183.        
  184.        
  185.         static internal void CheckForChildNodes(XmlNode node)
  186.         {
  187.             if (node.HasChildNodes) {
  188.                 throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_no_child_nodes), node.FirstChild);
  189.             }
  190.         }
  191.        
  192.         static internal void ThrowUnrecognizedElement(XmlNode node)
  193.         {
  194.             throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_unrecognized_element), node);
  195.         }
  196.        
  197.         //
  198.        
  199.     }
  200. }

Developer Fusion