コード例 #1
0
ファイル: SiteMapNodeTest.cs プロジェクト: Profit0004/mono
		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");
		}
コード例 #2
0
ファイル: SiteMapNodeTest.cs プロジェクト: Profit0004/mono
		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");
		}
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public virtual bool IsDescendantOf(SiteMapNode node)
 {
     for (SiteMapNode node2 = this.ParentNode; node2 != null; node2 = node2.ParentNode)
     {
         if (node2.Equals(node))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #6
0
ファイル: SiteMapNode.cs プロジェクト: dox0/DotNet471RS3
        public virtual bool IsDescendantOf(SiteMapNode node)
        {
            SiteMapNode parent = ParentNode;

            while (parent != null)
            {
                if (parent.Equals(node))
                {
                    return(true);
                }

                parent = parent.ParentNode;
            }

            return(false);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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;
                    }
                }
            }
        }
コード例 #9
0
        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;
        }
コード例 #10
0
ファイル: SiteMapNodeTest.cs プロジェクト: Profit0004/mono
		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));
		}
コード例 #11
0
 /// <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);
 }
コード例 #12
0
        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);
        }
コード例 #13
0
        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;
                        }
                    }
                }
            }
        }
 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);
 }