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

  1. //------------------------------------------------------------------------------
  2. // <copyright file="PropertyInformation.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.     // PropertyInformation
  25.     //
  26.     // Contains information about a property
  27.     //
  28.     public sealed class PropertyInformation
  29.     {
  30.        
  31.         private ConfigurationElement ThisElement = null;
  32.         private string PropertyName;
  33.         private ConfigurationProperty _Prop = null;
  34.         private const string LockAll = "*";
  35.        
  36.         private ConfigurationProperty Prop {
  37.             get {
  38.                 if (_Prop == null) {
  39.                     _Prop = ThisElement.Properties[PropertyName];
  40.                 }
  41.                 return _Prop;
  42.             }
  43.         }
  44.        
  45.         internal PropertyInformation(ConfigurationElement thisElement, string propertyName)
  46.         {
  47.             PropertyName = propertyName;
  48.             ThisElement = thisElement;
  49.         }
  50.        
  51.        
  52.         public string Name {
  53.             get { return PropertyName; }
  54.         }
  55.        
  56.        
  57.         internal string ProvidedName {
  58.             get { return Prop.ProvidedName; }
  59.         }
  60.        
  61.        
  62.         public object Value {
  63.             get { return ThisElement[PropertyName]; }
  64.             set { ThisElement[PropertyName] = value; }
  65.         }
  66.        
  67.         // DefaultValue
  68.         //
  69.         // What is the default value for this property
  70.         //
  71.         public object DefaultValue {
  72.             get { return Prop.DefaultValue; }
  73.         }
  74.        
  75.         // ValueOrigin
  76.         //
  77.         // Where was the property retrieved from
  78.         //
  79.         public PropertyValueOrigin ValueOrigin {
  80.             get {
  81.                 if (ThisElement.Values[PropertyName] == null) {
  82.                     return PropertyValueOrigin.Default;
  83.                 }
  84.                 if (ThisElement.Values.IsInherited(PropertyName)) {
  85.                     return PropertyValueOrigin.Inherited;
  86.                 }
  87.                 return PropertyValueOrigin.SetHere;
  88.             }
  89.         }
  90.        
  91.         // IsModified
  92.         //
  93.         // Was the property Modified
  94.         //
  95.         public bool IsModified {
  96.             get {
  97.                 if (ThisElement.Values[PropertyName] == null) {
  98.                     return false;
  99.                 }
  100.                 if (ThisElement.Values.IsModified(PropertyName)) {
  101.                     return true;
  102.                 }
  103.                 return false;
  104.             }
  105.         }
  106.         // IsKey
  107.         //
  108.         // Is this property a key?
  109.         //
  110.         public bool IsKey {
  111.             get { return Prop.IsKey; }
  112.         }
  113.        
  114.         // IsRequired
  115.         //
  116.         // Is this property required?
  117.         //
  118.         public bool IsRequired {
  119.             get { return Prop.IsRequired; }
  120.         }
  121.        
  122.         // IsLocked
  123.         //
  124.         // Is this property locked?
  125.         //
  126.         public bool IsLocked {
  127.             get { return ((ThisElement.LockedAllExceptAttributesList != null && !ThisElement.LockedAllExceptAttributesList.DefinedInParent(PropertyName)) || (ThisElement.LockedAttributesList != null && (ThisElement.LockedAttributesList.DefinedInParent(PropertyName) || ThisElement.LockedAttributesList.DefinedInParent(LockAll))) || (((ThisElement.ItemLocked & ConfigurationValueFlags.Locked) != 0) && ((ThisElement.ItemLocked & ConfigurationValueFlags.Inherited) != 0))); }
  128.         }
  129.        
  130.         // Source
  131.         //
  132.         // What is the source file where this data came from
  133.         //
  134.         public string Source {
  135.             get {
  136.                 PropertySourceInfo psi = ThisElement.Values.GetSourceInfo(PropertyName);
  137.                 if (psi == null) {
  138.                     psi = ThisElement.Values.GetSourceInfo(String.Empty);
  139.                 }
  140.                 if (psi == null) {
  141.                     return String.Empty;
  142.                 }
  143.                 return psi.FileName;
  144.             }
  145.         }
  146.        
  147.         // LineNumber
  148.         //
  149.         // What is the line number associated with the source
  150.         //
  151.         // Note:
  152.         // 1 is the first line in the file. 0 is returned when there is no
  153.         // source
  154.         //
  155.         public int LineNumber {
  156.             get {
  157.                 PropertySourceInfo psi = ThisElement.Values.GetSourceInfo(PropertyName);
  158.                 if (psi == null) {
  159.                     psi = ThisElement.Values.GetSourceInfo(String.Empty);
  160.                 }
  161.                 if (psi == null) {
  162.                     return 0;
  163.                 }
  164.                 return psi.LineNumber;
  165.             }
  166.         }
  167.        
  168.         // Type
  169.         //
  170.         // What is the type for the property
  171.         //
  172.         public Type Type {
  173.             get { return Prop.Type; }
  174.         }
  175.        
  176.         // Validator
  177.         //
  178.         public ConfigurationValidatorBase Validator {
  179.             get { return Prop.Validator; }
  180.         }
  181.        
  182.         // Converter
  183.         //
  184.         public TypeConverter Converter {
  185.             get { return Prop.Converter; }
  186.         }
  187.        
  188.         // Property description ( comments etc )
  189.         public string Description {
  190.             get { return Prop.Description; }
  191.         }
  192.     }
  193. }

Developer Fusion