We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- using System.Configuration;
- using System;
- using System.Reflection;
- using System.Globalization;
- using System.Xml;
- using System.Collections.Specialized;
- using System.Collections;
- using System.Security;
- using System.Security.Permissions;
- namespace System.Diagnostics
- {
- [ConfigurationCollection(typeof(ListenerElement))]
- internal class ListenerElementsCollection : ConfigurationElementCollection
- {
-
- public new ListenerElement this[string name]
- {
- get { return (ListenerElement)BaseGet(name); }
- }
-
- public override ConfigurationElementCollectionType CollectionType {
- get { return ConfigurationElementCollectionType.AddRemoveClearMap; }
- }
-
- protected override ConfigurationElement CreateNewElement()
- {
- return new ListenerElement(true);
- }
-
- protected override object GetElementKey(ConfigurationElement element)
- {
- return ((ListenerElement)element).Name;
- }
-
- public TraceListenerCollection GetRuntimeObject()
- {
- TraceListenerCollection listeners = new TraceListenerCollection();
- bool _isDemanded = false;
-
- foreach (ListenerElement element in this) {
-
-
-
-
-
- if (!_isDemanded && !element._isAddedByDefault) {
-
- new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
- _isDemanded = true;
- }
-
- listeners.Add(element.GetRuntimeObject());
- }
-
- return listeners;
- }
-
- protected override void InitializeDefault()
- {
- InitializeDefaultInternal();
- }
-
- internal void InitializeDefaultInternal()
- {
- ListenerElement defaultListener = new ListenerElement(false);
- defaultListener.Name = "Default";
- defaultListener.TypeName = typeof(DefaultTraceListener).FullName;
- defaultListener._isAddedByDefault = true;
-
- this.BaseAdd(defaultListener);
- }
-
- protected override void BaseAdd(ConfigurationElement element)
- {
- ListenerElement listenerElement = element as ListenerElement;
-
- Debug.Assert((listenerElement != null), "adding elements other than ListenerElement to ListenerElementsCollection?");
-
- if (listenerElement.Name.Equals("Default") && listenerElement.TypeName.Equals(typeof(DefaultTraceListener).FullName))
- BaseAdd(listenerElement, false);
- else
- BaseAdd(listenerElement, ThrowOnDuplicate);
- }
- }
-
-
-
-
- [ConfigurationCollection(typeof(ListenerElement), AddItemName = "add", CollectionType = ConfigurationElementCollectionType.BasicMap)]
- internal class SharedListenerElementsCollection : ListenerElementsCollection
- {
-
- public override ConfigurationElementCollectionType CollectionType {
- get { return ConfigurationElementCollectionType.BasicMap; }
- }
-
- protected override ConfigurationElement CreateNewElement()
- {
- return new ListenerElement(false);
- }
-
- protected override string ElementName {
- get { return "add"; }
- }
- }
-
- internal class ListenerElement : TypedElement
- {
- private static readonly ConfigurationProperty _propFilter = new ConfigurationProperty("filter", typeof(FilterElement), null, ConfigurationPropertyOptions.None);
- private static readonly ConfigurationProperty _propName = new ConfigurationProperty("name", typeof(string), null, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey);
- private static readonly ConfigurationProperty _propOutputOpts = new ConfigurationProperty("traceOutputOptions", typeof(TraceOptions), TraceOptions.None, ConfigurationPropertyOptions.None);
-
- private ConfigurationProperty _propListenerTypeName;
- private bool _allowReferences;
- private Hashtable _attributes;
- internal bool _isAddedByDefault;
-
- static ListenerElement()
- {
- }
-
- public ListenerElement(bool allowReferences) : base(typeof(TraceListener))
- {
- _allowReferences = allowReferences;
-
- ConfigurationPropertyOptions flags = ConfigurationPropertyOptions.None;
- if (!_allowReferences)
- flags |= ConfigurationPropertyOptions.IsRequired;
-
- _propListenerTypeName = new ConfigurationProperty("type", typeof(string), null, flags);
-
- _properties.Remove("type");
- _properties.Add(_propListenerTypeName);
- _properties.Add(_propFilter);
- _properties.Add(_propName);
- _properties.Add(_propOutputOpts);
- }
-
- public Hashtable Attributes {
- get {
- if (_attributes == null)
- _attributes = new Hashtable(StringComparer.OrdinalIgnoreCase);
- return _attributes;
- }
- }
-
- [ConfigurationProperty("filter")]
- public FilterElement Filter {
- get { return (FilterElement)this[_propFilter]; }
- }
-
- [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
- public string Name {
- get { return (string)this[_propName]; }
- set { this[_propName] = value; }
- }
-
- [ConfigurationProperty("traceOutputOptions", DefaultValue = (TraceOptions)TraceOptions.None)]
- public TraceOptions TraceOutputOptions {
- get { return (TraceOptions)this[_propOutputOpts]; }
-
- set { this[_propOutputOpts] = value; }
- }
-
-
- [ConfigurationProperty("type")]
- public override string TypeName {
- get { return (string)this[_propListenerTypeName]; }
- set { this[_propListenerTypeName] = value; }
- }
-
- public override bool Equals(object compareTo)
- {
- if (this.Name.Equals("Default") && this.TypeName.Equals(typeof(DefaultTraceListener).FullName)) {
-
-
-
-
- ListenerElement compareToElem = compareTo as ListenerElement;
- return (compareToElem != null) && compareToElem.Name.Equals("Default") && compareToElem.TypeName.Equals(typeof(DefaultTraceListener).FullName);
- }
- else
- return base.Equals(compareTo);
- }
-
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
-
- public TraceListener GetRuntimeObject()
- {
- if (_runtimeObject != null)
- return (TraceListener)_runtimeObject;
-
- try {
- string className = TypeName;
- if (String.IsNullOrEmpty(className)) {
-
- Debug.Assert(_allowReferences, "_allowReferences must be true if type name is null");
-
- if (_attributes != null || ElementInformation.Properties[_propFilter.Name].ValueOrigin == PropertyValueOrigin.SetHere || TraceOutputOptions != TraceOptions.None || !String.IsNullOrEmpty(InitData))
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_listener_cant_have_properties, Name));
-
- if (DiagnosticsConfiguration.SharedListeners == null)
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_to_nonexistent_listener, Name));
-
- ListenerElement sharedListener = DiagnosticsConfiguration.SharedListeners[Name];
- if (sharedListener == null)
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_to_nonexistent_listener, Name));
- else {
- _runtimeObject = sharedListener.GetRuntimeObject();
- return (TraceListener)_runtimeObject;
- }
- }
- else {
-
- TraceListener newListener = (TraceListener)BaseGetRuntimeObject();
- newListener.initializeData = InitData;
- newListener.Name = Name;
- newListener.SetAttributes(Attributes);
- newListener.TraceOutputOptions = TraceOutputOptions;
-
- if ((Filter != null) && (Filter.TypeName != null) && (Filter.TypeName.Length != 0))
- newListener.Filter = Filter.GetRuntimeObject();
-
- _runtimeObject = newListener;
- return newListener;
- }
- }
- catch (ArgumentException e) {
- throw new ConfigurationErrorsException(SR.GetString(SR.Could_not_create_listener, Name), e);
- }
- }
-
- protected override bool OnDeserializeUnrecognizedAttribute(string name, string value)
- {
- ConfigurationProperty _propDynamic = new ConfigurationProperty(name, typeof(string), value);
- _properties.Add(_propDynamic);
- base[_propDynamic] = value;
-
- Attributes.Add(name, value);
- return true;
- }
-
- internal void ResetProperties()
- {
-
- if (_attributes != null) {
- _attributes.Clear();
- _properties.Clear();
- _properties.Add(_propListenerTypeName);
- _properties.Add(_propFilter);
- _properties.Add(_propName);
- _properties.Add(_propOutputOpts);
- }
- }
-
- internal TraceListener RefreshRuntimeObject(TraceListener listener)
- {
- _runtimeObject = null;
- try {
- string className = TypeName;
- if (String.IsNullOrEmpty(className)) {
-
- Debug.Assert(_allowReferences, "_allowReferences must be true if type name is null");
-
- if (_attributes != null || ElementInformation.Properties[_propFilter.Name].ValueOrigin == PropertyValueOrigin.SetHere || TraceOutputOptions != TraceOptions.None || !String.IsNullOrEmpty(InitData))
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_listener_cant_have_properties, Name));
-
- if (DiagnosticsConfiguration.SharedListeners == null)
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_to_nonexistent_listener, Name));
-
- ListenerElement sharedListener = DiagnosticsConfiguration.SharedListeners[Name];
- if (sharedListener == null)
- throw new ConfigurationErrorsException(SR.GetString(SR.Reference_to_nonexistent_listener, Name));
- else {
- _runtimeObject = sharedListener.RefreshRuntimeObject(listener);
- return (TraceListener)_runtimeObject;
- }
- }
- else {
-
-
- if (Type.GetType(className) != listener.GetType() || InitData != listener.initializeData) {
-
- return GetRuntimeObject();
- }
- else {
- listener.SetAttributes(Attributes);
- listener.TraceOutputOptions = TraceOutputOptions;
-
- if (ElementInformation.Properties[_propFilter.Name].ValueOrigin == PropertyValueOrigin.SetHere)
- listener.Filter = Filter.RefreshRuntimeObject(listener.Filter);
- else
- listener.Filter = null;
-
- _runtimeObject = listener;
- return listener;
- }
- }
- }
- catch (ArgumentException e) {
- throw new ConfigurationErrorsException(SR.GetString(SR.Could_not_create_listener, Name), e);
- }
-
- }
-
- }
- }