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
- WebBrowserContainer.cs
- EncryptedPackage.cs
- HighlightComponent.cs
- Condition.cs
- PerformanceCounterLib.cs
- PrimitiveType.cs
- RoleManagerSection.cs
- TextContainerHelper.cs
- WebPartDisplayModeCancelEventArgs.cs
- HtmlWindow.cs
- InkPresenter.cs
- OracleBinary.cs
- DataServiceQueryOfT.cs
- XamlClipboardData.cs
- Button.cs
- SuppressMergeCheckAttribute.cs
- Icon.cs
- SubqueryTrackingVisitor.cs
- TextServicesCompartmentContext.cs
- BitmapScalingModeValidation.cs
- Pair.cs
- MultiView.cs
- HttpRawResponse.cs
- Slider.cs
- InputScopeManager.cs
- WindowsFormsHost.cs
- TableColumnCollectionInternal.cs
- GridViewRowPresenterBase.cs
- SqlDependencyUtils.cs
- StorageAssociationSetMapping.cs
- ResourceExpression.cs
- HeaderUtility.cs
- KeyValueSerializer.cs
- ToolBarDesigner.cs
- ParagraphResult.cs
- JsonDeserializer.cs
- ChtmlTextWriter.cs
- VisualProxy.cs
- XomlCompiler.cs
- CryptoConfig.cs
- ListBindingConverter.cs
- CodeIdentifiers.cs
- MeshGeometry3D.cs
- ReturnValue.cs
- DiscoveryDefaults.cs
- MimeXmlReflector.cs
- NameSpaceExtractor.cs
- safemediahandle.cs
- CounterSampleCalculator.cs
- TraceSection.cs
- OlePropertyStructs.cs
- Ray3DHitTestResult.cs
- EmptyEnumerator.cs
- HtmlString.cs
- ServiceDescriptions.cs
- SerialErrors.cs
- XmlSchemaAnyAttribute.cs
- DBNull.cs
- InternalCache.cs
- HttpGetClientProtocol.cs
- XmlSchemaAnyAttribute.cs
- BitmapEffectGroup.cs
- JavaScriptSerializer.cs
- SafePointer.cs
- TextElementEnumerator.cs
- TextTrailingCharacterEllipsis.cs
- TickBar.cs
- Relationship.cs
- BoundColumn.cs
- ZipIOCentralDirectoryBlock.cs
- ReaderWriterLock.cs
- ExpressionParser.cs
- MenuAdapter.cs
- ControlParameter.cs
- ComboBoxRenderer.cs
- ConstNode.cs
- ImageMetadata.cs
- ObjectDisposedException.cs
- dbdatarecord.cs
- ManagementDateTime.cs
- ApplyTemplatesAction.cs
- ImageAutomationPeer.cs
- Schema.cs
- CompletedAsyncResult.cs
- util.cs
- LabelEditEvent.cs
- ErrorWrapper.cs
- RubberbandSelector.cs
- COM2IProvidePropertyBuilderHandler.cs
- Thread.cs
- HiddenFieldPageStatePersister.cs
- ListenerElementsCollection.cs
- ipaddressinformationcollection.cs
- MSAANativeProvider.cs
- FormViewPagerRow.cs
- hebrewshape.cs
- GlobalProxySelection.cs
- ParentUndoUnit.cs
- BindingManagerDataErrorEventArgs.cs
- XmlCollation.cs