/// <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); }
/// <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); }
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; } }
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); } } }
/// <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; } }
/// <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); }