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
- TextMetrics.cs
- MachineKeySection.cs
- TextBox.cs
- DomainConstraint.cs
- PositiveTimeSpanValidator.cs
- WebPartConnectionsConnectVerb.cs
- BrowserCapabilitiesCompiler.cs
- securitycriticaldataformultiplegetandset.cs
- StateItem.cs
- ResXResourceSet.cs
- Number.cs
- ImageDrawing.cs
- XmlQueryOutput.cs
- BuildProvider.cs
- WebRequestModuleElement.cs
- ToolStripItemImageRenderEventArgs.cs
- TabControlAutomationPeer.cs
- LocalizationParserHooks.cs
- WebControlParameterProxy.cs
- GridEntry.cs
- DefaultValueTypeConverter.cs
- GetWinFXPath.cs
- AtlasWeb.Designer.cs
- MLangCodePageEncoding.cs
- WrapPanel.cs
- ValueProviderWrapper.cs
- ToolStripItem.cs
- ListViewInsertionMark.cs
- SoapSchemaMember.cs
- DataGridViewBand.cs
- ScrollBar.cs
- MasterPageCodeDomTreeGenerator.cs
- SoapDocumentMethodAttribute.cs
- SmtpMail.cs
- RequestSecurityTokenResponse.cs
- IODescriptionAttribute.cs
- WindowsBrush.cs
- RadioButtonList.cs
- XmlSortKey.cs
- TriggerActionCollection.cs
- SurrogateDataContract.cs
- EventProviderWriter.cs
- AddInToken.cs
- DataKeyCollection.cs
- MultiDataTrigger.cs
- EncryptedType.cs
- XmlReflectionMember.cs
- PageAdapter.cs
- CalendarAutoFormatDialog.cs
- FormatVersion.cs
- NativeActivity.cs
- Vector3DCollection.cs
- StandardMenuStripVerb.cs
- XmlBinaryWriterSession.cs
- ChannelServices.cs
- UserNameSecurityTokenProvider.cs
- LifetimeServices.cs
- GZipStream.cs
- Form.cs
- XmlSerializerVersionAttribute.cs
- ReceiveReply.cs
- FlowDocumentView.cs
- PenCursorManager.cs
- AnnotationMap.cs
- ContextStack.cs
- CodeTypeOfExpression.cs
- GradientStop.cs
- TextTreeUndoUnit.cs
- EmbeddedMailObjectsCollection.cs
- ResourcesBuildProvider.cs
- CaseInsensitiveHashCodeProvider.cs
- ServiceInstallComponent.cs
- ResourceContainer.cs
- DrawingContextWalker.cs
- NetworkStream.cs
- AttachInfo.cs
- ReceiveDesigner.xaml.cs
- HttpFileCollectionWrapper.cs
- UriGenerator.cs
- StrongNameMembershipCondition.cs
- SQLChars.cs
- ColumnMapProcessor.cs
- ConfigurationHelpers.cs
- DocumentPageHost.cs
- RuntimeArgumentHandle.cs
- ISAPIRuntime.cs
- OuterGlowBitmapEffect.cs
- TypeConverter.cs
- MonthCalendar.cs
- X509SubjectKeyIdentifierClause.cs
- NonceCache.cs
- DeviceContext2.cs
- XmlSchema.cs
- CompositionTarget.cs
- EventPrivateKey.cs
- SqlCacheDependency.cs
- BoundingRectTracker.cs
- PrintingPermission.cs
- StylusButtonCollection.cs
- Models.cs