Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Configuration / System / Configuration / ProviderSettings.cs / 1305376 / ProviderSettings.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Configuration
{
using System;
using System.Xml;
using System.Configuration;
using System.Collections.Specialized;
using System.Collections;
using System.IO;
using System.Text;
using System.Globalization;
public sealed class ProviderSettings : ConfigurationElement
{
private readonly ConfigurationProperty _propName =
new ConfigurationProperty( "name",
typeof( string ),
null, // no reasonable default
null, // use default converter
ConfigurationProperty.NonEmptyStringValidator,
ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey);
private readonly ConfigurationProperty _propType = new ConfigurationProperty("type", typeof(String), "",
ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsTypeStringTransformationRequired);
private ConfigurationPropertyCollection _properties;
private NameValueCollection _PropertyNameCollection = null;
public ProviderSettings()
{
_properties = new ConfigurationPropertyCollection();
_properties.Add(_propName);
_properties.Add(_propType);
_PropertyNameCollection = null;
}
public ProviderSettings(String name, String type) : this()
{
Name = name;
Type = type;
}
protected internal override ConfigurationPropertyCollection Properties
{
get
{
UpdatePropertyCollection();
return _properties;
}
}
protected internal override void Unmerge(ConfigurationElement sourceElement,
ConfigurationElement parentElement,
ConfigurationSaveMode saveMode)
{
ProviderSettings parentProviders = parentElement as ProviderSettings;
if (parentProviders != null)
parentProviders.UpdatePropertyCollection(); // before reseting make sure the bag is filled in
ProviderSettings sourceProviders = sourceElement as ProviderSettings;
if (sourceProviders != null)
sourceProviders.UpdatePropertyCollection(); // before reseting make sure the bag is filled in
base.Unmerge(sourceElement, parentElement, saveMode);
UpdatePropertyCollection();
}
protected internal override void Reset(ConfigurationElement parentElement)
{
ProviderSettings parentProviders = parentElement as ProviderSettings;
if (parentProviders != null)
parentProviders.UpdatePropertyCollection(); // before reseting make sure the bag is filled in
base.Reset(parentElement);
}
internal bool UpdatePropertyCollection()
{
bool bIsModified = false;
ArrayList removeList = null;
if (_PropertyNameCollection != null)
{
// remove any data that has been delete from the collection
foreach (ConfigurationProperty prop in _properties)
{
if (prop.Name != "name" && prop.Name != "type")
{
if (_PropertyNameCollection.Get(prop.Name) == null)
{
// _properties.Remove(prop.Name);
if (removeList == null)
removeList = new ArrayList();
if ((Values.GetConfigValue(prop.Name).ValueFlags & ConfigurationValueFlags.Locked) == 0) {
removeList.Add(prop.Name);
bIsModified = true;
}
}
}
}
if (removeList != null)
{
foreach (string propName in removeList)
{
_properties.Remove(propName);
}
}
// then copy any data that has been changed in the collection
foreach (string Key in _PropertyNameCollection)
{
string valueInCollection = _PropertyNameCollection[Key];
string valueInBag = GetProperty(Key);
if (valueInBag == null || valueInCollection != valueInBag) // add new property
{
SetProperty(Key, valueInCollection);
bIsModified = true;
}
}
}
_PropertyNameCollection = null;
return bIsModified;
}
protected internal override bool IsModified()
{
return UpdatePropertyCollection() || base.IsModified();
}
[ConfigurationProperty("name", IsRequired = true, IsKey=true)]
public String Name
{
get
{
return (String)base[_propName];
}
set
{
base[_propName] = value;
}
}
[ConfigurationProperty("type", IsRequired = true)]
public String Type
{
get
{
return (String)base[_propType];
}
set
{
base[_propType] = value;
}
}
public NameValueCollection Parameters
{
get
{
if (_PropertyNameCollection == null)
{
lock (this)
{
if (_PropertyNameCollection == null)
{
_PropertyNameCollection = new NameValueCollection(StringComparer.Ordinal);
foreach (object de in _properties)
{
ConfigurationProperty prop = (ConfigurationProperty)de;
if (prop.Name != "name" && prop.Name != "type")
_PropertyNameCollection.Add(prop.Name, (string)base[prop]);
}
}
}
}
return (NameValueCollection)_PropertyNameCollection;
}
}
private string GetProperty(string PropName)
{
if (_properties.Contains(PropName))
{
ConfigurationProperty prop = _properties[PropName];
if(prop != null)
return (string)base[prop];
}
return null;
}
private bool SetProperty(string PropName,string value)
{
ConfigurationProperty SetPropName = null;
if (_properties.Contains(PropName))
SetPropName = _properties[PropName];
else
{
SetPropName = new ConfigurationProperty(PropName, typeof(string), null);
_properties.Add(SetPropName);
}
if (SetPropName != null)
{
base[SetPropName] = value;
// Parameters[PropName] = value;
return true;
}
else
return false;
}
protected override bool OnDeserializeUnrecognizedAttribute(String name, String value)
{
ConfigurationProperty _propName = new ConfigurationProperty(name, typeof(string), value);
_properties.Add(_propName);
base[_propName] = value; // Add them to the property bag
Parameters[name] = value;
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BitmapFrameEncode.cs
- XamlParser.cs
- invalidudtexception.cs
- TextElementAutomationPeer.cs
- DoubleAnimationUsingKeyFrames.cs
- AutomationAttributeInfo.cs
- MessageSecurityProtocol.cs
- PrintPageEvent.cs
- InternalBufferOverflowException.cs
- TogglePattern.cs
- storepermission.cs
- StyleModeStack.cs
- Currency.cs
- Registration.cs
- ReferenceService.cs
- DataGridViewAccessibleObject.cs
- AssociationEndMember.cs
- ItemsChangedEventArgs.cs
- KeyBinding.cs
- DataGridViewEditingControlShowingEventArgs.cs
- URLString.cs
- ReadWriteObjectLock.cs
- ProxyFragment.cs
- Annotation.cs
- DataAccessor.cs
- Setter.cs
- ConfigXmlAttribute.cs
- IxmlLineInfo.cs
- ResourceDescriptionAttribute.cs
- SequentialOutput.cs
- HtmlFormAdapter.cs
- XmlRawWriter.cs
- SplitContainer.cs
- WebDescriptionAttribute.cs
- ProfileGroupSettingsCollection.cs
- ProviderCommandInfoUtils.cs
- PointConverter.cs
- LicenseProviderAttribute.cs
- QilLoop.cs
- QueryCursorEventArgs.cs
- ViewLoader.cs
- FragmentQuery.cs
- QuerySettings.cs
- ThreadExceptionDialog.cs
- RelOps.cs
- VBCodeProvider.cs
- HelloOperation11AsyncResult.cs
- StorageEntityTypeMapping.cs
- EdmFunctions.cs
- IdentifierCreationService.cs
- LocatorPartList.cs
- ZoomComboBox.cs
- CachedRequestParams.cs
- HeaderedContentControl.cs
- VirtualPath.cs
- ChangePassword.cs
- NonSerializedAttribute.cs
- SHA256Cng.cs
- Encoder.cs
- DataGridViewCellCollection.cs
- TrackBarRenderer.cs
- CounterCreationDataCollection.cs
- VisualBrush.cs
- SetStateEventArgs.cs
- PropertyDescriptor.cs
- GPRECT.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- CodeDomLoader.cs
- SystemIPAddressInformation.cs
- CachedPathData.cs
- SafeNativeMethods.cs
- BitmapFrameEncode.cs
- UpdateException.cs
- WebPartUserCapability.cs
- RoutingTable.cs
- FatalException.cs
- LambdaCompiler.Binary.cs
- RequestQueue.cs
- FixedSOMContainer.cs
- ProgressBarHighlightConverter.cs
- WebPartManagerInternals.cs
- NonVisualControlAttribute.cs
- DbConvert.cs
- DoubleCollection.cs
- CoreChannel.cs
- SchemaCollectionPreprocessor.cs
- Enum.cs
- ApplicationException.cs
- BackgroundWorker.cs
- StringAnimationUsingKeyFrames.cs
- ImmutableObjectAttribute.cs
- Message.cs
- AssociationTypeEmitter.cs
- TextReader.cs
- SamlSerializer.cs
- XmlTextWriter.cs
- BoolExpr.cs
- EndpointReference.cs
- IInstanceContextProvider.cs
- HttpCapabilitiesEvaluator.cs