Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / MobileControlsSectionHandler.cs / 1305376 / MobileControlsSectionHandler.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Collections; using System.Configuration; using System.Diagnostics; using System.Xml; using System.Web.Mobile; using System.Reflection; using System.Security.Permissions; namespace System.Web.UI.MobileControls { ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [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 class MobileControlsSectionHandler : IConfigurationSectionHandler { // IConfigurationSectionHandler methods /// protected Object Create(Object parent, Object context, XmlNode input) { // see ASURT 123738 if (context == null || context.GetType() != typeof(System.Web.Configuration.HttpConfigurationContext)) { return null; } ControlsConfig config = new ControlsConfig((ControlsConfig)parent); // First step through each attribute on the element // and update the ControlsConfig dictionary with it. XmlAttributeCollection attributes = input.Attributes; foreach (XmlNode attribute in attributes) { config[attribute.Name] = attribute.Value; } //check validity of cookielessDataDictionary type String cookielessDataDictionaryType = config["cookielessDataDictionaryType"]; if (!String.IsNullOrEmpty(cookielessDataDictionaryType)) { Type t = Type.GetType(cookielessDataDictionaryType); if (t == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_TypeNotFound, cookielessDataDictionaryType, "IDictionary"), input); } if (!(typeof(IDictionary).IsAssignableFrom(t))) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, cookielessDataDictionaryType, "IDictionary"), input); } } // Iterate through each tag within the config section ConfigurationSectionHelper helper = new ConfigurationSectionHelper(); foreach(XmlNode nextNode in input) { helper.Node = nextNode; if(helper.IsWhitespaceOrComment()) { continue; } helper.RejectNonElement(); // handle tags switch(nextNode.Name) { case "device": String deviceName = helper.RemoveStringAttribute("name", false); IndividualDeviceConfig idc = CreateDeviceConfig(config, helper, deviceName); helper.CheckForUnrecognizedAttributes(); // Iterate through every control adapter // within the foreach(XmlNode currentChild in nextNode.ChildNodes) { helper.Node = currentChild; if(helper.IsWhitespaceOrComment()) { continue; } helper.RejectNonElement(); if (!currentChild.Name.Equals("control")) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_UnknownElementName, " "), currentChild); } else { String controlName = helper.RemoveStringAttribute("name", true); String adapterName = helper.RemoveStringAttribute("adapter", true); helper.CheckForUnrecognizedAttributes(); idc.AddControl(CheckedGetType(controlName, "control", helper, typeof(MobileControl), currentChild), CheckedGetType(adapterName, "adapter", helper, typeof(IControlAdapter), currentChild)); } helper.Node = null; } // Add complete device config to master configs. if (String.IsNullOrEmpty(deviceName)) { deviceName = Guid.NewGuid().ToString(); } if (!config.AddDeviceConfig(deviceName, idc)) { // Problem is due to a duplicated name throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_DuplicatedDeviceName, deviceName), nextNode); } helper.Node = null; break; default: throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_UnknownElementName, " "), nextNode); } } config.FixupDeviceConfigInheritance(input); return config; } // Helper to create a device config given the names of methods private IndividualDeviceConfig CreateDeviceConfig(ControlsConfig config, ConfigurationSectionHelper helper, String deviceName) { String nameOfDeviceToInheritFrom = helper.RemoveStringAttribute("inheritsFrom", false); if (nameOfDeviceToInheritFrom != null && nameOfDeviceToInheritFrom.Length == 0) { nameOfDeviceToInheritFrom = null; } bool propertiesRequired = nameOfDeviceToInheritFrom == null; String predicateClass = helper.RemoveStringAttribute("predicateClass", propertiesRequired); // If a predicate class is specified, so must a method. String predicateMethod = helper.RemoveStringAttribute("predicateMethod", predicateClass != null); String pageAdapterClass = helper.RemoveStringAttribute("pageAdapter", propertiesRequired); IndividualDeviceConfig.DeviceQualifiesDelegate predicateDelegate = null; if (predicateClass != null || predicateMethod != null) { Type predicateClassType = CheckedGetType(predicateClass, "PredicateClass", helper, null, null); try { predicateDelegate = (IndividualDeviceConfig.DeviceQualifiesDelegate) IndividualDeviceConfig.DeviceQualifiesDelegate.CreateDelegate( typeof(IndividualDeviceConfig.DeviceQualifiesDelegate), predicateClassType, predicateMethod); } catch { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_CantCreateMethodOnClass, predicateMethod, predicateClassType.FullName), helper.Node); } } Type pageAdapterType = null; if (pageAdapterClass != null) { pageAdapterType = CheckedGetType(pageAdapterClass, "PageAdapterClass", helper, typeof(IPageAdapter), null); } return new IndividualDeviceConfig(config, deviceName, predicateDelegate, pageAdapterType, nameOfDeviceToInheritFrom); } // Helper method to encapsulate type lookup followed by // throwing a ConfigurationErrorsException on failure. private Type CheckedGetType(String typename, String whereUsed, ConfigurationSectionHelper helper, Type typeImplemented, XmlNode input) { Type t = Type.GetType(typename); if (t == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_TypeNotFound, typename, whereUsed), helper.Node); } if (typeImplemented != null && !typeImplemented.IsAssignableFrom(t)) { if (input != null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, t, typeImplemented), input); } else { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, t, typeImplemented), helper.Node); } } return t; } #region IConfigurationSectionHandler implementation Object IConfigurationSectionHandler.Create(Object parent, Object context, XmlNode input) { return Create(parent, context, input); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Collections; using System.Configuration; using System.Diagnostics; using System.Xml; using System.Web.Mobile; using System.Reflection; using System.Security.Permissions; namespace System.Web.UI.MobileControls { ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [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 class MobileControlsSectionHandler : IConfigurationSectionHandler { // IConfigurationSectionHandler methods /// protected Object Create(Object parent, Object context, XmlNode input) { // see ASURT 123738 if (context == null || context.GetType() != typeof(System.Web.Configuration.HttpConfigurationContext)) { return null; } ControlsConfig config = new ControlsConfig((ControlsConfig)parent); // First step through each attribute on the element // and update the ControlsConfig dictionary with it. XmlAttributeCollection attributes = input.Attributes; foreach (XmlNode attribute in attributes) { config[attribute.Name] = attribute.Value; } //check validity of cookielessDataDictionary type String cookielessDataDictionaryType = config["cookielessDataDictionaryType"]; if (!String.IsNullOrEmpty(cookielessDataDictionaryType)) { Type t = Type.GetType(cookielessDataDictionaryType); if (t == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_TypeNotFound, cookielessDataDictionaryType, "IDictionary"), input); } if (!(typeof(IDictionary).IsAssignableFrom(t))) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, cookielessDataDictionaryType, "IDictionary"), input); } } // Iterate through each tag within the config section ConfigurationSectionHelper helper = new ConfigurationSectionHelper(); foreach(XmlNode nextNode in input) { helper.Node = nextNode; if(helper.IsWhitespaceOrComment()) { continue; } helper.RejectNonElement(); // handle tags switch(nextNode.Name) { case "device": String deviceName = helper.RemoveStringAttribute("name", false); IndividualDeviceConfig idc = CreateDeviceConfig(config, helper, deviceName); helper.CheckForUnrecognizedAttributes(); // Iterate through every control adapter // within the foreach(XmlNode currentChild in nextNode.ChildNodes) { helper.Node = currentChild; if(helper.IsWhitespaceOrComment()) { continue; } helper.RejectNonElement(); if (!currentChild.Name.Equals("control")) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_UnknownElementName, " "), currentChild); } else { String controlName = helper.RemoveStringAttribute("name", true); String adapterName = helper.RemoveStringAttribute("adapter", true); helper.CheckForUnrecognizedAttributes(); idc.AddControl(CheckedGetType(controlName, "control", helper, typeof(MobileControl), currentChild), CheckedGetType(adapterName, "adapter", helper, typeof(IControlAdapter), currentChild)); } helper.Node = null; } // Add complete device config to master configs. if (String.IsNullOrEmpty(deviceName)) { deviceName = Guid.NewGuid().ToString(); } if (!config.AddDeviceConfig(deviceName, idc)) { // Problem is due to a duplicated name throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_DuplicatedDeviceName, deviceName), nextNode); } helper.Node = null; break; default: throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_UnknownElementName, " "), nextNode); } } config.FixupDeviceConfigInheritance(input); return config; } // Helper to create a device config given the names of methods private IndividualDeviceConfig CreateDeviceConfig(ControlsConfig config, ConfigurationSectionHelper helper, String deviceName) { String nameOfDeviceToInheritFrom = helper.RemoveStringAttribute("inheritsFrom", false); if (nameOfDeviceToInheritFrom != null && nameOfDeviceToInheritFrom.Length == 0) { nameOfDeviceToInheritFrom = null; } bool propertiesRequired = nameOfDeviceToInheritFrom == null; String predicateClass = helper.RemoveStringAttribute("predicateClass", propertiesRequired); // If a predicate class is specified, so must a method. String predicateMethod = helper.RemoveStringAttribute("predicateMethod", predicateClass != null); String pageAdapterClass = helper.RemoveStringAttribute("pageAdapter", propertiesRequired); IndividualDeviceConfig.DeviceQualifiesDelegate predicateDelegate = null; if (predicateClass != null || predicateMethod != null) { Type predicateClassType = CheckedGetType(predicateClass, "PredicateClass", helper, null, null); try { predicateDelegate = (IndividualDeviceConfig.DeviceQualifiesDelegate) IndividualDeviceConfig.DeviceQualifiesDelegate.CreateDelegate( typeof(IndividualDeviceConfig.DeviceQualifiesDelegate), predicateClassType, predicateMethod); } catch { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_CantCreateMethodOnClass, predicateMethod, predicateClassType.FullName), helper.Node); } } Type pageAdapterType = null; if (pageAdapterClass != null) { pageAdapterType = CheckedGetType(pageAdapterClass, "PageAdapterClass", helper, typeof(IPageAdapter), null); } return new IndividualDeviceConfig(config, deviceName, predicateDelegate, pageAdapterType, nameOfDeviceToInheritFrom); } // Helper method to encapsulate type lookup followed by // throwing a ConfigurationErrorsException on failure. private Type CheckedGetType(String typename, String whereUsed, ConfigurationSectionHelper helper, Type typeImplemented, XmlNode input) { Type t = Type.GetType(typename); if (t == null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_TypeNotFound, typename, whereUsed), helper.Node); } if (typeImplemented != null && !typeImplemented.IsAssignableFrom(t)) { if (input != null) { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, t, typeImplemented), input); } else { throw new ConfigurationErrorsException( SR.GetString(SR.MobileControlsSectionHandler_NotAssignable, t, typeImplemented), helper.Node); } } return t; } #region IConfigurationSectionHandler implementation Object IConfigurationSectionHandler.Create(Object parent, Object context, XmlNode input) { return Create(parent, context, input); } #endregion } } // 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
- DbTransaction.cs
- ProcessHostConfigUtils.cs
- SplitContainer.cs
- XmlCompatibilityReader.cs
- AssemblyUtil.cs
- DataGridCellItemAutomationPeer.cs
- COAUTHINFO.cs
- JournalEntryListConverter.cs
- Ports.cs
- TraceListener.cs
- PasswordBoxAutomationPeer.cs
- GroupJoinQueryOperator.cs
- BypassElement.cs
- FlowLayoutPanelDesigner.cs
- UpdatePanelTriggerCollection.cs
- GenericPrincipal.cs
- TextSchema.cs
- XmlValidatingReader.cs
- PartitionerQueryOperator.cs
- MasterPageParser.cs
- SystemIcmpV4Statistics.cs
- RunClient.cs
- GridItemProviderWrapper.cs
- BaseDataList.cs
- StatusStrip.cs
- Padding.cs
- ProfileProvider.cs
- GeneratedCodeAttribute.cs
- Soap12ServerProtocol.cs
- DataSourceControlBuilder.cs
- MonitorWrapper.cs
- EntityKeyElement.cs
- XmlValidatingReader.cs
- PropertyDescriptors.cs
- PictureBox.cs
- HtmlInputSubmit.cs
- Directory.cs
- CookieParameter.cs
- ApplicationBuildProvider.cs
- ProfileService.cs
- DelegatedStream.cs
- ObjectHandle.cs
- ModelItemCollectionImpl.cs
- OperationAbortedException.cs
- ContourSegment.cs
- FirstMatchCodeGroup.cs
- IndicCharClassifier.cs
- PropertyManager.cs
- TemplateInstanceAttribute.cs
- SchemaImporter.cs
- FaultPropagationRecord.cs
- RenderData.cs
- BindingContext.cs
- MatrixCamera.cs
- QueryExpression.cs
- RawStylusSystemGestureInputReport.cs
- UnsafeNetInfoNativeMethods.cs
- ObjectMemberMapping.cs
- TraceContextEventArgs.cs
- RectangleGeometry.cs
- GridViewRowPresenterBase.cs
- PixelFormats.cs
- SoapSchemaMember.cs
- CodeRegionDirective.cs
- TypeLoadException.cs
- RegexInterpreter.cs
- SessionEndingEventArgs.cs
- LeafCellTreeNode.cs
- ApplicationSecurityInfo.cs
- Propagator.JoinPropagator.cs
- RecipientIdentity.cs
- TransformerTypeCollection.cs
- InputLanguageManager.cs
- RC2.cs
- UiaCoreApi.cs
- SmiEventSink_DeferedProcessing.cs
- ExpressionBindingCollection.cs
- SerialErrors.cs
- XamlFigureLengthSerializer.cs
- DrawingVisualDrawingContext.cs
- SafeNativeMethods.cs
- ListViewDeletedEventArgs.cs
- Glyph.cs
- DLinqAssociationProvider.cs
- DataGridViewCellCollection.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- Array.cs
- XmlSchemaInclude.cs
- DbInsertCommandTree.cs
- LookupBindingPropertiesAttribute.cs
- DataServiceProcessingPipelineEventArgs.cs
- DefaultAsyncDataDispatcher.cs
- DataGridState.cs
- AxDesigner.cs
- DataObjectFieldAttribute.cs
- KeyEvent.cs
- SecurityTokenProvider.cs
- CookieParameter.cs
- AdministrationHelpers.cs
- XmlSchemaException.cs