FolderLevelBuildProviderCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Configuration / FolderLevelBuildProviderCollection.cs / 1305376 / FolderLevelBuildProviderCollection.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.Configuration { 
    using System; 
    using System.Collections.Generic;
    using System.Configuration; 
    using System.Web.Compilation;

    // class CompilationSection
 
    [ConfigurationCollection(typeof(FolderLevelBuildProvider))]
    public sealed class FolderLevelBuildProviderCollection : ConfigurationElementCollection { 
        private static ConfigurationPropertyCollection _properties; 
        private Dictionary> _buildProviderMappings;
        private HashSet _buildProviderTypes; 

        private bool _folderLevelBuildProviderTypesSet;

        static FolderLevelBuildProviderCollection() { 
            // Property initialization
            _properties = new ConfigurationPropertyCollection(); 
        } 

        public FolderLevelBuildProviderCollection() 
            : base(StringComparer.OrdinalIgnoreCase) {
        }

        protected override ConfigurationPropertyCollection Properties { 
            get {
                return _properties; 
            } 
        }
 
        public new BuildProvider this[string name] {
            get {
                return (BuildProvider)BaseGet(name);
            } 
        }
        public FolderLevelBuildProvider this[int index] { 
            get { 
                return (FolderLevelBuildProvider)BaseGet(index);
            } 
            set {
                if (BaseGet(index) != null)
                    BaseRemoveAt(index);
                BaseAdd(index, value); 
            }
        } 
 
        public void Add(FolderLevelBuildProvider buildProvider) {
            BaseAdd(buildProvider); 
        }

        public void Remove(String name) {
            BaseRemove(name); 
        }
 
        public void RemoveAt(int index) { 
            BaseRemoveAt(index);
        } 

        public void Clear() {
            BaseClear();
        } 

        protected override ConfigurationElement CreateNewElement() { 
            return new FolderLevelBuildProvider(); 
        }
 
        protected override Object GetElementKey(ConfigurationElement element) {
            return ((FolderLevelBuildProvider)element).Name;
        }
 
        // Add a mapping from appliesTo to the buildProviderType
        private void AddMapping(FolderLevelBuildProviderAppliesTo appliesTo, Type buildProviderType) { 
            if (_buildProviderMappings == null) { 
                _buildProviderMappings = new Dictionary>();
            } 
            if (_buildProviderTypes == null) {
                _buildProviderTypes = new HashSet();
            }
            List buildProviders = null; 
            if (!_buildProviderMappings.TryGetValue(appliesTo, out buildProviders)) {
                buildProviders = new List(); 
                _buildProviderMappings.Add(appliesTo, buildProviders); 
            }
            buildProviders.Add(buildProviderType); 

            _buildProviderTypes.Add(buildProviderType);
        }
 
        internal List GetBuildProviderTypes(FolderLevelBuildProviderAppliesTo appliesTo) {
            EnsureFolderLevelBuildProvidersInitialized(); 
            var buildProviders = new List(); 
            if (_buildProviderMappings != null) {
                foreach (var pair in _buildProviderMappings) { 
                    if ((pair.Key & appliesTo) != 0) {
                        buildProviders.AddRange(pair.Value);
                    }
                } 
            }
            return buildProviders; 
        } 

        internal bool IsFolderLevelBuildProvider(Type t) { 
            EnsureFolderLevelBuildProvidersInitialized();
            if (_buildProviderTypes != null) {
                return _buildProviderTypes.Contains(t);
            } 
            return false;
        } 
 

        // Initialize the dictionary mapping appliesTo to buildProvider types 
        private void EnsureFolderLevelBuildProvidersInitialized() {
            if (!_folderLevelBuildProviderTypesSet) {
                lock (this) {
                    if (!_folderLevelBuildProviderTypesSet) { 
                        foreach (FolderLevelBuildProvider buildProvider in this) {
                            AddMapping(buildProvider.AppliesToInternal, buildProvider.TypeInternal); 
                        } 
                        _folderLevelBuildProviderTypesSet = true;
                    } 
                }
            }
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK