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
- SecurityPolicySection.cs
- VariableQuery.cs
- WebBrowserSiteBase.cs
- IncrementalReadDecoders.cs
- EventManager.cs
- SqlErrorCollection.cs
- BaseTreeIterator.cs
- NamespaceCollection.cs
- COAUTHIDENTITY.cs
- Error.cs
- Compilation.cs
- PageRequestManager.cs
- DataProtection.cs
- SqlTransaction.cs
- Encoder.cs
- SystemMulticastIPAddressInformation.cs
- DragAssistanceManager.cs
- AuthenticatedStream.cs
- AbstractSvcMapFileLoader.cs
- HwndAppCommandInputProvider.cs
- safelink.cs
- ObjectPersistData.cs
- FormsAuthenticationModule.cs
- ObjectStateFormatter.cs
- Terminate.cs
- SqlResolver.cs
- DataGridViewAdvancedBorderStyle.cs
- SettingsContext.cs
- TypeConverter.cs
- DebugViewWriter.cs
- DependencyObject.cs
- DataServiceQueryException.cs
- StylusButton.cs
- ListViewItemMouseHoverEvent.cs
- XmlSerializationReader.cs
- CacheHelper.cs
- SoapHeader.cs
- EmbeddedObject.cs
- LayoutEngine.cs
- CmsUtils.cs
- ArithmeticException.cs
- StyleSelector.cs
- XmlNodeChangedEventArgs.cs
- ControlBindingsConverter.cs
- SqlVersion.cs
- SocketStream.cs
- TemplateControlBuildProvider.cs
- LocalValueEnumerator.cs
- XmlRootAttribute.cs
- FormatException.cs
- InvalidateEvent.cs
- Preprocessor.cs
- InfoCardRSACryptoProvider.cs
- AdPostCacheSubstitution.cs
- WindowsTokenRoleProvider.cs
- BlurBitmapEffect.cs
- TextAction.cs
- XPathPatternParser.cs
- DataGridColumnHeaderCollection.cs
- AnnotationHelper.cs
- HandoffBehavior.cs
- ClientRuntimeConfig.cs
- SqlProcedureAttribute.cs
- TextBox.cs
- IUnknownConstantAttribute.cs
- StrokeNodeEnumerator.cs
- InputLangChangeRequestEvent.cs
- HttpContext.cs
- SecurityManager.cs
- selecteditemcollection.cs
- DataObject.cs
- TransactionScope.cs
- wmiutil.cs
- PopOutPanel.cs
- ServiceDescription.cs
- ClientTargetSection.cs
- DocumentCollection.cs
- Utility.cs
- UIPropertyMetadata.cs
- UserControlCodeDomTreeGenerator.cs
- documentsequencetextpointer.cs
- RenderDataDrawingContext.cs
- PersonalizationDictionary.cs
- HashCodeCombiner.cs
- BmpBitmapDecoder.cs
- PriorityBindingExpression.cs
- FontInfo.cs
- GifBitmapDecoder.cs
- ToolStripSeparatorRenderEventArgs.cs
- SqlEnums.cs
- DisplayNameAttribute.cs
- SafeRightsManagementQueryHandle.cs
- RegexRunnerFactory.cs
- GridErrorDlg.cs
- XmlSchemaAnnotated.cs
- NavigatorOutput.cs
- ExtendedPropertiesHandler.cs
- SmiContextFactory.cs
- SecureConversationDriver.cs
- SafeNativeMethods.cs