Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / MobileControlsSection.cs / 1305376 / MobileControlsSection.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Collections; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Globalization; namespace System.Web.UI.MobileControls { [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class MobileControlsSection : ConfigurationSection { private ControlsConfig _controlConfig; private object _lock = new object(); internal static readonly TypeConverter StdTypeNameConverter = new MobileTypeNameConverter(); internal static readonly ConfigurationValidatorBase NonEmptyStringValidator = new StringValidator( 1 ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propHistorySize = new ConfigurationProperty( "sessionStateHistorySize", typeof( int ), Constants.DefaultSessionsStateHistorySize, null, new IntegerValidator( 0 ,int.MaxValue), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propDictType = new ConfigurationProperty( "cookielessDataDictionaryType", typeof( Type ), typeof( System.Web.Mobile.CookielessData ), MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IDictionary ) ), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propAllowCustomAttributes = new ConfigurationProperty( "allowCustomAttributes", typeof( bool ), false, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propDevices = new ConfigurationProperty( null, typeof( DeviceElementCollection ), null, ConfigurationPropertyOptions.IsDefaultCollection ); #endregion static MobileControlsSection() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propHistorySize ); _properties.Add( _propDevices ); _properties.Add( _propDictType ); _properties.Add( _propAllowCustomAttributes ); } public MobileControlsSection() { } // VSWhidbey 450801. Only create one ControlsConfig per MobileControlsSection instance. internal ControlsConfig GetControlsConfig() { if (_controlConfig == null) { lock (_lock) { if (_controlConfig == null) { _controlConfig = MobileControlsSectionHelper.CreateControlsConfig(this); } } } return _controlConfig; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("sessionStateHistorySize", DefaultValue = 6)] [IntegerValidator(MinValue = 0)] public int SessionStateHistorySize { get { return (int)base[ _propHistorySize ]; } set { base[ _propHistorySize ] = value; } } [ConfigurationProperty("cookielessDataDictionaryType", DefaultValue = typeof(System.Web.Mobile.CookielessData))] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IDictionary))] public Type CookielessDataDictionaryType { get { return (Type)base[ _propDictType ]; } set { base[ _propDictType ] = value; } } [ConfigurationProperty("allowCustomAttributes", DefaultValue = false)] public bool AllowCustomAttributes { get { return (bool)base[ _propAllowCustomAttributes ]; } set { base[ _propAllowCustomAttributes ] = value; } } [ConfigurationProperty("", IsDefaultCollection = true)] public DeviceElementCollection Devices { get { return (DeviceElementCollection)base[ _propDevices ]; } } } [ConfigurationCollection(typeof(DeviceElement), AddItemName="device")] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class DeviceElementCollection : ConfigurationElementCollection { private static readonly ConfigurationPropertyCollection _properties; static DeviceElementCollection() { _properties = new ConfigurationPropertyCollection(); } public DeviceElementCollection() { } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } public object[] AllKeys { get { return BaseGetAllKeys(); } } public void Add( DeviceElement deviceElement ) { BaseAdd( deviceElement ); } public void Remove( string name ) { BaseRemove( name ); } public void Remove( DeviceElement deviceElement ) { BaseRemove( GetElementKey( deviceElement ) ); } public void RemoveAt( int index ) { BaseRemoveAt( index ); } public new DeviceElement this[ string name ] { get { return (DeviceElement)BaseGet( name ); } } public DeviceElement this[ int index ] { get { return (DeviceElement)BaseGet( index ); } set { if ( BaseGet( index ) != null) { BaseRemoveAt( index ); } BaseAdd( index, value ); } } public void Clear() { BaseClear(); } protected override ConfigurationElement CreateNewElement() { return new DeviceElement(); } protected override Object GetElementKey( ConfigurationElement element ) { return ( (DeviceElement)element ).Name; } protected override string ElementName { get { return "device"; } } protected override bool ThrowOnDuplicate { get { return true; } } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMapAlternate; } } } [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class DeviceElement : ConfigurationElement { private static readonly ConfigurationElementProperty s_elemProperty = new ConfigurationElementProperty( new CallbackValidator( typeof( DeviceElement ), ValidateElement ) ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propName = new ConfigurationProperty( "name", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey ); private static readonly ConfigurationProperty _propInheritsFrom = new ConfigurationProperty( "inheritsFrom", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPredicateClass = new ConfigurationProperty( "predicateClass", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, null, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPredicateMethod = new ConfigurationProperty( "predicateMethod", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPageAdapter = new ConfigurationProperty( "pageAdapter", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IPageAdapter ) ), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propControls = new ConfigurationProperty( null, typeof(ControlElementCollection), null, ConfigurationPropertyOptions.IsDefaultCollection ); #endregion static DeviceElement() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propName ); _properties.Add( _propInheritsFrom ); _properties.Add( _propPredicateClass ); _properties.Add( _propPredicateMethod ); _properties.Add( _propPageAdapter ); _properties.Add( _propControls ); } internal DeviceElement() { } public DeviceElement( string name, string inheritsFrom ) { base[ _propName ] = name; base[ _propInheritsFrom ] = inheritsFrom; } public DeviceElement( string name, Type predicateClass, string predicateMethod, Type pageAdapter ) { base[ _propName] = name; base[ _propPredicateClass] = predicateClass; base[ _propPredicateMethod] = predicateMethod; base[ _propPageAdapter ] = pageAdapter; } public DeviceElement(string name, string inheritsFrom, Type predicateClass, string predicateMethod, Type pageAdapter) { base[ _propName] = name; base[ _propInheritsFrom ] = inheritsFrom; base[ _propPredicateClass] = predicateClass; base[ _propPredicateMethod] = predicateMethod; base[ _propPageAdapter ] = pageAdapter; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("name", IsRequired = true, IsKey = true)] [StringValidator(MinLength = 1)] public string Name { get { return (string)base[ _propName ]; } set { base[ _propName ] = value; } } [ConfigurationProperty("inheritsFrom")] [StringValidator(MinLength = 1)] public string InheritsFrom { get { return (string)base[ _propInheritsFrom ]; } set { base[ _propInheritsFrom ] = value; } } [ConfigurationProperty("predicateClass")] [TypeConverter(typeof(MobileTypeNameConverter))] public Type PredicateClass { get { return (Type)base[ _propPredicateClass ]; } set { base[ _propPredicateClass ] = value; } } [ConfigurationProperty("predicateMethod")] [StringValidator(MinLength = 1)] public string PredicateMethod { get { return (string)base[ _propPredicateMethod ]; } set { base[ _propPredicateMethod ] = value; } } [ConfigurationProperty("pageAdapter")] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IPageAdapter))] public Type PageAdapter { get { return (Type)base[_propPageAdapter]; } set { base[_propPageAdapter] = value; } } [ConfigurationProperty("", IsDefaultCollection = true)] public ControlElementCollection Controls { get { return (ControlElementCollection)base[ _propControls ]; } } protected override ConfigurationElementProperty ElementProperty { get { return s_elemProperty; } } internal IndividualDeviceConfig.DeviceQualifiesDelegate GetDelegate() { try { return (IndividualDeviceConfig.DeviceQualifiesDelegate)IndividualDeviceConfig.DeviceQualifiesDelegate.CreateDelegate( typeof(IndividualDeviceConfig.DeviceQualifiesDelegate), PredicateClass, PredicateMethod ); } catch { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_CantCreateMethodOnClass, PredicateMethod, PredicateClass.FullName), ElementInformation.Source, ElementInformation.LineNumber); } } static private void ValidateElement( object value ) { Debug.Assert( ( value != null ) && ( value is DeviceElement ) ); DeviceElement elem = (DeviceElement)value; // If there is no inheritance the properties must exists and be valid if ( string.IsNullOrEmpty(elem.InheritsFrom) ) { if ( elem.PredicateClass == null ) { throw new ConfigurationErrorsException( SR.GetString(SR.ConfigSect_MissingValue, "predicateClass"), elem.ElementInformation.Source, elem.ElementInformation.LineNumber ); } if ( elem.PageAdapter == null ) { throw new ConfigurationErrorsException( SR.GetString(SR.ConfigSect_MissingValue, "pageAdapter"), elem.ElementInformation.Source, elem.ElementInformation.LineNumber ); } // Resolve the method elem.GetDelegate(); } } } [ConfigurationCollection(typeof(ControlElement), AddItemName = "control")] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class ControlElementCollection : ConfigurationElementCollection { private static readonly ConfigurationPropertyCollection _properties; static ControlElementCollection() { _properties = new ConfigurationPropertyCollection(); } public ControlElementCollection() { } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } public object[] AllKeys { get { return BaseGetAllKeys(); } } public void Add( ControlElement controlElement ) { BaseAdd( controlElement ); } public void Remove( string name ) { BaseRemove( name ); } public void Remove( ControlElement controlElement ) { BaseRemove( GetElementKey( controlElement ) ); } public void RemoveAt( int index ) { BaseRemoveAt( index ); } public new ControlElement this[ string name ] { get { return (ControlElement)BaseGet( name ); } } public ControlElement this[ int index ] { get { return (ControlElement)BaseGet( index ); } set { if ( BaseGet( index ) != null) { BaseRemoveAt( index ); } BaseAdd( index, value ); } } public void Clear() { BaseClear(); } protected override ConfigurationElement CreateNewElement() { return new ControlElement(); } protected override Object GetElementKey( ConfigurationElement element ) { return ( (ControlElement)element ).Name; } protected override string ElementName { get { return "control"; } } protected override bool ThrowOnDuplicate { get { return true; } } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMap; } } } [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class ControlElement : ConfigurationElement { private static readonly ConfigurationElementProperty s_elemProperty = new ConfigurationElementProperty( new CallbackValidator( typeof( ControlElement ), ValidateElement ) ); private static readonly ConfigurationValidatorBase s_SubclassTypeValidator = new SubclassTypeValidator( typeof( MobileControl ) ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propName = new ConfigurationProperty( "name", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey ); private static readonly ConfigurationProperty _propAdapter = new ConfigurationProperty( "adapter", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IControlAdapter ) ), ConfigurationPropertyOptions.IsRequired ); #endregion static ControlElement() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propName ); _properties.Add( _propAdapter ); } internal ControlElement() { } public ControlElement( string name, Type adapter ) { base[ _propName] = name; base[ _propAdapter ] = adapter; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("name", IsRequired = true, IsKey = true)] [StringValidator(MinLength = 1)] public string Name { get { return (string)base[ _propName ]; } set { base[ _propName ] = value; } } public Type Control { get { return Type.GetType( Name ); } set { if ( value == null ) { throw new ArgumentNullException( "value" ); } s_SubclassTypeValidator.Validate( value ); Name = value.FullName; } } [ConfigurationProperty("adapter", IsRequired = true)] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IControlAdapter))] public Type Adapter { get { return (Type)base[ _propAdapter ]; } set { base[ _propAdapter ] = value; } } protected override ConfigurationElementProperty ElementProperty { get { return s_elemProperty; } } static private void ValidateElement( object value ) { Debug.Assert( ( value != null ) && ( value is ControlElement ) ); ControlElement elem = (ControlElement)value; // Make sure Name is a valid type // This will throw if the type cannot be resolved Type tp = MobileControlsSection.StdTypeNameConverter.ConvertFromInvariantString( elem.Name ) as Type; // Validate that tp inherits from MobileControl s_SubclassTypeValidator.Validate( tp ); } } // From old versions the default type names specified in mobile control config // section do not associate with assembly names. So we cannot use // System.Configuration.TypeNameConverter as it wouldn't look up the type // names in the mobile assembly. To workaround it, we create the same // converter here to be used in the mobile assembly. [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class MobileTypeNameConverter : ConfigurationConverterBase { public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type targetType) { Debug.Assert(targetType != null); Type valueType = value as Type; if (valueType == null) { throw new ArgumentException(SR.GetString(SR.MobileTypeNameConverter_UnsupportedValueType, ((value == null) ? String.Empty : value.ToString()), targetType.FullName)); } return valueType.FullName; } public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data) { Debug.Assert(data is string); Type result = Type.GetType((string)data); if (result == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileTypeNameConverter_TypeNotResolved, (string)data)); } return result; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Collections; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Globalization; namespace System.Web.UI.MobileControls { [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class MobileControlsSection : ConfigurationSection { private ControlsConfig _controlConfig; private object _lock = new object(); internal static readonly TypeConverter StdTypeNameConverter = new MobileTypeNameConverter(); internal static readonly ConfigurationValidatorBase NonEmptyStringValidator = new StringValidator( 1 ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propHistorySize = new ConfigurationProperty( "sessionStateHistorySize", typeof( int ), Constants.DefaultSessionsStateHistorySize, null, new IntegerValidator( 0 ,int.MaxValue), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propDictType = new ConfigurationProperty( "cookielessDataDictionaryType", typeof( Type ), typeof( System.Web.Mobile.CookielessData ), MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IDictionary ) ), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propAllowCustomAttributes = new ConfigurationProperty( "allowCustomAttributes", typeof( bool ), false, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propDevices = new ConfigurationProperty( null, typeof( DeviceElementCollection ), null, ConfigurationPropertyOptions.IsDefaultCollection ); #endregion static MobileControlsSection() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propHistorySize ); _properties.Add( _propDevices ); _properties.Add( _propDictType ); _properties.Add( _propAllowCustomAttributes ); } public MobileControlsSection() { } // VSWhidbey 450801. Only create one ControlsConfig per MobileControlsSection instance. internal ControlsConfig GetControlsConfig() { if (_controlConfig == null) { lock (_lock) { if (_controlConfig == null) { _controlConfig = MobileControlsSectionHelper.CreateControlsConfig(this); } } } return _controlConfig; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("sessionStateHistorySize", DefaultValue = 6)] [IntegerValidator(MinValue = 0)] public int SessionStateHistorySize { get { return (int)base[ _propHistorySize ]; } set { base[ _propHistorySize ] = value; } } [ConfigurationProperty("cookielessDataDictionaryType", DefaultValue = typeof(System.Web.Mobile.CookielessData))] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IDictionary))] public Type CookielessDataDictionaryType { get { return (Type)base[ _propDictType ]; } set { base[ _propDictType ] = value; } } [ConfigurationProperty("allowCustomAttributes", DefaultValue = false)] public bool AllowCustomAttributes { get { return (bool)base[ _propAllowCustomAttributes ]; } set { base[ _propAllowCustomAttributes ] = value; } } [ConfigurationProperty("", IsDefaultCollection = true)] public DeviceElementCollection Devices { get { return (DeviceElementCollection)base[ _propDevices ]; } } } [ConfigurationCollection(typeof(DeviceElement), AddItemName="device")] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class DeviceElementCollection : ConfigurationElementCollection { private static readonly ConfigurationPropertyCollection _properties; static DeviceElementCollection() { _properties = new ConfigurationPropertyCollection(); } public DeviceElementCollection() { } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } public object[] AllKeys { get { return BaseGetAllKeys(); } } public void Add( DeviceElement deviceElement ) { BaseAdd( deviceElement ); } public void Remove( string name ) { BaseRemove( name ); } public void Remove( DeviceElement deviceElement ) { BaseRemove( GetElementKey( deviceElement ) ); } public void RemoveAt( int index ) { BaseRemoveAt( index ); } public new DeviceElement this[ string name ] { get { return (DeviceElement)BaseGet( name ); } } public DeviceElement this[ int index ] { get { return (DeviceElement)BaseGet( index ); } set { if ( BaseGet( index ) != null) { BaseRemoveAt( index ); } BaseAdd( index, value ); } } public void Clear() { BaseClear(); } protected override ConfigurationElement CreateNewElement() { return new DeviceElement(); } protected override Object GetElementKey( ConfigurationElement element ) { return ( (DeviceElement)element ).Name; } protected override string ElementName { get { return "device"; } } protected override bool ThrowOnDuplicate { get { return true; } } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMapAlternate; } } } [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class DeviceElement : ConfigurationElement { private static readonly ConfigurationElementProperty s_elemProperty = new ConfigurationElementProperty( new CallbackValidator( typeof( DeviceElement ), ValidateElement ) ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propName = new ConfigurationProperty( "name", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey ); private static readonly ConfigurationProperty _propInheritsFrom = new ConfigurationProperty( "inheritsFrom", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPredicateClass = new ConfigurationProperty( "predicateClass", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, null, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPredicateMethod = new ConfigurationProperty( "predicateMethod", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propPageAdapter = new ConfigurationProperty( "pageAdapter", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IPageAdapter ) ), ConfigurationPropertyOptions.None ); private static readonly ConfigurationProperty _propControls = new ConfigurationProperty( null, typeof(ControlElementCollection), null, ConfigurationPropertyOptions.IsDefaultCollection ); #endregion static DeviceElement() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propName ); _properties.Add( _propInheritsFrom ); _properties.Add( _propPredicateClass ); _properties.Add( _propPredicateMethod ); _properties.Add( _propPageAdapter ); _properties.Add( _propControls ); } internal DeviceElement() { } public DeviceElement( string name, string inheritsFrom ) { base[ _propName ] = name; base[ _propInheritsFrom ] = inheritsFrom; } public DeviceElement( string name, Type predicateClass, string predicateMethod, Type pageAdapter ) { base[ _propName] = name; base[ _propPredicateClass] = predicateClass; base[ _propPredicateMethod] = predicateMethod; base[ _propPageAdapter ] = pageAdapter; } public DeviceElement(string name, string inheritsFrom, Type predicateClass, string predicateMethod, Type pageAdapter) { base[ _propName] = name; base[ _propInheritsFrom ] = inheritsFrom; base[ _propPredicateClass] = predicateClass; base[ _propPredicateMethod] = predicateMethod; base[ _propPageAdapter ] = pageAdapter; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("name", IsRequired = true, IsKey = true)] [StringValidator(MinLength = 1)] public string Name { get { return (string)base[ _propName ]; } set { base[ _propName ] = value; } } [ConfigurationProperty("inheritsFrom")] [StringValidator(MinLength = 1)] public string InheritsFrom { get { return (string)base[ _propInheritsFrom ]; } set { base[ _propInheritsFrom ] = value; } } [ConfigurationProperty("predicateClass")] [TypeConverter(typeof(MobileTypeNameConverter))] public Type PredicateClass { get { return (Type)base[ _propPredicateClass ]; } set { base[ _propPredicateClass ] = value; } } [ConfigurationProperty("predicateMethod")] [StringValidator(MinLength = 1)] public string PredicateMethod { get { return (string)base[ _propPredicateMethod ]; } set { base[ _propPredicateMethod ] = value; } } [ConfigurationProperty("pageAdapter")] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IPageAdapter))] public Type PageAdapter { get { return (Type)base[_propPageAdapter]; } set { base[_propPageAdapter] = value; } } [ConfigurationProperty("", IsDefaultCollection = true)] public ControlElementCollection Controls { get { return (ControlElementCollection)base[ _propControls ]; } } protected override ConfigurationElementProperty ElementProperty { get { return s_elemProperty; } } internal IndividualDeviceConfig.DeviceQualifiesDelegate GetDelegate() { try { return (IndividualDeviceConfig.DeviceQualifiesDelegate)IndividualDeviceConfig.DeviceQualifiesDelegate.CreateDelegate( typeof(IndividualDeviceConfig.DeviceQualifiesDelegate), PredicateClass, PredicateMethod ); } catch { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_CantCreateMethodOnClass, PredicateMethod, PredicateClass.FullName), ElementInformation.Source, ElementInformation.LineNumber); } } static private void ValidateElement( object value ) { Debug.Assert( ( value != null ) && ( value is DeviceElement ) ); DeviceElement elem = (DeviceElement)value; // If there is no inheritance the properties must exists and be valid if ( string.IsNullOrEmpty(elem.InheritsFrom) ) { if ( elem.PredicateClass == null ) { throw new ConfigurationErrorsException( SR.GetString(SR.ConfigSect_MissingValue, "predicateClass"), elem.ElementInformation.Source, elem.ElementInformation.LineNumber ); } if ( elem.PageAdapter == null ) { throw new ConfigurationErrorsException( SR.GetString(SR.ConfigSect_MissingValue, "pageAdapter"), elem.ElementInformation.Source, elem.ElementInformation.LineNumber ); } // Resolve the method elem.GetDelegate(); } } } [ConfigurationCollection(typeof(ControlElement), AddItemName = "control")] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class ControlElementCollection : ConfigurationElementCollection { private static readonly ConfigurationPropertyCollection _properties; static ControlElementCollection() { _properties = new ConfigurationPropertyCollection(); } public ControlElementCollection() { } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } public object[] AllKeys { get { return BaseGetAllKeys(); } } public void Add( ControlElement controlElement ) { BaseAdd( controlElement ); } public void Remove( string name ) { BaseRemove( name ); } public void Remove( ControlElement controlElement ) { BaseRemove( GetElementKey( controlElement ) ); } public void RemoveAt( int index ) { BaseRemoveAt( index ); } public new ControlElement this[ string name ] { get { return (ControlElement)BaseGet( name ); } } public ControlElement this[ int index ] { get { return (ControlElement)BaseGet( index ); } set { if ( BaseGet( index ) != null) { BaseRemoveAt( index ); } BaseAdd( index, value ); } } public void Clear() { BaseClear(); } protected override ConfigurationElement CreateNewElement() { return new ControlElement(); } protected override Object GetElementKey( ConfigurationElement element ) { return ( (ControlElement)element ).Name; } protected override string ElementName { get { return "control"; } } protected override bool ThrowOnDuplicate { get { return true; } } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMap; } } } [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class ControlElement : ConfigurationElement { private static readonly ConfigurationElementProperty s_elemProperty = new ConfigurationElementProperty( new CallbackValidator( typeof( ControlElement ), ValidateElement ) ); private static readonly ConfigurationValidatorBase s_SubclassTypeValidator = new SubclassTypeValidator( typeof( MobileControl ) ); private static ConfigurationPropertyCollection _properties; #region Property Declarations private static readonly ConfigurationProperty _propName = new ConfigurationProperty( "name", typeof( string ), null, null, MobileControlsSection.NonEmptyStringValidator, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey ); private static readonly ConfigurationProperty _propAdapter = new ConfigurationProperty( "adapter", typeof( Type ), null, MobileControlsSection.StdTypeNameConverter, new SubclassTypeValidator( typeof( IControlAdapter ) ), ConfigurationPropertyOptions.IsRequired ); #endregion static ControlElement() { // Property initialization _properties = new ConfigurationPropertyCollection(); _properties.Add( _propName ); _properties.Add( _propAdapter ); } internal ControlElement() { } public ControlElement( string name, Type adapter ) { base[ _propName] = name; base[ _propAdapter ] = adapter; } protected override ConfigurationPropertyCollection Properties { get { return _properties; } } [ConfigurationProperty("name", IsRequired = true, IsKey = true)] [StringValidator(MinLength = 1)] public string Name { get { return (string)base[ _propName ]; } set { base[ _propName ] = value; } } public Type Control { get { return Type.GetType( Name ); } set { if ( value == null ) { throw new ArgumentNullException( "value" ); } s_SubclassTypeValidator.Validate( value ); Name = value.FullName; } } [ConfigurationProperty("adapter", IsRequired = true)] [TypeConverter(typeof(MobileTypeNameConverter))] [SubclassTypeValidator(typeof(IControlAdapter))] public Type Adapter { get { return (Type)base[ _propAdapter ]; } set { base[ _propAdapter ] = value; } } protected override ConfigurationElementProperty ElementProperty { get { return s_elemProperty; } } static private void ValidateElement( object value ) { Debug.Assert( ( value != null ) && ( value is ControlElement ) ); ControlElement elem = (ControlElement)value; // Make sure Name is a valid type // This will throw if the type cannot be resolved Type tp = MobileControlsSection.StdTypeNameConverter.ConvertFromInvariantString( elem.Name ) as Type; // Validate that tp inherits from MobileControl s_SubclassTypeValidator.Validate( tp ); } } // From old versions the default type names specified in mobile control config // section do not associate with assembly names. So we cannot use // System.Configuration.TypeNameConverter as it wouldn't look up the type // names in the mobile assembly. To workaround it, we create the same // converter here to be used in the mobile assembly. [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public sealed class MobileTypeNameConverter : ConfigurationConverterBase { public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type targetType) { Debug.Assert(targetType != null); Type valueType = value as Type; if (valueType == null) { throw new ArgumentException(SR.GetString(SR.MobileTypeNameConverter_UnsupportedValueType, ((value == null) ? String.Empty : value.ToString()), targetType.FullName)); } return valueType.FullName; } public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data) { Debug.Assert(data is string); Type result = Type.GetType((string)data); if (result == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileTypeNameConverter_TypeNotResolved, (string)data)); } return result; } } } // 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
- MenuItemCollection.cs
- ExpressionVisitorHelpers.cs
- QuestionEventArgs.cs
- ZipIOExtraFieldElement.cs
- ArraySubsetEnumerator.cs
- NotSupportedException.cs
- Vector3DConverter.cs
- ClientScriptManager.cs
- DependencyProperty.cs
- WindowsRichEdit.cs
- TagPrefixInfo.cs
- CreateDataSourceDialog.cs
- ClonableStack.cs
- OutputCacheProfile.cs
- HttpConfigurationSystem.cs
- DocumentViewerAutomationPeer.cs
- CompressedStack.cs
- PbrsForward.cs
- SecuritySessionFilter.cs
- MailBnfHelper.cs
- AlphaSortedEnumConverter.cs
- PixelFormats.cs
- _BufferOffsetSize.cs
- UnsafeNativeMethods.cs
- AttachedPropertyMethodSelector.cs
- DependencyPropertyDescriptor.cs
- TextBoxView.cs
- CollectionType.cs
- TextRunCacheImp.cs
- VirtualPath.cs
- Panel.cs
- EntityUtil.cs
- GridViewUpdatedEventArgs.cs
- SecureStringHasher.cs
- COAUTHINFO.cs
- CreateUserWizard.cs
- InputLanguageCollection.cs
- StaticDataManager.cs
- CodeConstructor.cs
- DataGridViewAccessibleObject.cs
- DataGridItemEventArgs.cs
- CheckBoxStandardAdapter.cs
- AutomationPatternInfo.cs
- FileResponseElement.cs
- AssemblyBuilder.cs
- MailWebEventProvider.cs
- EditModeSwitchButton.cs
- DataGridViewButtonCell.cs
- UrlRoutingModule.cs
- SecurityRuntime.cs
- SamlSecurityTokenAuthenticator.cs
- OutOfProcStateClientManager.cs
- TextWriter.cs
- AutoGeneratedFieldProperties.cs
- CachedPathData.cs
- HtmlTextArea.cs
- SystemTcpConnection.cs
- SecureUICommand.cs
- StoreContentChangedEventArgs.cs
- _DisconnectOverlappedAsyncResult.cs
- ClientClassGenerator.cs
- ReaderWriterLock.cs
- TimeZone.cs
- Int32RectConverter.cs
- ForeignKeyConstraint.cs
- CommonRemoteMemoryBlock.cs
- mediapermission.cs
- CacheManager.cs
- UiaCoreProviderApi.cs
- DefinitionBase.cs
- UnmanagedMemoryAccessor.cs
- WebBrowserDesigner.cs
- XmlBoundElement.cs
- DateTimePicker.cs
- CategoryEditor.cs
- Int32Storage.cs
- Filter.cs
- COMException.cs
- CompensationHandlingFilter.cs
- FileDialog.cs
- MembershipSection.cs
- CSharpCodeProvider.cs
- NamedPermissionSet.cs
- ReadOnlyAttribute.cs
- XDRSchema.cs
- GetLedgerEntryForRecipientRequest.cs
- RoutingEndpointTrait.cs
- PenThreadWorker.cs
- Quaternion.cs
- UnsafeNativeMethodsTablet.cs
- SecureConversationServiceCredential.cs
- CopyOfAction.cs
- CoreSwitches.cs
- ObjectAssociationEndMapping.cs
- BitVector32.cs
- GeometryHitTestResult.cs
- TargetControlTypeAttribute.cs
- DataTableClearEvent.cs
- FixedSOMElement.cs
- Graphics.cs