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

  1. //------------------------------------------------------------------------------
  2. // <copyright file="ElementInformation.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. using System;
  16. using System.Configuration;
  17. using System.Collections.Specialized;
  18. using System.ComponentModel;
  19. using System.Collections;
  20. using System.Runtime.Serialization;
  21. namespace System.Configuration
  22. {
  23.    
  24.     // ElementInformation
  25.     //
  26.     // Expose information on Configuration Elements, and the
  27.     // properties that they contain
  28.     //
  29.     public sealed class ElementInformation
  30.     {
  31.         private ConfigurationElement _thisElement;
  32.         private PropertyInformationCollection _internalProperties;
  33.         private ConfigurationException[] _errors;
  34.        
  35.         internal ElementInformation(ConfigurationElement thisElement)
  36.         {
  37.             _thisElement = thisElement;
  38.         }
  39.        
  40.         // Properties
  41.         //
  42.         // Retrieve Collection of properties within this element
  43.         //
  44.         public PropertyInformationCollection Properties {
  45.             get {
  46.                 if (_internalProperties == null) {
  47.                     _internalProperties = new PropertyInformationCollection(_thisElement);
  48.                 }
  49.                
  50.                 return _internalProperties;
  51.             }
  52.         }
  53.        
  54.         // IsInherited
  55.         //
  56.         // Was this element inheritted, or was the property actually
  57.         // set here
  58.         //
  59.         public bool IsPresent {
  60.             get { return _thisElement.ElementPresent; }
  61.         }
  62.        
  63.         // IsLocked
  64.         //
  65.         // Is this property locked?
  66.         //
  67.         public bool IsLocked {
  68.             get { return (((_thisElement.ItemLocked & ConfigurationValueFlags.Locked) != 0) && ((_thisElement.ItemLocked & ConfigurationValueFlags.Inherited) != 0)); }
  69.         }
  70.        
  71.         // IsCollection
  72.         //
  73.         // Is this element a collection?
  74.         //
  75.         public bool IsCollection {
  76.             get {
  77.                 ConfigurationElementCollection collection = _thisElement as ConfigurationElementCollection;
  78.                 if (collection == null) {
  79.                     // Try the default collection
  80.                     if (_thisElement.Properties.DefaultCollectionProperty != null) {
  81.                         // this is not a collection but it may contain a default collection
  82.                         collection = _thisElement[_thisElement.Properties.DefaultCollectionProperty] as ConfigurationElementCollection;
  83.                     }
  84.                 }
  85.                
  86.                 return (collection != null);
  87.             }
  88.         }
  89.        
  90.         // Internal method to fix SetRawXML defect...
  91.         internal PropertySourceInfo PropertyInfoInternal()
  92.         {
  93.             return _thisElement.PropertyInfoInternal(_thisElement.ElementTagName);
  94.         }
  95.        
  96.         internal void ChangeSourceAndLineNumber(PropertySourceInfo sourceInformation)
  97.         {
  98.             _thisElement.Values.ChangeSourceInfo(_thisElement.ElementTagName, sourceInformation);
  99.         }
  100.        
  101.         // Source
  102.         //
  103.         // What is the source file where this data came from
  104.         //
  105.         public string Source {
  106.             get {
  107.                 PropertySourceInfo psi = _thisElement.Values.GetSourceInfo(_thisElement.ElementTagName);
  108.                
  109.                 if (psi == null) {
  110.                     return null;
  111.                 }
  112.                
  113.                 return psi.FileName;
  114.             }
  115.         }
  116.        
  117.         // LineNumber
  118.         //
  119.         // What is the line number associated with the source
  120.         //
  121.         // Note:
  122.         // 1 is the first line in the file. 0 is returned when there is no
  123.         // source
  124.         //
  125.         public int LineNumber {
  126.             get {
  127.                 PropertySourceInfo psi = _thisElement.Values.GetSourceInfo(_thisElement.ElementTagName);
  128.                 if (psi == null) {
  129.                     return 0;
  130.                 }
  131.                
  132.                 return psi.LineNumber;
  133.             }
  134.         }
  135.        
  136.         // Type
  137.         //
  138.         // What is the type for the element
  139.         //
  140.         public Type Type {
  141.             get { return _thisElement.GetType(); }
  142.         }
  143.        
  144.         // Validator
  145.         //
  146.         // What is the validator to validate the element?
  147.         //
  148.         public ConfigurationValidatorBase Validator {
  149.             get { return _thisElement.ElementProperty.Validator; }
  150.         }
  151.        
  152.         // GetReadOnlyErrorsList
  153.         //
  154.         // Get a Read Only list of the exceptions for this
  155.         // element
  156.         //
  157.         private ConfigurationException[] GetReadOnlyErrorsList()
  158.         {
  159.             ArrayList arrayList;
  160.             int count;
  161.             ConfigurationException[] exceptionList;
  162.            
  163.             arrayList = _thisElement.GetErrorsList();
  164.             count = arrayList.Count;
  165.            
  166.             // Create readonly array
  167.             exceptionList = new ConfigurationException[arrayList.Count];
  168.            
  169.             if (count != 0) {
  170.                 arrayList.CopyTo(exceptionList, 0);
  171.             }
  172.            
  173.             return exceptionList;
  174.         }
  175.        
  176.         // Errors
  177.         //
  178.         // Retrieve the _errors for this element and sub elements
  179.         //
  180.         public ICollection Errors {
  181.             get {
  182.                 if (_errors == null) {
  183.                     _errors = GetReadOnlyErrorsList();
  184.                 }
  185.                
  186.                 return _errors;
  187.             }
  188.         }
  189.     }
  190. }

Developer Fusion