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
- WebProxyScriptElement.cs
- RayHitTestParameters.cs
- ZipIOBlockManager.cs
- WCFBuildProvider.cs
- SpellerStatusTable.cs
- IdnElement.cs
- WebPartConnectionsCancelEventArgs.cs
- GeometryValueSerializer.cs
- XmlSchemaCompilationSettings.cs
- OutputCacheProviderCollection.cs
- FixedHighlight.cs
- ConfigurationLocation.cs
- InputReport.cs
- XPathScanner.cs
- TransformerTypeCollection.cs
- ExtensibleClassFactory.cs
- XmlSchemaAll.cs
- CodeExpressionCollection.cs
- TypeBuilder.cs
- Authorization.cs
- ListBindableAttribute.cs
- SystemIPv6InterfaceProperties.cs
- HostingEnvironmentException.cs
- Properties.cs
- ConnectivityStatus.cs
- OdbcConnectionHandle.cs
- DataControlFieldCell.cs
- GeneralTransformGroup.cs
- DoWorkEventArgs.cs
- DateTimeFormat.cs
- GeneratedCodeAttribute.cs
- Transform3DCollection.cs
- PtsContext.cs
- ComEventsHelper.cs
- ObjectItemCachedAssemblyLoader.cs
- HeaderUtility.cs
- Evidence.cs
- DataListItemCollection.cs
- ComboBoxRenderer.cs
- CancellationTokenSource.cs
- newinstructionaction.cs
- SQLBytesStorage.cs
- SiteMapDataSourceView.cs
- Propagator.JoinPropagator.cs
- StyleSheetDesigner.cs
- GeometryCollection.cs
- EdmError.cs
- CssStyleCollection.cs
- ImplicitInputBrush.cs
- OutputCacheProfileCollection.cs
- TypeBuilderInstantiation.cs
- CodeTypeDelegate.cs
- HMACSHA512.cs
- TemplatedAdorner.cs
- TextProviderWrapper.cs
- SqlPersonalizationProvider.cs
- CompositeActivityTypeDescriptor.cs
- XmlSchema.cs
- CollectionViewSource.cs
- ListViewTableRow.cs
- QilXmlReader.cs
- FigureHelper.cs
- DataRowView.cs
- UnsafeNativeMethods.cs
- TextDecorationUnitValidation.cs
- SuppressMessageAttribute.cs
- DoubleStorage.cs
- Cursor.cs
- MetadataItemEmitter.cs
- MsmqIntegrationProcessProtocolHandler.cs
- DockPanel.cs
- ModelToObjectValueConverter.cs
- DeferredElementTreeState.cs
- QilVisitor.cs
- XmlSchemaInferenceException.cs
- RewritingSimplifier.cs
- SettingsAttributes.cs
- GroupLabel.cs
- SpeechEvent.cs
- StrongNameHelpers.cs
- XmlTextReader.cs
- NameValueFileSectionHandler.cs
- Pkcs9Attribute.cs
- InvalidPipelineStoreException.cs
- DataControlButton.cs
- ToolboxItemCollection.cs
- LogicalMethodInfo.cs
- ToolStripDropDown.cs
- RotateTransform.cs
- LogLogRecordHeader.cs
- BindingsCollection.cs
- _NTAuthentication.cs
- RoleManagerModule.cs
- WorkItem.cs
- PersistNameAttribute.cs
- CodeFieldReferenceExpression.cs
- ToolStripDropDownClosedEventArgs.cs
- XmlSchemaObjectCollection.cs
- LicenseManager.cs
- TextEncodedRawTextWriter.cs