SettingsBase.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Sys / System / Configuration / SettingsBase.cs / 1 / SettingsBase.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using  System.Collections.Specialized; 
    using  System.Runtime.Serialization;
    using  System.Configuration.Provider; 
    using  System.Collections;
    using System.ComponentModel;
   ////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////// 
   ////////////////////////////////////////////////////////////
 
   public abstract class SettingsBase { 

       protected SettingsBase() 
       {
           _PropertyValues = new SettingsPropertyValueCollection();
       }
       //////////////////////////////////////////////////////////// 
       ////////////////////////////////////////////////////////////
       public virtual object this[string propertyName] 
       { 
           get {
               if (IsSynchronized) { 
                   lock (this) {
                       return GetPropertyValueByName(propertyName);
                   }
               } else { 
                   return GetPropertyValueByName(propertyName);
               } 
           } 
           set {
               if (IsSynchronized) { 
                   lock (this) {
                       SetPropertyValueByName(propertyName, value);
                   }
               } else { 
                   SetPropertyValueByName(propertyName, value);
               } 
           } 
       }
 
       private object GetPropertyValueByName(string propertyName)
       {
           if (Properties == null || _PropertyValues == null || Properties.Count == 0)
               throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); 
           SettingsProperty pp = Properties[propertyName];
           if (pp == null) 
               throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); 
           SettingsPropertyValue p = _PropertyValues[propertyName];
           if (p == null) 
           {
               GetPropertiesFromProvider(pp.Provider);
               p = _PropertyValues[propertyName];
               if (p == null) 
                   throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
           } 
           return p.PropertyValue; 
       }
       private void SetPropertyValueByName(string propertyName, object propertyValue) 
       {
           if (Properties == null || _PropertyValues == null || Properties.Count == 0)
               throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
 
           SettingsProperty pp = Properties[propertyName];
           if (pp == null) 
               throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); 

           if (pp.IsReadOnly) 
               throw new SettingsPropertyIsReadOnlyException(SR.GetString(SR.SettingsPropertyReadOnly, propertyName));

           if (propertyValue != null && !pp.PropertyType.IsInstanceOfType(propertyValue))
               throw new SettingsPropertyWrongTypeException(SR.GetString(SR.SettingsPropertyWrongType, propertyName)); 

           SettingsPropertyValue p = _PropertyValues[propertyName]; 
           if (p == null) 
           {
               GetPropertiesFromProvider(pp.Provider); 
               p = _PropertyValues[propertyName];
               if (p == null)
                   throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName));
           } 

           p.PropertyValue = propertyValue; 
       } 

       //////////////////////////////////////////////////////////// 
       ////////////////////////////////////////////////////////////
       public void Initialize(
               SettingsContext                  context,
               SettingsPropertyCollection       properties, 
               SettingsProviderCollection       providers)
       { 
           _Context = context; 
           _Properties = properties;
           _Providers = providers; 
       }

       ////////////////////////////////////////////////////////////
       //////////////////////////////////////////////////////////// 
       public virtual void Save() {
           if (IsSynchronized) { 
               lock (this) { 
                   SaveCore();
               } 
           } else {
               SaveCore();
           }
       } 
       private void SaveCore()
       { 
           if (Properties == null || _PropertyValues == null || Properties.Count == 0) 
               return;
 
           foreach(SettingsProvider prov in Providers) {
               SettingsPropertyValueCollection ppcv = new SettingsPropertyValueCollection();
               foreach (SettingsPropertyValue pp in PropertyValues)
               { 
                   if (pp.Property.Provider == prov) {
                       ppcv.Add(pp); 
                   } 
               }
               if (ppcv.Count > 0) { 
                   prov.SetPropertyValues(Context, ppcv);
               }
           }
           foreach (SettingsPropertyValue pp in PropertyValues) 
               pp.IsDirty = false;
       } 
       virtual public SettingsPropertyCollection Properties  { get { return _Properties; }} 
       virtual public SettingsProviderCollection Providers   { get { return _Providers; }}
       virtual public SettingsPropertyValueCollection PropertyValues { get { return _PropertyValues; } } 
       virtual public SettingsContext Context { get { return _Context; } }


       private void GetPropertiesFromProvider(SettingsProvider provider) 
       {
           SettingsPropertyCollection ppc = new SettingsPropertyCollection(); 
           foreach (SettingsProperty pp in Properties) 
           {
               if (pp.Provider == provider) 
               {
                   ppc.Add(pp);
               }
           } 

           if (ppc.Count > 0) 
           { 
               SettingsPropertyValueCollection ppcv = provider.GetPropertyValues(Context, ppc);
               foreach (SettingsPropertyValue p in ppcv) 
               {
                   if (_PropertyValues[p.Name] == null)
                       _PropertyValues.Add(p);
               } 
           }
       } 
 
       public static SettingsBase Synchronized(SettingsBase settingsBase)
       { 
           settingsBase._IsSynchronized = true;
           return settingsBase;
       }
       //////////////////////////////////////////////////////////// 
       ////////////////////////////////////////////////////////////
       private  SettingsPropertyCollection      _Properties       = null; 
       private  SettingsProviderCollection      _Providers        = null; 
       private  SettingsPropertyValueCollection _PropertyValues   = null;
       private  SettingsContext                 _Context          = null; 
       private  bool                            _IsSynchronized   = false;

       [Browsable(false)]
       public bool IsSynchronized { get { return _IsSynchronized; } } 
   }
} 


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK