Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / Diagnostics / SourceElementsCollection.cs / 1305376 / SourceElementsCollection.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Configuration; using System.Collections; using System.Collections.Specialized; using System.Xml; namespace System.Diagnostics { [ConfigurationCollection(typeof(SourceElement), AddItemName = "source", CollectionType = ConfigurationElementCollectionType.BasicMap)] internal class SourceElementsCollection : ConfigurationElementCollection { new public SourceElement this[string name] { get { return (SourceElement) BaseGet(name); } } protected override string ElementName { get { return "source"; } } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMap; } } protected override ConfigurationElement CreateNewElement() { SourceElement se = new SourceElement(); se.Listeners.InitializeDefaultInternal(); return se; } protected override Object GetElementKey(ConfigurationElement element) { return ((SourceElement) element).Name; } } internal class SourceElement : ConfigurationElement { private static readonly ConfigurationPropertyCollection _properties; private static readonly ConfigurationProperty _propName = new ConfigurationProperty("name", typeof(string), "", ConfigurationPropertyOptions.IsRequired); private static readonly ConfigurationProperty _propSwitchName = new ConfigurationProperty("switchName", typeof(string), null, ConfigurationPropertyOptions.None); private static readonly ConfigurationProperty _propSwitchValue = new ConfigurationProperty("switchValue", typeof(string), null, ConfigurationPropertyOptions.None); private static readonly ConfigurationProperty _propSwitchType = new ConfigurationProperty("switchType", typeof(string), null, ConfigurationPropertyOptions.None); private static readonly ConfigurationProperty _propListeners = new ConfigurationProperty("listeners", typeof(ListenerElementsCollection), new ListenerElementsCollection(), ConfigurationPropertyOptions.None); private Hashtable _attributes; static SourceElement() { _properties = new ConfigurationPropertyCollection(); _properties.Add(_propName); _properties.Add(_propSwitchName); _properties.Add(_propSwitchValue); _properties.Add(_propSwitchType); _properties.Add(_propListeners); } public Hashtable Attributes { get { if (_attributes == null) _attributes = new Hashtable(StringComparer.OrdinalIgnoreCase); return _attributes; } } [ConfigurationProperty("listeners")] public ListenerElementsCollection Listeners { get { return (ListenerElementsCollection) this[_propListeners]; } } [ConfigurationProperty("name", IsRequired=true, DefaultValue="")] public string Name { get { return (string) this[_propName]; } } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("switchName")] public string SwitchName { get { return (string) this[_propSwitchName]; } } [ConfigurationProperty("switchValue")] public string SwitchValue { get { return (string) this[_propSwitchValue]; } } [ConfigurationProperty("switchType")] public string SwitchType { get { return (string) this[_propSwitchType]; } } protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey) { base.DeserializeElement(reader, serializeCollectionKey); if (!String.IsNullOrEmpty(SwitchName) && !String.IsNullOrEmpty(SwitchValue)) throw new ConfigurationErrorsException(SR.GetString(SR.Only_specify_one, Name)); } // Our optional attributes implementation is little convoluted as there is // no such firsclass mechanism from the config system. We basically cache // any "unrecognized" attribute here and serialize it out later. protected override bool OnDeserializeUnrecognizedAttribute(String name, String value) { Attributes.Add(name, value); return true; } // We need to serialize optional attributes here, a better place would have // been inside SerializeElement but the base class implementation from // ConfigurationElement doesn't take into account for derived class doing // extended serialization, it basically writes out child element that // forces the element closing syntax, so any attribute serialization needs // to happen before normal element serialization from ConfigurationElement. // This means we would write out custom attributes ahead of normal ones. // The other alternative would be to re-implement the entire routine here // which is an overkill and a maintenance issue. protected override void PreSerialize(XmlWriter writer) { if (_attributes != null) { IDictionaryEnumerator e = _attributes.GetEnumerator(); while (e.MoveNext()) { string xmlValue = (string)e.Value; string xmlName = (string)e.Key; if ((xmlValue != null) && (writer != null)) { writer.WriteAttributeString(xmlName, xmlValue); } } } } // Account for optional attributes from custom listeners. protected override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey) { bool DataToWrite = base.SerializeElement(writer, serializeCollectionKey); DataToWrite = DataToWrite || ((_attributes != null) && (_attributes.Count > 0)); return DataToWrite; } protected override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode saveMode) { base.Unmerge(sourceElement, parentElement, saveMode); // Unmerge the optional attributes cache as well SourceElement le = sourceElement as SourceElement; if ((le != null) && (le._attributes != null)) this._attributes = le._attributes; } internal void ResetProperties() { // blow away any UnrecognizedAttributes that we have deserialized earlier if (_attributes != null) { _attributes.Clear(); _properties.Clear(); _properties.Add(_propName); _properties.Add(_propSwitchName); _properties.Add(_propSwitchValue); _properties.Add(_propSwitchType); _properties.Add(_propListeners); } } } } // 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
- XXXOnTypeBuilderInstantiation.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- TableDetailsCollection.cs
- MouseGesture.cs
- UriTemplatePathSegment.cs
- LinqDataSourceDisposeEventArgs.cs
- StylusOverProperty.cs
- LifetimeServices.cs
- _Connection.cs
- ConstructorExpr.cs
- DiffuseMaterial.cs
- PlainXmlWriter.cs
- BinaryCommonClasses.cs
- ClassDataContract.cs
- XmlObjectSerializerReadContext.cs
- AutomationElementIdentifiers.cs
- ToolbarAUtomationPeer.cs
- ClientTargetCollection.cs
- Axis.cs
- LinkLabel.cs
- NavigationWindowAutomationPeer.cs
- SwitchAttribute.cs
- SoapEnumAttribute.cs
- TcpConnectionPoolSettingsElement.cs
- PrintingPermissionAttribute.cs
- PersistenceTypeAttribute.cs
- DiagnosticsConfigurationHandler.cs
- ColorTranslator.cs
- SecurityContextSecurityTokenAuthenticator.cs
- SecurityPermission.cs
- MatrixCamera.cs
- ApplicationProxyInternal.cs
- SafeFileMapViewHandle.cs
- CollectionView.cs
- ListViewInsertedEventArgs.cs
- ControlAdapter.cs
- DocumentOrderQuery.cs
- QilXmlReader.cs
- DesignerInterfaces.cs
- KeyedCollection.cs
- XmlElement.cs
- AuthenticationModuleElement.cs
- NameScopePropertyAttribute.cs
- DbCommandDefinition.cs
- RoleGroupCollection.cs
- PropertyEntry.cs
- SchemaNames.cs
- WinHttpWebProxyFinder.cs
- TableCell.cs
- DbBuffer.cs
- ExecutionEngineException.cs
- LinqDataSourceStatusEventArgs.cs
- DataGridCell.cs
- PowerStatus.cs
- HostedTcpTransportManager.cs
- UpdatePanel.cs
- FormsAuthenticationConfiguration.cs
- TextEditorLists.cs
- SrgsText.cs
- ClipboardProcessor.cs
- ITextView.cs
- DoubleLinkList.cs
- TextEndOfSegment.cs
- FormsAuthenticationUserCollection.cs
- SystemMulticastIPAddressInformation.cs
- DataGridViewCellPaintingEventArgs.cs
- GenericAuthenticationEventArgs.cs
- DbConnectionOptions.cs
- AutomationProperties.cs
- ApplicationSettingsBase.cs
- VisualProxy.cs
- MethodBuilderInstantiation.cs
- AppDomain.cs
- PhotoPrintingIntent.cs
- TraceInternal.cs
- HwndHost.cs
- XmlIgnoreAttribute.cs
- GenericsInstances.cs
- AssemblyFilter.cs
- MouseButton.cs
- Vector3DCollectionValueSerializer.cs
- WsiProfilesElementCollection.cs
- ModifierKeysConverter.cs
- Configuration.cs
- ExpressionConverter.cs
- WSDualHttpSecurityElement.cs
- FillBehavior.cs
- AccessedThroughPropertyAttribute.cs
- GeneralTransform2DTo3D.cs
- WebMessageEncodingElement.cs
- WmpBitmapDecoder.cs
- TextAdaptor.cs
- TextDecoration.cs
- MarshalByRefObject.cs
- Activator.cs
- DoubleAverageAggregationOperator.cs
- BufferedWebEventProvider.cs
- CheckBox.cs
- ListViewHitTestInfo.cs
- FtpWebResponse.cs