public void Node_equals () { SiteMapNode node = new SiteMapNode (new DummyProvider (), "Node", "1", "", null, null, null, null, null); SiteMapNode node1 = new SiteMapNode (new DummyProvider (), "Node", "1", "", null, null, null, null, null); SiteMapNode node2 = new SiteMapNode (new DummyProvider (), "Node", "2", "", null, null, new NameValueCollection (), null, null); Assert.IsTrue (node.Equals (node1), "both nodes have attrib=null"); Assert.IsFalse (node.Equals (node2), "one node has attrib=null"); }
public void Node_Null_Attrib_equals () { // Note: dot.net implementation dosn't compare attributes SiteMapNode node = new SiteMapNode (new DummyProvider (), "", "", "", null, null, null, null, null); SiteMapNode node1 = new SiteMapNode (new DummyProvider (), "", "", "", null, null, null, null, null); SiteMapNode node2 = new SiteMapNode (new DummyProvider (), "", "", "", null, null, new NameValueCollection (), null, null); Assert.IsTrue (node.Equals (node1), "both nodes have attrib=null"); Assert.IsTrue (node.Equals (node2), "one node has attrib=null"); }
protected override void RemoveNode(SiteMapNode node) { if (node == null) { throw new ArgumentNullException("node"); } var provider = node.Provider; if (provider != this) { for (var parentProvider = provider.ParentProvider; parentProvider != this; parentProvider = parentProvider.ParentProvider) { if (parentProvider == null) { throw new InvalidOperationException(string.Format("StaticSiteMapProviderEx_cannot_remove_node", node.ToString(), Name, provider.Name)); } } } if (node.Equals(provider.RootNode)) { throw new InvalidOperationException("StaticSiteMapProviderEx_cannot_remove_root_node"); } if (provider != this) { _providerRemoveNode.Invoke(provider, new[] { node }); } base.RemoveNode(node); }
protected internal override void RemoveNode(SiteMapNode node) { if (node == null) { throw new ArgumentNullException("node"); } SiteMapProvider provider = node.Provider; if (provider != this) { for (SiteMapProvider provider2 = provider.ParentProvider; provider2 != this; provider2 = provider2.ParentProvider) { if (provider2 == null) { throw new InvalidOperationException(System.Web.SR.GetString("XmlSiteMapProvider_cannot_remove_node", new object[] { node.ToString(), this.Name, provider.Name })); } } } if (node.Equals(provider.GetRootNodeCore())) { throw new InvalidOperationException(System.Web.SR.GetString("SiteMapProvider_cannot_remove_root_node")); } if (provider != this) { provider.RemoveNode(node); } base.RemoveNode(node); }
public virtual bool IsDescendantOf(SiteMapNode node) { for (SiteMapNode node2 = this.ParentNode; node2 != null; node2 = node2.ParentNode) { if (node2.Equals(node)) { return(true); } } return(false); }
public virtual bool IsDescendantOf(SiteMapNode node) { SiteMapNode parent = ParentNode; while (parent != null) { if (parent.Equals(node)) { return(true); } parent = parent.ParentNode; } return(false); }
protected internal override void RemoveNode(SiteMapNode node) { if (node == null) { throw new ArgumentNullException("node"); } SiteMapProvider ownerProvider = node.Provider; if (ownerProvider != this) { // Only nodes defined in this provider tree can be removed. SiteMapProvider parentProvider = ownerProvider.ParentProvider; while (parentProvider != this) { if (parentProvider == null) { // Cannot remove nodes defined in other providers throw new InvalidOperationException( SR.GetString(SR.XmlSiteMapProvider_cannot_remove_node, node.ToString(), this.Name, ownerProvider.Name)); } parentProvider = parentProvider.ParentProvider; } } if (node.Equals(ownerProvider.GetRootNodeCore())) { throw new InvalidOperationException(SR.GetString(SR.SiteMapProvider_cannot_remove_root_node)); } if (ownerProvider != this) { // Remove node from the owner provider. ownerProvider.RemoveNode(node); } base.RemoveNode(node); }
private void EnsureChildSiteMapProviderUpToDate(SiteMapProvider childProvider) { SiteMapNode oldNode = (SiteMapNode)ChildProviderTable[childProvider]; SiteMapNode newNode = childProvider.GetRootNodeCore(); if (newNode == null) { throw new ProviderException(SR.GetString(SR.XmlSiteMapProvider_invalid_sitemapnode_returned, childProvider.Name)); } // child providers have been updated. if (!oldNode.Equals(newNode)) { // If the child provider table has been updated, simply return null. // This will happen when the current provider's sitemap file is changed or Clear() is called; if (oldNode == null) { return; } lock (_lock) { oldNode = (SiteMapNode)ChildProviderTable[childProvider]; // If the child provider table has been updated, simply return null. See above. if (oldNode == null) { return; } newNode = childProvider.GetRootNodeCore(); if (newNode == null) { throw new ProviderException(SR.GetString(SR.XmlSiteMapProvider_invalid_sitemapnode_returned, childProvider.Name)); } if (!oldNode.Equals(newNode)) { // If the current provider does not contain any nodes but one child provider // ie. _siteMapNode == oldNode // the oldNode needs to be removed from Url table and the new node will be added. if (_siteMapNode.Equals(oldNode)) { UrlTable.Remove(oldNode.Url); KeyTable.Remove(oldNode.Key); UrlTable.Add(newNode.Url, newNode); KeyTable.Add(newNode.Key, newNode); _siteMapNode = newNode; } // First find the parent node SiteMapNode parent = (SiteMapNode)ParentNodeTable[oldNode]; // parent is null when the provider does not contain any static nodes, ie. // it only contains definition to include one child provider. if (parent != null) { // Update the child nodes table SiteMapNodeCollection list = (SiteMapNodeCollection)ChildNodeCollectionTable[parent]; // Add the newNode to where the oldNode is within parent node's collection. int index = list.IndexOf(oldNode); if (index != -1) { list.Remove(oldNode); list.Insert(index, newNode); } else { list.Add(newNode); } // Update the parent table ParentNodeTable[newNode] = parent; ParentNodeTable.Remove(oldNode); // Update the Url table UrlTable.Remove(oldNode.Url); KeyTable.Remove(oldNode.Key); UrlTable.Add(newNode.Url, newNode); KeyTable.Add(newNode.Key, newNode); } else { // Notify the parent provider to update its child provider collection. XmlSiteMapProvider provider = ParentProvider as XmlSiteMapProvider; if (provider != null) { provider.EnsureChildSiteMapProviderUpToDate(this); } } // Update provider nodes; ChildProviderTable[childProvider] = newNode; _childProviderList = null; } } } }
private bool CheckIfIn(SiteMapNode node, SiteMapNode selectedNode) { if (selectedNode == null || node == null) { return false; } if (selectedNode.Equals(node)) { return true; } if (node.HasChildNodes) { foreach (SiteMapNode _node in node.ChildNodes) { if (CheckIfIn(_node, selectedNode)) { return true; } } } return false; }
public void Node_Null_Roles_equals () { SiteMapNode node = new SiteMapNode (new DummyProvider (), "", "", "", null, null, null, null, null); SiteMapNode node1 = new SiteMapNode (new DummyProvider (), "", "", "", null, null, null, null, null); SiteMapNode node2 = new SiteMapNode (new DummyProvider (), "", "", "", null, new int[] { }, null, null, null); Assert.IsTrue (node.Equals (node1)); Assert.IsTrue (node.Equals (node2)); }
/// <summary> /// Removes the specified <see cref="T:System.Web.SiteMapNode"/> object from all site map node collections that are tracked by the site map provider. /// </summary> /// <param name="node">The site map node to remove from the site map node collections.</param> /// <exception cref="T:System.ArgumentNullException"> /// <paramref name="node"/> is null. /// </exception> protected override void RemoveNode(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); var provider = node.Provider; if (provider != this) for (var parentProvider = provider.ParentProvider; parentProvider != this; parentProvider = parentProvider.ParentProvider) if (parentProvider == null) throw new InvalidOperationException(string.Format("StaticSiteMapProviderEx_cannot_remove_node", node.ToString(), Name, provider.Name)); if (node.Equals(provider.RootNode)) throw new InvalidOperationException("StaticSiteMapProviderEx_cannot_remove_root_node"); if (provider != this) _providerRemoveNode.Invoke(provider, new[] { node }); base.RemoveNode(node); }
private void EnsureChildSiteMapProviderUpToDate(SiteMapProvider childProvider) { SiteMapNode node = (SiteMapNode)this.ChildProviderTable[childProvider]; SiteMapNode rootNodeCore = childProvider.GetRootNodeCore(); if (rootNodeCore == null) { throw new ProviderException(System.Web.SR.GetString("XmlSiteMapProvider_invalid_sitemapnode_returned", new object[] { childProvider.Name })); } if (!node.Equals(rootNodeCore) && (node != null)) { lock (base._lock) { node = (SiteMapNode)this.ChildProviderTable[childProvider]; if (node != null) { rootNodeCore = childProvider.GetRootNodeCore(); if (rootNodeCore == null) { throw new ProviderException(System.Web.SR.GetString("XmlSiteMapProvider_invalid_sitemapnode_returned", new object[] { childProvider.Name })); } if (!node.Equals(rootNodeCore)) { if (this._siteMapNode.Equals(node)) { base.UrlTable.Remove(node.Url); base.KeyTable.Remove(node.Key); base.UrlTable.Add(rootNodeCore.Url, rootNodeCore); base.KeyTable.Add(rootNodeCore.Key, rootNodeCore); this._siteMapNode = rootNodeCore; } SiteMapNode node3 = (SiteMapNode)base.ParentNodeTable[node]; if (node3 != null) { SiteMapNodeCollection nodes = (SiteMapNodeCollection)base.ChildNodeCollectionTable[node3]; int index = nodes.IndexOf(node); if (index != -1) { nodes.Remove(node); nodes.Insert(index, rootNodeCore); } else { nodes.Add(rootNodeCore); } base.ParentNodeTable[rootNodeCore] = node3; base.ParentNodeTable.Remove(node); base.UrlTable.Remove(node.Url); base.KeyTable.Remove(node.Key); base.UrlTable.Add(rootNodeCore.Url, rootNodeCore); base.KeyTable.Add(rootNodeCore.Key, rootNodeCore); } else { XmlSiteMapProvider parentProvider = this.ParentProvider as XmlSiteMapProvider; if (parentProvider != null) { parentProvider.EnsureChildSiteMapProviderUpToDate(this); } } this.ChildProviderTable[childProvider] = rootNodeCore; this._childProviderList = null; } } } } }