e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
302 lines
9.5 KiB
C#
302 lines
9.5 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="ConfigurationValues.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
using System;
|
|
using System.Configuration.Internal;
|
|
using System.Collections;
|
|
using System.Collections.Specialized;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Security.Permissions;
|
|
using System.Xml;
|
|
using System.Globalization;
|
|
using System.ComponentModel;
|
|
using System.Security;
|
|
using System.Text;
|
|
|
|
namespace System.Configuration {
|
|
|
|
internal class ConfigurationValues : NameObjectCollectionBase {
|
|
private BaseConfigurationRecord _configRecord;
|
|
private volatile bool _containsElement;
|
|
private volatile bool _containsInvalidValue;
|
|
|
|
internal ConfigurationValues() : base(StringComparer.Ordinal) {
|
|
}
|
|
|
|
// AssociateContext
|
|
//
|
|
// Associate a collection of values with a configRecord
|
|
//
|
|
internal void AssociateContext(BaseConfigurationRecord configRecord) {
|
|
_configRecord = configRecord;
|
|
|
|
// Associate with children
|
|
foreach (ConfigurationElement currentElement in ConfigurationElements) {
|
|
currentElement.AssociateContext(_configRecord);
|
|
}
|
|
}
|
|
|
|
internal bool Contains(string key) {
|
|
return (BaseGet(key) != null);
|
|
}
|
|
|
|
internal string GetKey(int index) {
|
|
return BaseGetKey(index);
|
|
}
|
|
|
|
/*
|
|
internal ConfigurationValue GetConfigValue(int index)
|
|
{
|
|
return (ConfigurationValue)BaseGet(BaseGetKey(index));
|
|
}
|
|
*/
|
|
|
|
internal ConfigurationValue GetConfigValue(string key) {
|
|
return (ConfigurationValue)BaseGet(key);
|
|
}
|
|
|
|
internal ConfigurationValue GetConfigValue(int index) {
|
|
return (ConfigurationValue)BaseGet(index);
|
|
}
|
|
|
|
internal PropertySourceInfo GetSourceInfo(string key) {
|
|
ConfigurationValue configurationValue = GetConfigValue(key);
|
|
if (configurationValue != null) {
|
|
return configurationValue.SourceInfo;
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
internal void ChangeSourceInfo(string key, PropertySourceInfo sourceInfo) {
|
|
ConfigurationValue configurationValue = GetConfigValue(key);
|
|
if (configurationValue != null) {
|
|
configurationValue.SourceInfo = sourceInfo;
|
|
}
|
|
}
|
|
|
|
private ConfigurationValue CreateConfigValue(object value, ConfigurationValueFlags valueFlags, PropertySourceInfo sourceInfo) {
|
|
if (value != null) {
|
|
if (value is ConfigurationElement) {
|
|
_containsElement = true;
|
|
((ConfigurationElement)value).AssociateContext(_configRecord);
|
|
}
|
|
else if (value is InvalidPropValue) {
|
|
_containsInvalidValue = true;
|
|
}
|
|
}
|
|
|
|
ConfigurationValue configValue = new ConfigurationValue(value, valueFlags, sourceInfo);
|
|
return configValue;
|
|
}
|
|
|
|
internal void SetValue(string key, object value, ConfigurationValueFlags valueFlags, PropertySourceInfo sourceInfo) {
|
|
ConfigurationValue configValue = CreateConfigValue(value, valueFlags, sourceInfo);
|
|
BaseSet(key, configValue);
|
|
}
|
|
|
|
#if UNUSED_CODE
|
|
private void SetValue(int index, object value, ConfigurationValueFlags valueFlags, PropertySourceInfo sourceInfo) {
|
|
ConfigurationValue configValue = CreateConfigValue(value, valueFlags, sourceInfo);
|
|
BaseSet(index, configValue);
|
|
}
|
|
#endif
|
|
|
|
internal object this[string key] {
|
|
get {
|
|
ConfigurationValue configValue = GetConfigValue(key);
|
|
if (configValue != null) {
|
|
return configValue.Value;
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
set {
|
|
SetValue(key, value, ConfigurationValueFlags.Modified, null);
|
|
}
|
|
}
|
|
|
|
internal object this[int index] {
|
|
get {
|
|
ConfigurationValue configValue = GetConfigValue(index);
|
|
if (configValue != null) {
|
|
return configValue.Value;
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#if UNUSED_CODE
|
|
set {
|
|
SetValue(index, value, ConfigurationValueFlags.Modified, null);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
internal void Clear() {
|
|
BaseClear();
|
|
}
|
|
|
|
internal object SyncRoot { get { return this; } }
|
|
|
|
internal ConfigurationValueFlags RetrieveFlags(string key) {
|
|
ConfigurationValue configurationValue = (ConfigurationValue)BaseGet(key);
|
|
if (configurationValue != null) {
|
|
return configurationValue.ValueFlags;
|
|
}
|
|
else {
|
|
return ConfigurationValueFlags.Default;
|
|
}
|
|
}
|
|
|
|
internal bool IsModified(string key) {
|
|
ConfigurationValue configurationValue = (ConfigurationValue)BaseGet(key);
|
|
if (configurationValue != null) {
|
|
return ((configurationValue.ValueFlags & ConfigurationValueFlags.Modified) != 0);
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
internal bool IsInherited(string key) {
|
|
ConfigurationValue configurationValue = (ConfigurationValue)BaseGet(key);
|
|
if (configurationValue != null) {
|
|
return ((configurationValue.ValueFlags & ConfigurationValueFlags.Inherited) != 0);
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
internal IEnumerable ConfigurationElements {
|
|
get {
|
|
if (_containsElement) {
|
|
return new ConfigurationElementsCollection(this);
|
|
}
|
|
else {
|
|
return EmptyCollectionInstance;
|
|
}
|
|
}
|
|
}
|
|
|
|
internal IEnumerable InvalidValues {
|
|
get {
|
|
if (_containsInvalidValue) {
|
|
return new InvalidValuesCollection(this);
|
|
}
|
|
else {
|
|
return EmptyCollectionInstance;
|
|
}
|
|
}
|
|
}
|
|
|
|
static volatile IEnumerable s_emptyCollection;
|
|
static IEnumerable EmptyCollectionInstance {
|
|
get {
|
|
if (s_emptyCollection == null) {
|
|
s_emptyCollection = new EmptyCollection();
|
|
}
|
|
|
|
return s_emptyCollection;
|
|
}
|
|
}
|
|
|
|
private class EmptyCollection : IEnumerable {
|
|
IEnumerator _emptyEnumerator;
|
|
|
|
private class EmptyCollectionEnumerator : IEnumerator {
|
|
bool IEnumerator.MoveNext() {
|
|
return false;
|
|
}
|
|
|
|
Object IEnumerator.Current {
|
|
get {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
void IEnumerator.Reset() {
|
|
}
|
|
}
|
|
|
|
internal EmptyCollection() {
|
|
_emptyEnumerator = new EmptyCollectionEnumerator();
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator() {
|
|
return _emptyEnumerator;
|
|
}
|
|
}
|
|
|
|
private class ConfigurationElementsCollection : IEnumerable {
|
|
ConfigurationValues _values;
|
|
|
|
internal ConfigurationElementsCollection(ConfigurationValues values) {
|
|
_values = values;
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator() {
|
|
if (_values._containsElement) {
|
|
for (int index = 0; index < _values.Count; index++) {
|
|
object value = _values[index];
|
|
if (value is ConfigurationElement) {
|
|
yield return value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private class InvalidValuesCollection : IEnumerable {
|
|
ConfigurationValues _values;
|
|
|
|
internal InvalidValuesCollection(ConfigurationValues values) {
|
|
_values = values;
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator() {
|
|
if (_values._containsInvalidValue) {
|
|
for (int index = 0; index < _values.Count; index++) {
|
|
object value = _values[index];
|
|
if (value is InvalidPropValue) {
|
|
yield return value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
internal bool IsLocked(string key)
|
|
{
|
|
ConfigurationValue configurationValue = (ConfigurationValue)BaseGet(key);
|
|
if (configurationValue != null)
|
|
return ((configurationValue.ValueFlags & ConfigurationValueFlags.Locked) != 0);
|
|
else
|
|
return false;
|
|
|
|
}
|
|
internal bool IsReadOnly(string key)
|
|
{
|
|
ConfigurationValue configurationValue = (ConfigurationValue)BaseGet(key);
|
|
if (configurationValue != null)
|
|
return ((configurationValue.ValueFlags & ConfigurationValueFlags.ReadOnly) != 0);
|
|
else
|
|
return false;
|
|
|
|
}
|
|
*/
|
|
|
|
}
|
|
}
|