MobileControlsSectionHandler.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / 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.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK