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

  1. //------------------------------------------------------------------------------
  2. // <copyright file="ProviderSettings.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.     using System;
  18.     using System.Xml;
  19.     using System.Configuration;
  20.     using System.Collections.Specialized;
  21.     using System.Collections;
  22.     using System.IO;
  23.     using System.Text;
  24.     using System.Globalization;
  25.    
  26.     public sealed class ProviderSettings : ConfigurationElement
  27.     {
  28.             // no reasonable default
  29.             // use default converter
  30.         private readonly ConfigurationProperty _propName = new ConfigurationProperty("name", typeof(string), null, null, ConfigurationProperty.NonEmptyStringValidator, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey);
  31.         private readonly ConfigurationProperty _propType = new ConfigurationProperty("type", typeof(string), "", ConfigurationPropertyOptions.IsRequired);
  32.         private ConfigurationPropertyCollection _properties;
  33.         private NameValueCollection _PropertyNameCollection = null;
  34.         public ProviderSettings()
  35.         {
  36.             _properties = new ConfigurationPropertyCollection();
  37.             _properties.Add(_propName);
  38.             _properties.Add(_propType);
  39.             _PropertyNameCollection = null;
  40.         }
  41.         public ProviderSettings(string name, string type) : this()
  42.         {
  43.             Name = name;
  44.             Type = type;
  45.         }
  46.        
  47.         protected internal override ConfigurationPropertyCollection Properties {
  48.             get {
  49.                 UpdatePropertyCollection();
  50.                 return _properties;
  51.             }
  52.         }
  53.        
  54.         protected internal override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode saveMode)
  55.         {
  56.             ProviderSettings parentProviders = parentElement as ProviderSettings;
  57.             if (parentProviders != null)
  58.                 parentProviders.UpdatePropertyCollection();
  59.             // before reseting make sure the bag is filled in
  60.             ProviderSettings sourceProviders = sourceElement as ProviderSettings;
  61.             if (sourceProviders != null)
  62.                 sourceProviders.UpdatePropertyCollection();
  63.             // before reseting make sure the bag is filled in
  64.             base.Unmerge(sourceElement, parentElement, saveMode);
  65.             UpdatePropertyCollection();
  66.         }
  67.        
  68.         protected internal override void Reset(ConfigurationElement parentElement)
  69.         {
  70.             ProviderSettings parentProviders = parentElement as ProviderSettings;
  71.             if (parentProviders != null)
  72.                 parentProviders.UpdatePropertyCollection();
  73.             // before reseting make sure the bag is filled in
  74.             base.Reset(parentElement);
  75.         }
  76.        
  77.         internal bool UpdatePropertyCollection()
  78.         {
  79.             bool bIsModified = false;
  80.             ArrayList removeList = null;
  81.            
  82.             if (_PropertyNameCollection != null) {
  83.                 // remove any data that has been delete from the collection
  84.                 foreach (ConfigurationProperty prop in _properties) {
  85.                     if (prop.Name != "name" && prop.Name != "type") {
  86.                         if (_PropertyNameCollection.Get(prop.Name) == null) {
  87.                             // _properties.Remove(prop.Name);
  88.                             if (removeList == null)
  89.                                 removeList = new ArrayList();
  90.                            
  91.                             if ((Values.GetConfigValue(prop.Name).ValueFlags & ConfigurationValueFlags.Locked) == 0) {
  92.                                 removeList.Add(prop.Name);
  93.                                 bIsModified = true;
  94.                             }
  95.                         }
  96.                     }
  97.                 }
  98.                
  99.                 if (removeList != null) {
  100.                     foreach (string propName in removeList) {
  101.                         _properties.Remove(propName);
  102.                     }
  103.                 }
  104.                
  105.                 // then copy any data that has been changed in the collection
  106.                 foreach (string Key in _PropertyNameCollection) {
  107.                     string valueInCollection = _PropertyNameCollection[Key];
  108.                     string valueInBag = GetProperty(Key);
  109.                    
  110.                     // add new property
  111.                     if (valueInBag == null || valueInCollection != valueInBag) {
  112.                         SetProperty(Key, valueInCollection);
  113.                         bIsModified = true;
  114.                     }
  115.                 }
  116.             }
  117.             _PropertyNameCollection = null;
  118.             return bIsModified;
  119.         }
  120.        
  121.         protected internal override bool IsModified()
  122.         {
  123.             return UpdatePropertyCollection() || base.IsModified();
  124.         }
  125.        
  126.         [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
  127.         public string Name {
  128.             get { return (string)base[_propName]; }
  129.             set { base[_propName] = value; }
  130.         }
  131.        
  132.         [ConfigurationProperty("type", IsRequired = true)]
  133.         public string Type {
  134.             get { return (string)base[_propType]; }
  135.             set { base[_propType] = value; }
  136.         }
  137.        
  138.         public NameValueCollection Parameters {
  139.             get {
  140.                 if (_PropertyNameCollection == null) {
  141.                     lock (this) {
  142.                         if (_PropertyNameCollection == null) {
  143.                             _PropertyNameCollection = new NameValueCollection(StringComparer.Ordinal);
  144.                            
  145.                             foreach (object de in _properties) {
  146.                                 ConfigurationProperty prop = (ConfigurationProperty)de;
  147.                                 if (prop.Name != "name" && prop.Name != "type")
  148.                                     _PropertyNameCollection.Add(prop.Name, (string)base[prop]);
  149.                             }
  150.                         }
  151.                     }
  152.                 }
  153.                 return (NameValueCollection)_PropertyNameCollection;
  154.             }
  155.         }
  156.        
  157.        
  158.         private string GetProperty(string PropName)
  159.         {
  160.             if (_properties.Contains(PropName)) {
  161.                 ConfigurationProperty prop = _properties[PropName];
  162.                 if (prop != null)
  163.                     return (string)base[prop];
  164.             }
  165.             return null;
  166.         }
  167.        
  168.         private bool SetProperty(string PropName, string value)
  169.         {
  170.             ConfigurationProperty SetPropName = null;
  171.             if (_properties.Contains(PropName))
  172.                 SetPropName = _properties[PropName];
  173.             else {
  174.                 SetPropName = new ConfigurationProperty(PropName, typeof(string), null);
  175.                 _properties.Add(SetPropName);
  176.             }
  177.             if (SetPropName != null) {
  178.                 base[SetPropName] = value;
  179.                 // Parameters[PropName] = value;
  180.                 return true;
  181.             }
  182.             else
  183.                 return false;
  184.         }
  185.        
  186.         protected override bool OnDeserializeUnrecognizedAttribute(string name, string value)
  187.         {
  188.             ConfigurationProperty _propName = new ConfigurationProperty(name, typeof(string), value);
  189.             _properties.Add(_propName);
  190.             base[_propName] = value;
  191.             // Add them to the property bag
  192.             Parameters[name] = value;
  193.             return true;
  194.         }
  195.        
  196.     }
  197. }

Developer Fusion