Beispiel #1
0
        /// <summary>
        /// Add a node to the hierarchy.
        /// </summary>
        /// <param name="node">
        /// The node to add to the hierarchy.
        /// </param>
        public void AddNode(ConfigurationNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }
            if (nodesById.ContainsKey(node.Id))
            {
                return;                                             // we already own this one
            }
            SetUniqueComponentName(node);
            AddSite(node, node.Name);
            node.Hierarchy = this;
            string nodeTypeName = node.GetType().FullName;

            if (!nodesByType.ContainsKey(node.Id))
            {
                nodesByType[node.Id] = new NodeTypeEntryArrayList();
            }
            if (node.Parent != null && nodesByType.ContainsKey(node.Parent.Id))
            {
                NodeTypeEntryArrayList childTypes = nodesByType[node.Parent.Id];
                NodeTypeEntry          entry      = new NodeTypeEntry(node, nodeTypeName);
                if (!childTypes.Contains(entry))
                {
                    childTypes.Add(entry);
                    AddBaseTypes(node, childTypes);
                }
            }
            nodesById[node.Id] = node;
            AddNodeByName(node);
        }
Beispiel #2
0
        /// <summary>
        /// <para>Add a node to the hierarchy.</para>
        /// </summary>
        /// <param name="node">
        /// <para>The node to add to the hierarchy.</para>
        /// </param>
        public void AddNode(ConfigurationNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }
            node.Hierarchy = this;
            string nodeTypeName = node.GetType().FullName;

            if (!nodesByType.Contains(node.Id))
            {
                nodesByType[node.Id] = new NodeTypeEntryArrayList();
            }
            if (node.Parent != null)
            {
                NodeTypeEntryArrayList childTypes = (NodeTypeEntryArrayList)nodesByType[node.Parent.Id];
                NodeTypeEntry          entry      = new NodeTypeEntry(node, nodeTypeName);
                if (!childTypes.Contains(entry))
                {
                    childTypes.Add(entry);
                    AddBaseTypes(node, childTypes);
                }
            }
            nodesById[node.Id] = node;
            AddToContainer(node);
            SetSiteName(node.Name, node);
            // make sure to add after contanier so the name is set
            AddNodeByName(node);
        }
Beispiel #3
0
        private static void RemoveBaseTypes(ConfigurationNode node, NodeTypeEntryArrayList tableToAddTypes)
        {
            Type searchType = node.GetType().BaseType;

            while (searchType != null)
            {
                NodeTypeEntry entry = new NodeTypeEntry(node, searchType.FullName);
                tableToAddTypes.Remove(entry);
                searchType = searchType.BaseType;
            }
        }
Beispiel #4
0
        private void SearchNodeForType(ConfigurationNode searchNode, Type type, List <ConfigurationNode> nodes)
        {
            ConfigurationNode[]    childNodes;
            NodeTypeEntryArrayList childNodesByType = nodesByType[searchNode.Id];

            if (childNodesByType == null)
            {
                return;
            }
            childNodes = childNodesByType.FindAllEntryTypeMatchs(type.FullName);
            foreach (ConfigurationNode node in childNodes)
            {
                // since the same instance can be in multiple places... we have to make sure
                // we don't have it already
                if (!nodes.Contains(node))
                {
                    nodes.Add(node);
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Remove a node from the hierarchy.
        /// </summary>
        /// <param name="node">
        /// The node to remove.
        /// </param>
        public void RemoveNode(ConfigurationNode node)
        {
            string nodeTypeName = node.GetType().FullName;

            nodesByType.Remove(node.Id);
            if (node.Parent != null)
            {
                NodeTypeEntryArrayList childTypes    = nodesByType[node.Parent.Id];
                NodeTypeEntry          entryToRemove = new NodeTypeEntry(node, nodeTypeName);
                if (childTypes.Contains(entryToRemove))
                {
                    childTypes.Remove(entryToRemove);
                    RemoveBaseTypes(node, childTypes);
                }
            }
            node.Hierarchy = null;
            nodesById.Remove(node.Id);
            RemoveNodeByName(node);
            if (node.Id == rootNode.Id)
            {
                rootNode = null;
            }
        }
Beispiel #6
0
        /// <summary>
        /// <para>Remove a node from the hierarchy.</para>
        /// </summary>
        /// <param name="node">
        /// <para>The node to remove.</para>
        /// </param>
        public void RemoveNode(ConfigurationNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }
            string nodeTypeName = node.GetType().FullName;

            nodesByType.Remove(node.Id);
            if (node.Parent != null)
            {
                NodeTypeEntryArrayList childTypes    = (NodeTypeEntryArrayList)nodesByType[node.Parent.Id];
                NodeTypeEntry          entryToRemove = new NodeTypeEntry(node, nodeTypeName);
                if (childTypes.Contains(entryToRemove))
                {
                    childTypes.Remove(entryToRemove);
                    RemoveBaseTypes(node, childTypes);
                }
            }
            node.Hierarchy = null;
            nodesById.Remove(node.Id);
            RemoveNodeByName(node);
            RemoveFromContainer(node);
        }
 private static void RemoveBaseTypes(ConfigurationNode node, NodeTypeEntryArrayList tableToAddTypes)
 {
     Type searchType = node.GetType().BaseType;
     while (searchType != null)
     {
         NodeTypeEntry entry = new NodeTypeEntry(node, searchType.FullName);
         tableToAddTypes.Remove(entry);
         searchType = searchType.BaseType;
     }
 }