File: ControlsConfig.cs

package info (click to toggle)
mono 6.14.1%2Bds2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,282,732 kB
  • sloc: cs: 11,182,461; xml: 2,850,281; ansic: 699,123; cpp: 122,919; perl: 58,604; javascript: 30,841; asm: 21,845; makefile: 19,602; sh: 10,973; python: 4,772; pascal: 925; sql: 859; sed: 16; php: 1
file content (206 lines) | stat: -rw-r--r-- 7,255 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
//------------------------------------------------------------------------------
// <copyright file="ControlsConfig.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------


using System;
using System.Xml;
using System.Diagnostics;
using System.Configuration;
using System.Globalization;
using System.Web;
using System.Web.Configuration;
using System.Collections.Specialized;
using System.Security.Permissions;

namespace System.Web.UI.MobileControls
{
    // Mobile Controls Configuration class.
    // Includes Mobile Web Forms-specific settings, including a set
    // of device configurations, that can be used to decide what set of
    // adapters to use for a given device.

    [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.")]
    internal class ControlsConfig
    {
        private readonly ControlsConfig _parent;

        private readonly StringDictionary _settings = new StringDictionary();
        private readonly ListDictionary _deviceConfigs = new ListDictionary();

        [ConfigurationPermission(SecurityAction.Assert, Unrestricted=true)]
        internal static ControlsConfig GetFromContext(HttpContext context)
        {
            // VSWhidbey 372365: Use MobileControlsSection if it is being returned
            Object config = context.GetSection("system.web/mobileControls");
            MobileControlsSection controlSection = config as MobileControlsSection;
            if (controlSection != null)
            {
                return controlSection.GetControlsConfig();
            }
            return (ControlsConfig)config;
        }

        internal ControlsConfig(ControlsConfig parent)
        {
            _parent = parent;
        }

        // Return false if a device of the same name has already been added.
        internal /*public*/ bool AddDeviceConfig(String configName, IndividualDeviceConfig deviceConfig)
        {
            // Note that GetDeviceConfig also walks the parents configs
            if (GetDeviceConfig(configName) != null)
            {
                return false;
            }
            else
            {
                _deviceConfigs[configName] = deviceConfig;
                return true;
            }
        }

        internal /*public*/ IndividualDeviceConfig GetDeviceConfig(HttpContext context)
        {
            IndividualDeviceConfig deviceConfig = null;

            #if DEBUG
            if (context.Session != null)
            {
                String var = "AdapterOverride";
                bool saveInSession = true;
                String adapterOverride = (String)context.Session[var];
                if (adapterOverride == null)
                {
                    saveInSession = false;
                    adapterOverride = (String)context.Request.QueryString[var];
                }
                if (adapterOverride != null && 
                    (deviceConfig = GetDeviceConfig(adapterOverride)) != null)
                {
                    if (saveInSession)
                    {
                        context.Session[var] = adapterOverride;
                    }
                    return deviceConfig;
                }
            }
            #endif

            foreach (IndividualDeviceConfig candidate in _deviceConfigs.Values) 
            {
                if (candidate.DeviceQualifies(context))
                {
                    deviceConfig = candidate;
                    break;
                }
            }

            if (deviceConfig == null && _parent != null)
            {
                deviceConfig = _parent.GetDeviceConfig (context);
            }

            if (deviceConfig == null)
            {
                throw new Exception(
                    SR.GetString(SR.ControlsConfig_NoDeviceConfigRegistered,
                                 context.Request.UserAgent));
            }

            return deviceConfig;
        }

        internal /*public*/ IndividualDeviceConfig GetDeviceConfig(String configName)
        {
            IndividualDeviceConfig deviceConfig = (IndividualDeviceConfig)_deviceConfigs[configName];
            if (deviceConfig == null && _parent != null)
            {
                deviceConfig = _parent.GetDeviceConfig (configName);
            }
            return deviceConfig;
        }

        // Call this after all the device configs have been entered.  This will
        // resolve the names of the parent classes to inherit from actual
        // classes, and flag an error if there isn't one.  This is done as a
        // second-pass because devices earlier in web.config may inherit from
        // items later in the web.config.  That flexibility is required to get
        // the right behavior for device predicates being evaluated in the order
        // they appear.
        internal void FixupDeviceConfigInheritance(XmlNode configNode)
        {
            foreach (IndividualDeviceConfig config in _deviceConfigs.Values)
            {
                config.FixupInheritance(null, configNode);
            }
        }

        internal /*public*/ String this[String key]
        {
            get
            {
                String s = _settings[key];
                if (s == null && _parent != null)
                {
                    s = _parent[key];
                }
                return s;
            }

            set
            {
                _settings[key] = value;
            }
        }

        internal /*public*/ int SessionStateHistorySize
        {
            get
            {
                String sizeString = this["sessionStateHistorySize"];
                int size = Constants.DefaultSessionsStateHistorySize;
                
                if (sizeString != null)
                {
                    // Enclose in case a numerical value wasn't provided.  In
                    // which case just return the default.
                    try
                    {
                        size = Int32.Parse(sizeString, CultureInfo.InvariantCulture);
                    }
                    catch
                    {
                    }
                }

                return size;
            }
        }

        internal /*public*/ Type CookielessDataDictionaryType
        {
            get
            {
                Type cookielessDataType = null;
                String typeString = this["cookielessDataDictionaryType"];
                if (!String.IsNullOrEmpty(typeString)) {
                    cookielessDataType = Type.GetType(typeString);
                }
                return cookielessDataType;
            }
        }

        internal /*public*/ bool AllowCustomAttributes
        {
            get
            {
                String allow = this["allowCustomAttributes"];
                return String.Compare(allow, "true", StringComparison.OrdinalIgnoreCase) == 0;
            }
        }
    }
}