|
//------------------------------------------------------------------------------
// <copyright file="RootProfilePropertySettingsCollection.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;
// class ProfileSection
// ProfileGroupSettingsCollection
[ConfigurationCollection(typeof(ProfilePropertySettings))]
public sealed class RootProfilePropertySettingsCollection : ProfilePropertySettingsCollection {
private ProfileGroupSettingsCollection _propGroups = new ProfileGroupSettingsCollection();
private static ConfigurationPropertyCollection _properties;
static RootProfilePropertySettingsCollection() {
// Property initialization
_properties = new ConfigurationPropertyCollection();
}
protected override ConfigurationPropertyCollection Properties {
get {
return _properties;
}
}
public RootProfilePropertySettingsCollection() {
}
protected override bool AllowClear {
get {
return true;
}
}
protected override bool ThrowOnDuplicate {
get {
return true;
}
}
protected override bool OnDeserializeUnrecognizedElement(String elementName, XmlReader reader) {
bool handled = false;
// Deal with the "group" element
if (elementName == "group") {
ProfileGroupSettingsCollection groupCollection;
ProfileGroupSettings newGroupSettings;
ProfileGroupSettings curGroupSettings = null;
string name = reader.GetAttribute("name");
groupCollection = GroupSettings;
if (name != null) {
curGroupSettings = groupCollection[name];
}
newGroupSettings = new ProfileGroupSettings();
newGroupSettings.InternalReset(curGroupSettings);
newGroupSettings.InternalDeserialize(reader, false);
groupCollection.AddOrReplace(newGroupSettings);
handled = true;
}
else {
if (elementName == "clear") {
GroupSettings.Clear();
}
// Let the base class deal with "add, remove, clear"
handled = base.OnDeserializeUnrecognizedElement(elementName, reader);
}
return handled;
}
protected override bool IsModified() {
return base.IsModified() || GroupSettings.InternalIsModified();
}
protected override void ResetModified() {
base.ResetModified();
GroupSettings.InternalResetModified();
}
public override bool Equals(object rootProfilePropertySettingsCollection) {
RootProfilePropertySettingsCollection o = rootProfilePropertySettingsCollection as RootProfilePropertySettingsCollection;
return (o != null && Object.Equals(this, o) && Object.Equals(GroupSettings, o.GroupSettings));
}
public override int GetHashCode() {
return HashCodeCombiner.CombineHashCodes(base.GetHashCode(), GroupSettings.GetHashCode());
}
protected override void Reset(ConfigurationElement parentElement) {
RootProfilePropertySettingsCollection parent = parentElement as RootProfilePropertySettingsCollection;
base.Reset(parentElement);
GroupSettings.InternalReset(parent.GroupSettings);
}
protected override void Unmerge(ConfigurationElement sourceElement,
ConfigurationElement parentElement,
ConfigurationSaveMode saveMode) {
RootProfilePropertySettingsCollection parent = parentElement as RootProfilePropertySettingsCollection;
RootProfilePropertySettingsCollection source = sourceElement as RootProfilePropertySettingsCollection;
base.Unmerge(sourceElement, parentElement, saveMode);
GroupSettings.InternalUnMerge(source.GroupSettings, (parent != null) ? parent.GroupSettings : null, saveMode);
}
protected override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey) {
bool DataToWrite = false;
if (base.SerializeElement(null, false) == true ||
GroupSettings.InternalSerialize(null, false) == true) {
DataToWrite |= base.SerializeElement(writer, false);
DataToWrite |= GroupSettings.InternalSerialize(writer, false);
}
return DataToWrite;
}
[ConfigurationProperty("group")]
public ProfileGroupSettingsCollection GroupSettings {
get {
return _propGroups;
}
}
}
}
|