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
- CommonObjectSecurity.cs
- UiaCoreApi.cs
- DataGridTableCollection.cs
- DataGridViewDataErrorEventArgs.cs
- CommandField.cs
- BooleanConverter.cs
- Invariant.cs
- IsolatedStorageFileStream.cs
- GPRECTF.cs
- AffineTransform3D.cs
- NetworkAddressChange.cs
- ActivationWorker.cs
- XmlReader.cs
- PassportAuthentication.cs
- Int32Converter.cs
- FixedDocumentSequencePaginator.cs
- FormViewRow.cs
- SafeHandles.cs
- DataSet.cs
- Vector3D.cs
- Label.cs
- ObjectAnimationUsingKeyFrames.cs
- figurelength.cs
- SecurityContext.cs
- SQLInt64.cs
- ParseChildrenAsPropertiesAttribute.cs
- RotateTransform.cs
- ExpressionBinding.cs
- ActivitySurrogate.cs
- WebPartDisplayModeCancelEventArgs.cs
- TransformGroup.cs
- DefaultMemberAttribute.cs
- IndexingContentUnit.cs
- LazyTextWriterCreator.cs
- base64Transforms.cs
- XmlProcessingInstruction.cs
- DataGridViewCellStyleConverter.cs
- ConnectionConsumerAttribute.cs
- AssemblyAttributesGoHere.cs
- IndexedGlyphRun.cs
- TextFormatterHost.cs
- parserscommon.cs
- SapiAttributeParser.cs
- iisPickupDirectory.cs
- MetadataProperty.cs
- ProfileGroupSettingsCollection.cs
- DataServiceRequestException.cs
- SystemEvents.cs
- RestHandlerFactory.cs
- HttpContext.cs
- FixUpCollection.cs
- EdmToObjectNamespaceMap.cs
- CustomPopupPlacement.cs
- UpWmlPageAdapter.cs
- MulticastDelegate.cs
- PrimaryKeyTypeConverter.cs
- CngAlgorithm.cs
- ClientConfigPaths.cs
- GridViewSortEventArgs.cs
- ModifiableIteratorCollection.cs
- ImageEditor.cs
- PermissionToken.cs
- GetRecipientRequest.cs
- CompilationSection.cs
- coordinatorscratchpad.cs
- GlobalEventManager.cs
- RangeValueProviderWrapper.cs
- Internal.cs
- SQLDouble.cs
- LogRestartAreaEnumerator.cs
- SolidColorBrush.cs
- _HTTPDateParse.cs
- PropertyChangedEventManager.cs
- XmlWrappingWriter.cs
- SplitterPanel.cs
- PersianCalendar.cs
- NamedPipeWorkerProcess.cs
- StylusPointDescription.cs
- CollectionsUtil.cs
- DataFormats.cs
- PublishLicense.cs
- LoginCancelEventArgs.cs
- TreeViewImageKeyConverter.cs
- XmlSchemaElement.cs
- DrawingServices.cs
- GenericPrincipal.cs
- StateRuntime.cs
- WebBrowserDocumentCompletedEventHandler.cs
- ArraySegment.cs
- PropertyConverter.cs
- Compress.cs
- ScrollEvent.cs
- PlainXmlDeserializer.cs
- QueryAccessibilityHelpEvent.cs
- HtmlElement.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- Int64Animation.cs
- SqlGatherProducedAliases.cs
- MetadataExchangeBindings.cs
- TargetConverter.cs