e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
199 lines
6.6 KiB
C#
199 lines
6.6 KiB
C#
//------------------------------------------------------------------------------
|
|
// <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();
|
|
}
|
|
|
|
}
|
|
}
|