Exemplo n.º 1
0
        private SiteMapNode CheckExNodeFromScanAsPartialProvider(SiteMapNodeEx nodeEx, string[] segments)
        {
            var partialProviderExtent = nodeEx.Get <SiteMapNodePartialProviderExtent>();

            if (partialProviderExtent == null)
            {
                return(null);
            }
            var    newProvider = GetProviderFromName(partialProviderExtent.ProviderID);
            string queryPart;
            var    tightestSegments = GetUrlSegments(nodeEx.Url, out queryPart);
            var    partialProvider  = new PartialProvider {
                Value = tightestSegments, SiteMapProvider = newProvider, NodeEx = nodeEx
            };

            {
                _partialProviderRwLock.EnterWriteLock();
                if (_partialProviders == null)
                {
                    _partialProviders = new List <PartialProvider>();
                }
                _partialProviders.Add(partialProvider);
                _partialProviderRwLock.ExitWriteLock();
            }
            return(DelegateFindSiteMapNodeToChildProvider(partialProvider, segments, tightestSegments));
        }
Exemplo n.º 2
0
        private static SiteMapNode DelegateFindSiteMapNodeToChildProvider(PartialProvider provider, string[] segments, string[] tightestSegments)
        {
            var siteMapProvider = provider.SiteMapProvider;

            if (siteMapProvider == null)
            {
                return(provider.NodeEx);
            }
            var    tightestSegmentsLength = tightestSegments.Length;
            string newUrl = "/" + string.Join("/", segments, tightestSegmentsLength, segments.Length - tightestSegmentsLength);

            return(siteMapProvider.FindSiteMapNode(newUrl));
        }
Exemplo n.º 3
0
        // pulled here for optimizing
        #region TryGetTightestMatch (optimizing)
        private static bool TryGetTightestMatch(List <PartialProvider> source, string[] segments, out PartialProvider tightestValue)
        {
            tightestValue = null;
            int tightestValuesLength = 0;

            foreach (var item in source)
            {
                var itemValues = item.Value;
                int itemValuesLength;
                if (Match(itemValues, segments) && (itemValuesLength = itemValues.Length) > tightestValuesLength)
                {
                    tightestValue        = item;
                    tightestValuesLength = itemValuesLength;
                }
            }
            return(tightestValuesLength > 0);
        }