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
- LinkLabelLinkClickedEvent.cs
- FixedPage.cs
- ProtectedProviderSettings.cs
- HTMLTagNameToTypeMapper.cs
- DescendentsWalker.cs
- StoragePropertyMapping.cs
- PassportAuthenticationEventArgs.cs
- SqlStream.cs
- WebPartVerbsEventArgs.cs
- XmlSchemaGroup.cs
- FormViewRow.cs
- WebPartHelpVerb.cs
- DrawingState.cs
- BinaryUtilClasses.cs
- Select.cs
- TransactionManager.cs
- FormDocumentDesigner.cs
- SignatureHelper.cs
- DropShadowEffect.cs
- TextParaLineResult.cs
- InputLanguageSource.cs
- ModelItemCollection.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- SharedUtils.cs
- TypeConverterHelper.cs
- MSAAEventDispatcher.cs
- Polygon.cs
- TypeDelegator.cs
- CheckBoxAutomationPeer.cs
- ReadOnlyDictionary.cs
- X509UI.cs
- ModuleConfigurationInfo.cs
- AnnouncementEndpointElement.cs
- DesignerVerbCollection.cs
- DebugControllerThread.cs
- IResourceProvider.cs
- XmlSchemaType.cs
- GreenMethods.cs
- DocumentSequence.cs
- MissingFieldException.cs
- PeerNameRegistration.cs
- TreeNodeStyleCollectionEditor.cs
- OptimizerPatterns.cs
- DataFormat.cs
- shaper.cs
- IconHelper.cs
- RegexFCD.cs
- ReaderWriterLockWrapper.cs
- OracleDateTime.cs
- Ticks.cs
- RunInstallerAttribute.cs
- FixedSOMPageConstructor.cs
- Console.cs
- sortedlist.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- EntityTransaction.cs
- LogicalExpressionEditor.cs
- Span.cs
- DateTimeFormat.cs
- MarshalByRefObject.cs
- RoutedEventArgs.cs
- SoapCodeExporter.cs
- StsCommunicationException.cs
- BlurEffect.cs
- BrushConverter.cs
- DictionaryTraceRecord.cs
- GacUtil.cs
- WCFServiceClientProxyGenerator.cs
- StringUtil.cs
- ResourceSetExpression.cs
- Vector3DAnimationBase.cs
- NamedPipeChannelFactory.cs
- HtmlTableCellCollection.cs
- DrawTreeNodeEventArgs.cs
- AccessDataSource.cs
- Misc.cs
- HuffmanTree.cs
- DataGridViewCellCollection.cs
- TextContainerChangedEventArgs.cs
- clipboard.cs
- ScriptingRoleServiceSection.cs
- BitmapEffectInput.cs
- ServiceDesigner.cs
- dataprotectionpermission.cs
- FlowNode.cs
- TimeSpanFormat.cs
- Configuration.cs
- RegionIterator.cs
- _ListenerResponseStream.cs
- ScriptRegistrationManager.cs
- AssemblyBuilderData.cs
- NativeStructs.cs
- Keyboard.cs
- WindowsIPAddress.cs
- SID.cs
- MediaTimeline.cs
- DynamicResourceExtensionConverter.cs
- GridPattern.cs
- CircleEase.cs
- Compress.cs