File: ProfileGroupSettingsCollection.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (198 lines) | stat: -rw-r--r-- 6,808 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
//------------------------------------------------------------------------------
// <copyright file="ProfileGroupSettingsCollection.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

namespace System.Web.Configuration {
    using System;
    using System.Xml;
    using System.Configuration;
    using System.Collections.Specialized;
    using System.Collections;
    using System.IO;
    using System.Text;
    using System.Web.Util;
    using System.Security.Permissions;

    [ConfigurationCollection(typeof(ProfileGroupSettings), AddItemName = "group")]
    public sealed class ProfileGroupSettingsCollection : ConfigurationElementCollection {
        private static ConfigurationPropertyCollection _properties;
        private bool bModified = false;

        static ProfileGroupSettingsCollection() {
            _properties = new ConfigurationPropertyCollection();
        }

        public ProfileGroupSettingsCollection() {
            AddElementName = "group";
            ClearElementName = String.Empty; // This collection does not support Clear tags
            EmitClear = false;
        }

        protected override ConfigurationPropertyCollection Properties {
            get {
                return _properties;
            }
        }

        // public properties
        public String[] AllKeys {
            get {
                return StringUtil.ObjectArrayToStringArray(BaseGetAllKeys());
            }
        }
        
        public new ProfileGroupSettings this[string name] {
            get {
                return (ProfileGroupSettings)BaseGet(name);
            }
        }
        
        public ProfileGroupSettings this[int index] {
            get {
                return (ProfileGroupSettings)BaseGet(index);
            }
            set {
                if (BaseGet(index) != null) {
                    BaseRemoveAt(index);
                }
                BaseAdd(index, value);
            }
        }

        internal void AddOrReplace(ProfileGroupSettings groupSettings) {
            BaseAdd(groupSettings, false);
        }

        // Protected Overrides
        protected override ConfigurationElement CreateNewElement() {
            return new ProfileGroupSettings();
        }

        protected override Object GetElementKey(ConfigurationElement element) {
            return ((ProfileGroupSettings)element).Name;
        }

        // Internal access to ConfigurationElement methods
        internal bool InternalIsModified() {
            return IsModified();
        }

        internal void InternalResetModified() {
            ResetModified();
        }

        internal void InternalReset(ConfigurationElement parentElement) {
            Reset(parentElement);
        }

        internal void InternalUnMerge(ConfigurationElement sourceElement, ConfigurationElement parentElement,
                                      ConfigurationSaveMode saveMode) {
            // This requires a special unmerge because it should not act like an element in a collection
            // which is the default behavior
            Unmerge(sourceElement, parentElement, saveMode); // Base merge to get locks merged
            BaseClear(); // don't use the merged data however

            ProfileGroupSettingsCollection source = sourceElement as ProfileGroupSettingsCollection;
            ProfileGroupSettingsCollection parent = parentElement as ProfileGroupSettingsCollection;

            // foreach group in the source we should unmerge the individual settings.
            foreach (ProfileGroupSettings settings in source) {
                ProfileGroupSettings settingsFromParent = parent.Get(settings.Name);
                ProfileGroupSettings deltaSettings = new ProfileGroupSettings();

                deltaSettings.InternalUnmerge(settings, settingsFromParent, saveMode);
                BaseAdd(deltaSettings);
            }
            
        }

        internal bool InternalSerialize(XmlWriter writer, bool serializeCollectionKey) {
            if (EmitClear == true) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Clear_not_valid));
            }

            return SerializeElement(writer, serializeCollectionKey);
        }

        // public methods
        public void Add(ProfileGroupSettings group) {
            BaseAdd(group);
        }
        
        public ProfileGroupSettings Get(int index) {
            return (ProfileGroupSettings)BaseGet(index);
        }
        
        public ProfileGroupSettings Get(string name) {
            return (ProfileGroupSettings)BaseGet(name);
        }

        public String GetKey(int index) {
            return (String) BaseGetKey(index);
        }
        
        public void Set(ProfileGroupSettings group) {
            BaseAdd(group, false);
        }

        public int IndexOf(ProfileGroupSettings group) {
            return BaseIndexOf(group);
        }

        public void Remove(string name) {
            ConfigurationElement elem = BaseGet(name);
            if (elem != null) {
                ElementInformation elemInfo = elem.ElementInformation;
                if (elemInfo.IsPresent) {
                    BaseRemove(name);
                }
                else {
                    throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_cannot_remove_inherited_items));
                }
            }
        }

        public void RemoveAt(int index) {
            ConfigurationElement elem = BaseGet(index);
            if (elem != null) {
                ElementInformation elemInfo = elem.ElementInformation;
                if (elemInfo.IsPresent) {
                    BaseRemoveAt(index);
                }
                else {
                    throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_cannot_remove_inherited_items));
                }
            }
        }

        public void Clear() {
            int index = Count-1;
            bModified = true;

            for (int i = index; i >= 0; i--) {
                ConfigurationElement elem = BaseGet(i);
                if (elem != null) {
                    ElementInformation elemInfo = elem.ElementInformation;
                    if (elemInfo.IsPresent) {
                        BaseRemoveAt(i);
                    }
                }
            }
        }
        
        protected override void ResetModified() {
            bModified = false;
            base.ResetModified();
        }

        protected override bool IsModified() {
            if (bModified == true) {
                return true;
            }
            return base.IsModified();
        }

    }
}