IsLockableElement() private method

private IsLockableElement ( string elementName ) : bool
elementName string
return bool
Esempio n. 1
0
        public void Add(string name)
        {
            if (((this._thisElement.ItemLocked & ConfigurationValueFlags.Locked) != ConfigurationValueFlags.Default) && ((this._thisElement.ItemLocked & ConfigurationValueFlags.Inherited) != ConfigurationValueFlags.Default))
            {
                throw new ConfigurationErrorsException(System.Configuration.SR.GetString("Config_base_attribute_locked", new object[] { name }));
            }
            ConfigurationValueFlags modified = ConfigurationValueFlags.Modified;
            string attribToLockTrim          = name.Trim();
            ConfigurationProperty property   = this._thisElement.Properties[attribToLockTrim];

            if ((property == null) && (attribToLockTrim != "*"))
            {
                ConfigurationElementCollection elements = this._thisElement as ConfigurationElementCollection;
                if ((elements == null) && (this._thisElement.Properties.DefaultCollectionProperty != null))
                {
                    elements = this._thisElement[this._thisElement.Properties.DefaultCollectionProperty] as ConfigurationElementCollection;
                }
                if (((elements == null) || (this._lockType == ConfigurationLockCollectionType.LockedAttributes)) || (this._lockType == ConfigurationLockCollectionType.LockedExceptionList))
                {
                    this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null);
                }
                else if (!elements.IsLockableElement(attribToLockTrim))
                {
                    this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, elements.LockableElements);
                }
            }
            else
            {
                if ((property != null) && property.IsRequired)
                {
                    throw new ConfigurationErrorsException(System.Configuration.SR.GetString("Config_base_required_attribute_lock_attempt", new object[] { property.Name }));
                }
                if (attribToLockTrim != "*")
                {
                    if ((this._lockType == ConfigurationLockCollectionType.LockedElements) || (this._lockType == ConfigurationLockCollectionType.LockedElementsExceptionList))
                    {
                        if (!typeof(ConfigurationElement).IsAssignableFrom(property.Type))
                        {
                            this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null);
                        }
                    }
                    else if (typeof(ConfigurationElement).IsAssignableFrom(property.Type))
                    {
                        this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null);
                    }
                }
            }
            if (this.internalDictionary.Contains(name))
            {
                modified = ConfigurationValueFlags.Modified | ((ConfigurationValueFlags)this.internalDictionary[name]);
                this.internalDictionary.Remove(name);
                this.internalArraylist.Remove(name);
            }
            this.internalDictionary.Add(name, modified);
            this.internalArraylist.Add(name);
            this._bModified = true;
        }
Esempio n. 2
0
        public void Add(string name)
        {
            if (((_thisElement.ItemLocked & ConfigurationValueFlags.Locked) != 0) &&
                ((_thisElement.ItemLocked & ConfigurationValueFlags.Inherited) != 0))
            {
                throw new ConfigurationErrorsException(SR.Format(SR.Config_base_attribute_locked, name));
            }

            ConfigurationValueFlags flags = ConfigurationValueFlags.Modified;

            string attribToLockTrim          = name.Trim();
            ConfigurationProperty propToLock = _thisElement.Properties[attribToLockTrim];

            if ((propToLock == null) && (attribToLockTrim != LockAll))
            {
                ConfigurationElementCollection collection = _thisElement as ConfigurationElementCollection;
                if ((collection == null) && (_thisElement.Properties.DefaultCollectionProperty != null))
                {
                    // this is not a collection but it may contain a default collection
                    collection =
                        _thisElement[_thisElement.Properties.DefaultCollectionProperty] as
                        ConfigurationElementCollection;
                }

                if ((collection == null) ||
                    (LockType == ConfigurationLockCollectionType.LockedAttributes) ||
                    // If the collection type is not element then the lock is bogus
                    (LockType == ConfigurationLockCollectionType.LockedExceptionList))
                {
                    _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null);
                }
                else
                {
                    if (!collection.IsLockableElement(attribToLockTrim))
                    {
                        _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, collection.LockableElements);
                    }
                }
            }
            else
            {
                // the lock is in the property bag but is it the correct type?
                if ((propToLock != null) && propToLock.IsRequired)
                {
                    throw new ConfigurationErrorsException(SR.Format(SR.Config_base_required_attribute_lock_attempt,
                                                                     propToLock.Name));
                }

                if (attribToLockTrim != LockAll)
                {
                    if ((LockType == ConfigurationLockCollectionType.LockedElements) ||
                        (LockType == ConfigurationLockCollectionType.LockedElementsExceptionList))
                    {
                        // If it is an element then it must be derived from ConfigurationElement
                        if (!typeof(ConfigurationElement).IsAssignableFrom(propToLock?.Type))
                        {
                            _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null);
                        }
                    }
                    else
                    {
                        // if it is a property then it cannot be derived from ConfigurationElement
                        if (typeof(ConfigurationElement).IsAssignableFrom(propToLock?.Type))
                        {
                            _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null);
                        }
                    }
                }
            }

            if (_internalDictionary.Contains(name))
            {
                flags = ConfigurationValueFlags.Modified | (ConfigurationValueFlags)_internalDictionary[name];
                _internalDictionary.Remove(name); // not from parent
                _internalArraylist.Remove(name);
            }
            _internalDictionary.Add(name, flags); // not from parent
            _internalArraylist.Add(name);
            IsModified = true;
        }