Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / StaticSiteMapProvider.cs / 1 / StaticSiteMapProvider.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * SimpleSiteMapProvider class definition * * Copyright (c) 2002 Microsoft Corporation */ namespace System.Web { using System; using System.Collections; using System.Collections.Specialized; using System.Globalization; using System.Security.Permissions; using System.Web.UI; using System.Web.Util; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public abstract class StaticSiteMapProvider : SiteMapProvider { // Table maps nodes to their child node collections private Hashtable _childNodeCollectionTable; internal IDictionary ChildNodeCollectionTable { get { if (_childNodeCollectionTable == null) { lock (_lock) { if (_childNodeCollectionTable == null) { _childNodeCollectionTable = new Hashtable(); } } } return _childNodeCollectionTable; } } // Case sensitive table that maps key to sitemap node. private Hashtable _keyTable; internal IDictionary KeyTable { get { if (_keyTable == null) { lock (_lock) { if (_keyTable == null) { _keyTable = new Hashtable(); } } } return _keyTable; } } // Table maps nodes to their parent nodes private Hashtable _parentNodeTable; internal IDictionary ParentNodeTable { get { if (_parentNodeTable == null) { lock (_lock) { if (_parentNodeTable == null) { _parentNodeTable = new Hashtable(); } } } return _parentNodeTable; } } // Case insensitive table that maps url to sitemap node. private Hashtable _urlTable; internal IDictionary UrlTable { get { if (_urlTable == null) { lock (_lock) { if (_urlTable == null) { _urlTable = new Hashtable(StringComparer.OrdinalIgnoreCase); } } } return _urlTable; } } ////// protected internal override void AddNode(SiteMapNode node, SiteMapNode parentNode) { if (node == null) { throw new ArgumentNullException("node"); } lock (_lock) { bool validUrl = false; string url = node.Url; if (!String.IsNullOrEmpty(url)) { if (HttpRuntime.AppDomainAppVirtualPath != null) { if (!UrlPath.IsAbsolutePhysicalPath(url)) { url = UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, url); // Normalize url url = UrlPath.MakeVirtualPathAppAbsolute(url); } if (UrlTable[url] != null) throw new InvalidOperationException( SR.GetString(SR.XmlSiteMapProvider_Multiple_Nodes_With_Identical_Url, url)); } validUrl = true; } String key = node.Key; Debug.Assert(key != null); if (KeyTable.Contains(key)) { throw new InvalidOperationException( SR.GetString(SR.XmlSiteMapProvider_Multiple_Nodes_With_Identical_Key, key)); } KeyTable[key] = node; if (validUrl) { UrlTable[url] = node; } if (parentNode != null) { ParentNodeTable[node] = parentNode; if (ChildNodeCollectionTable[parentNode] == null) ChildNodeCollectionTable[parentNode] = new SiteMapNodeCollection(); ((SiteMapNodeCollection)ChildNodeCollectionTable[parentNode]).Add(node); } } } public abstract SiteMapNode BuildSiteMap(); // Clear tables protected virtual void Clear() { lock (_lock) { if (_childNodeCollectionTable != null) _childNodeCollectionTable.Clear(); if (_urlTable != null) _urlTable.Clear(); if (_parentNodeTable != null) _parentNodeTable.Clear(); if (_keyTable != null) _keyTable.Clear(); } } // Find sitemapnode in current provider public override SiteMapNode FindSiteMapNodeFromKey(string key) { SiteMapNode result = base.FindSiteMapNodeFromKey(key); if (result == null) { result = (SiteMapNode)KeyTable[key]; } return ReturnNodeIfAccessible(result); } // Find sitemapnode in current provider public override SiteMapNode FindSiteMapNode(string rawUrl) { if (rawUrl == null) throw new ArgumentNullException("rawUrl"); // VSWhidbey 411041. URL needs to be trimmed. rawUrl = rawUrl.Trim(); if (rawUrl.Length == 0) { return null; } // Make sure it is an app absolute url if (UrlPath.IsAppRelativePath(rawUrl)) { rawUrl = UrlPath.MakeVirtualPathAppAbsolute(rawUrl); } BuildSiteMap(); return ReturnNodeIfAccessible((SiteMapNode)UrlTable[rawUrl]); } // Return readonly child node collection public override SiteMapNodeCollection GetChildNodes(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); BuildSiteMap(); SiteMapNodeCollection collection = (SiteMapNodeCollection)ChildNodeCollectionTable[node]; if (collection == null) { SiteMapNode childNodeFromKey = (SiteMapNode)KeyTable[node.Key]; if (childNodeFromKey != null) { collection = (SiteMapNodeCollection)ChildNodeCollectionTable[childNodeFromKey]; } } if (collection != null) { if (!SecurityTrimmingEnabled) { return SiteMapNodeCollection.ReadOnly(collection); } HttpContext context = HttpContext.Current; SiteMapNodeCollection trimmedCollection = new SiteMapNodeCollection(collection.Count); foreach (SiteMapNode subNode in collection) { if (subNode.IsAccessibleToUser(context)) { trimmedCollection.Add(subNode); } } return SiteMapNodeCollection.ReadOnly(trimmedCollection); } return SiteMapNodeCollection.Empty; } public override SiteMapNode GetParentNode(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); BuildSiteMap(); SiteMapNode parent = (SiteMapNode)ParentNodeTable[node]; if (parent == null) { // Try to find the original node in the table using the key SiteMapNode fallbackNode = (SiteMapNode)KeyTable[node.Key]; if (fallbackNode != null) { parent = (SiteMapNode)ParentNodeTable[fallbackNode]; } } // Try the parent providers. if (parent == null && ParentProvider != null) { parent = ParentProvider.GetParentNode(node); } return ReturnNodeIfAccessible(parent); } protected internal override void RemoveNode(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); lock (_lock) { SiteMapNode oldParent = (SiteMapNode)ParentNodeTable[node]; if (ParentNodeTable.Contains(node)) ParentNodeTable.Remove(node); if (oldParent != null) { SiteMapNodeCollection collection = (SiteMapNodeCollection)ChildNodeCollectionTable[oldParent]; if (collection != null && collection.Contains(node)) collection.Remove(node); } string url = node.Url; if (url != null && url.Length > 0 && UrlTable.Contains(url)) { UrlTable.Remove(url); } string key = node.Key; if (KeyTable.Contains(key)) { KeyTable.Remove(key); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //Add single node to provider tree and sets the parent-child relation. ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * SimpleSiteMapProvider class definition * * Copyright (c) 2002 Microsoft Corporation */ namespace System.Web { using System; using System.Collections; using System.Collections.Specialized; using System.Globalization; using System.Security.Permissions; using System.Web.UI; using System.Web.Util; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public abstract class StaticSiteMapProvider : SiteMapProvider { // Table maps nodes to their child node collections private Hashtable _childNodeCollectionTable; internal IDictionary ChildNodeCollectionTable { get { if (_childNodeCollectionTable == null) { lock (_lock) { if (_childNodeCollectionTable == null) { _childNodeCollectionTable = new Hashtable(); } } } return _childNodeCollectionTable; } } // Case sensitive table that maps key to sitemap node. private Hashtable _keyTable; internal IDictionary KeyTable { get { if (_keyTable == null) { lock (_lock) { if (_keyTable == null) { _keyTable = new Hashtable(); } } } return _keyTable; } } // Table maps nodes to their parent nodes private Hashtable _parentNodeTable; internal IDictionary ParentNodeTable { get { if (_parentNodeTable == null) { lock (_lock) { if (_parentNodeTable == null) { _parentNodeTable = new Hashtable(); } } } return _parentNodeTable; } } // Case insensitive table that maps url to sitemap node. private Hashtable _urlTable; internal IDictionary UrlTable { get { if (_urlTable == null) { lock (_lock) { if (_urlTable == null) { _urlTable = new Hashtable(StringComparer.OrdinalIgnoreCase); } } } return _urlTable; } } ////// protected internal override void AddNode(SiteMapNode node, SiteMapNode parentNode) { if (node == null) { throw new ArgumentNullException("node"); } lock (_lock) { bool validUrl = false; string url = node.Url; if (!String.IsNullOrEmpty(url)) { if (HttpRuntime.AppDomainAppVirtualPath != null) { if (!UrlPath.IsAbsolutePhysicalPath(url)) { url = UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, url); // Normalize url url = UrlPath.MakeVirtualPathAppAbsolute(url); } if (UrlTable[url] != null) throw new InvalidOperationException( SR.GetString(SR.XmlSiteMapProvider_Multiple_Nodes_With_Identical_Url, url)); } validUrl = true; } String key = node.Key; Debug.Assert(key != null); if (KeyTable.Contains(key)) { throw new InvalidOperationException( SR.GetString(SR.XmlSiteMapProvider_Multiple_Nodes_With_Identical_Key, key)); } KeyTable[key] = node; if (validUrl) { UrlTable[url] = node; } if (parentNode != null) { ParentNodeTable[node] = parentNode; if (ChildNodeCollectionTable[parentNode] == null) ChildNodeCollectionTable[parentNode] = new SiteMapNodeCollection(); ((SiteMapNodeCollection)ChildNodeCollectionTable[parentNode]).Add(node); } } } public abstract SiteMapNode BuildSiteMap(); // Clear tables protected virtual void Clear() { lock (_lock) { if (_childNodeCollectionTable != null) _childNodeCollectionTable.Clear(); if (_urlTable != null) _urlTable.Clear(); if (_parentNodeTable != null) _parentNodeTable.Clear(); if (_keyTable != null) _keyTable.Clear(); } } // Find sitemapnode in current provider public override SiteMapNode FindSiteMapNodeFromKey(string key) { SiteMapNode result = base.FindSiteMapNodeFromKey(key); if (result == null) { result = (SiteMapNode)KeyTable[key]; } return ReturnNodeIfAccessible(result); } // Find sitemapnode in current provider public override SiteMapNode FindSiteMapNode(string rawUrl) { if (rawUrl == null) throw new ArgumentNullException("rawUrl"); // VSWhidbey 411041. URL needs to be trimmed. rawUrl = rawUrl.Trim(); if (rawUrl.Length == 0) { return null; } // Make sure it is an app absolute url if (UrlPath.IsAppRelativePath(rawUrl)) { rawUrl = UrlPath.MakeVirtualPathAppAbsolute(rawUrl); } BuildSiteMap(); return ReturnNodeIfAccessible((SiteMapNode)UrlTable[rawUrl]); } // Return readonly child node collection public override SiteMapNodeCollection GetChildNodes(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); BuildSiteMap(); SiteMapNodeCollection collection = (SiteMapNodeCollection)ChildNodeCollectionTable[node]; if (collection == null) { SiteMapNode childNodeFromKey = (SiteMapNode)KeyTable[node.Key]; if (childNodeFromKey != null) { collection = (SiteMapNodeCollection)ChildNodeCollectionTable[childNodeFromKey]; } } if (collection != null) { if (!SecurityTrimmingEnabled) { return SiteMapNodeCollection.ReadOnly(collection); } HttpContext context = HttpContext.Current; SiteMapNodeCollection trimmedCollection = new SiteMapNodeCollection(collection.Count); foreach (SiteMapNode subNode in collection) { if (subNode.IsAccessibleToUser(context)) { trimmedCollection.Add(subNode); } } return SiteMapNodeCollection.ReadOnly(trimmedCollection); } return SiteMapNodeCollection.Empty; } public override SiteMapNode GetParentNode(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); BuildSiteMap(); SiteMapNode parent = (SiteMapNode)ParentNodeTable[node]; if (parent == null) { // Try to find the original node in the table using the key SiteMapNode fallbackNode = (SiteMapNode)KeyTable[node.Key]; if (fallbackNode != null) { parent = (SiteMapNode)ParentNodeTable[fallbackNode]; } } // Try the parent providers. if (parent == null && ParentProvider != null) { parent = ParentProvider.GetParentNode(node); } return ReturnNodeIfAccessible(parent); } protected internal override void RemoveNode(SiteMapNode node) { if (node == null) throw new ArgumentNullException("node"); lock (_lock) { SiteMapNode oldParent = (SiteMapNode)ParentNodeTable[node]; if (ParentNodeTable.Contains(node)) ParentNodeTable.Remove(node); if (oldParent != null) { SiteMapNodeCollection collection = (SiteMapNodeCollection)ChildNodeCollectionTable[oldParent]; if (collection != null && collection.Contains(node)) collection.Remove(node); } string url = node.Url; if (url != null && url.Length > 0 && UrlTable.Contains(url)) { UrlTable.Remove(url); } string key = node.Key; if (KeyTable.Contains(key)) { KeyTable.Remove(key); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.Add single node to provider tree and sets the parent-child relation. ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ArgumentException.cs
- MethodCallConverter.cs
- ConfigurationPermission.cs
- VirtualizedCellInfoCollection.cs
- ResourceManager.cs
- WindowsStartMenu.cs
- AttributeQuery.cs
- SchemaElementLookUpTable.cs
- ControlIdConverter.cs
- QilBinary.cs
- SessionStateModule.cs
- StandardBindingElementCollection.cs
- ThreadAbortException.cs
- TraceShell.cs
- DisplayNameAttribute.cs
- CommentEmitter.cs
- HtmlDocument.cs
- Misc.cs
- IdentityModelStringsVersion1.cs
- StringDictionary.cs
- bidPrivateBase.cs
- AddingNewEventArgs.cs
- UICuesEvent.cs
- XamlTypeMapper.cs
- XmlSchemaExporter.cs
- OnOperation.cs
- LayoutTable.cs
- PaintValueEventArgs.cs
- PassportAuthentication.cs
- BulletedListEventArgs.cs
- SmiTypedGetterSetter.cs
- LinkLabelLinkClickedEvent.cs
- EventProvider.cs
- FunctionUpdateCommand.cs
- arc.cs
- SQLBytes.cs
- TextTreeDeleteContentUndoUnit.cs
- XmlSchemaExporter.cs
- DataSourceHelper.cs
- InputBindingCollection.cs
- Bits.cs
- MbpInfo.cs
- DefaultBindingPropertyAttribute.cs
- CopyAction.cs
- FontDialog.cs
- BuildProviderCollection.cs
- LogicalChannelCollection.cs
- RenderContext.cs
- NullableFloatAverageAggregationOperator.cs
- IISMapPath.cs
- ColumnHeader.cs
- PackagePartCollection.cs
- NotCondition.cs
- FigureParagraph.cs
- CustomAttributeFormatException.cs
- PixelShader.cs
- CryptoConfig.cs
- OperationFormatStyle.cs
- PathTooLongException.cs
- RunClient.cs
- VisualStyleInformation.cs
- EastAsianLunisolarCalendar.cs
- xdrvalidator.cs
- EditorPartChrome.cs
- Viewport3DVisual.cs
- ClientFormsIdentity.cs
- BaseValidatorDesigner.cs
- HttpCacheVary.cs
- PropertyConverter.cs
- ConfigUtil.cs
- SinglePageViewer.cs
- RelatedView.cs
- ProgressBar.cs
- ControlFilterExpression.cs
- StringWriter.cs
- ByteArrayHelperWithString.cs
- ProfileInfo.cs
- CodeSnippetCompileUnit.cs
- WebScriptEnablingBehavior.cs
- Int32Rect.cs
- ConfigurationManagerInternalFactory.cs
- TimeSpanStorage.cs
- StaticTextPointer.cs
- odbcmetadatacolumnnames.cs
- SchemaCollectionCompiler.cs
- ACL.cs
- TextBoxBase.cs
- CryptoStream.cs
- QueuePathDialog.cs
- DictionarySectionHandler.cs
- FtpRequestCacheValidator.cs
- ByteRangeDownloader.cs
- BoundColumn.cs
- PerformanceCounterPermissionEntryCollection.cs
- NetworkInterface.cs
- TraceInternal.cs
- ProtocolsConfiguration.cs
- AspNetHostingPermission.cs
- ConnectionPoint.cs
- WebPartChrome.cs