コード例 #1
0
        internal static ISitemapItem GetEntireTree(Sdl.Tridion.Api.Client.ApiClient client, ContentNamespace ns, int pubId, int requestLevels)
        {
            ISitemapItem root = client.GetSitemap(ns, pubId, requestLevels, null);

            if (root == null)
            {
                return(null);
            }
            List <ISitemapItem> leafNodes = GetLeafNodes(root);

            while (leafNodes.Count > 0)
            {
                TaxonomySitemapItem node = leafNodes[0] as TaxonomySitemapItem;
                leafNodes.RemoveAt(0);
                if (!node.HasChildNodes.HasValue || !node.HasChildNodes.Value)
                {
                    continue;
                }
                var subtree = client.GetSitemapSubtree(ns, pubId, node.Id, requestLevels, Ancestor.NONE, null);
                if (node.Items == null)
                {
                    node.Items = new List <ISitemapItem>();
                }
                node.Items.AddRange(subtree[0].Items ?? new List <ISitemapItem>());
                leafNodes.AddRange(GetLeafNodes(node));
            }

            return(root);
        }
コード例 #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var result = new TaxonomySitemapItem();

            try
            {
                var target = serializer.Deserialize <Newtonsoft.Json.Linq.JObject>(reader);
                if (target != null)
                {
                    serializer.Populate(target.CreateReader(), result);
                    switch (result.Type)
                    {
                    case "Page":
                        PageSitemapItem pageItem = new PageSitemapItem();
                        serializer.Populate(target.CreateReader(), pageItem);
                        return(pageItem);
                    }
                }
            }
            catch
            {
                // ignore
            }
            return(result);
        }
コード例 #3
0
        internal static SitemapItem Convert(ISitemapItem item)
        {
            if (item == null)
            {
                return(null);
            }
            SitemapItem result = null;

            if (item is TaxonomySitemapItem)
            {
                result = new TaxonomyNode();
            }
            else if (item is PageSitemapItem)
            {
                result = new SitemapItem();
            }
            result.Type          = item.Type;
            result.Title         = item.Title;
            result.Id            = item.Id;
            result.OriginalTitle = item.OriginalTitle;
            if (item.Visible.HasValue)
            {
                result.Visible = item.Visible.Value;
            }
            if (item.PublishedDate != null)
            {
                result.PublishedDate = DateTime.ParseExact(item.PublishedDate, "MM/dd/yyyy HH:mm:ss", null);
            }
            result.Url = item.Url;

            if (!(item is TaxonomySitemapItem))
            {
                return(result);
            }
            TaxonomySitemapItem tsi  = (TaxonomySitemapItem)item;
            TaxonomyNode        node = (TaxonomyNode)result;

            node.Key = tsi.Key;
            node.ClassifiedItemsCount = tsi.ClassifiedItemsCount ?? 0;
            node.Description          = tsi.Description;
            node.HasChildNodes        = tsi.HasChildNodes.HasValue && tsi.HasChildNodes.Value;
            node.IsAbstract           = tsi.Abstract.HasValue && tsi.Abstract.Value;
            if (tsi.Items == null || tsi.Items.Count <= 0)
            {
                return(result);
            }
            foreach (var x in tsi.Items)
            {
                result.Items.Add(Convert(x));
            }
            return(result);
        }
コード例 #4
0
        internal static List <ISitemapItem> GetLeafNodes(ISitemapItem rootNode)
        {
            List <ISitemapItem> leafNodes = new List <ISitemapItem>();

            if (!(rootNode is TaxonomySitemapItem))
            {
                return(leafNodes);
            }
            TaxonomySitemapItem root = (TaxonomySitemapItem)rootNode;

            if (root?.HasChildNodes == null || !root.HasChildNodes.Value)
            {
                return(leafNodes);
            }
            if (root.HasChildNodes.Value && root.Items == null)
            {
                return new List <ISitemapItem> {
                           root
                }
            }
            ;
            foreach (var item in root.Items)
            {
                TaxonomySitemapItem node = null;

                if (item is TaxonomySitemapItem)
                {
                    node = item as TaxonomySitemapItem;
                }
                if (node?.HasChildNodes == null || !node.HasChildNodes.Value)
                {
                    continue;
                }
                if (node.Items == null)
                {
                    leafNodes.Add(node);
                }
                else
                {
                    leafNodes.AddRange(GetLeafNodes(node));
                }
            }
            return(leafNodes);
        }
コード例 #5
0
        internal static void Prune(ISitemapItem root, int currentLevel, int descendantLevels)
        {
            var item = root as TaxonomySitemapItem;
            TaxonomySitemapItem tNode = item;

            if (tNode?.Items == null || tNode.Items.Count <= 0)
            {
                return;
            }
            if (currentLevel < descendantLevels)
            {
                foreach (var n in tNode.Items)
                {
                    Prune(n, currentLevel + 1, descendantLevels);
                }
            }
            else
            {
                tNode.Items.Clear();
            }
        }
コード例 #6
0
 internal static ISitemapItem FindNode(List <ISitemapItem> root, string parentSitemapId)
 {
     foreach (var node in root)
     {
         if (node.Id == parentSitemapId)
         {
             return(node);
         }
         var item = node as TaxonomySitemapItem;
         TaxonomySitemapItem tNode = item;
         if (tNode?.Items == null || tNode.Items.Count <= 0)
         {
             continue;
         }
         var found = FindNode(tNode.Items, parentSitemapId);
         if (found != null)
         {
             return(found);
         }
     }
     return(null);
 }
コード例 #7
0
        internal static List <ISitemapItem> GetEntireTree(Sdl.Tridion.Api.Client.ApiClient client, ContentNamespace ns, int pubId, string parentSitemapId, bool includeAncestors, int requestLevels)
        {
            var rootsItems            = client.GetSitemapSubtree(ns, pubId, parentSitemapId, requestLevels, includeAncestors ? Ancestor.INCLUDE : Ancestor.NONE, null);
            List <ISitemapItem> roots = rootsItems.Cast <ISitemapItem>().ToList();

            if (roots.Count == 0)
            {
                return(new List <ISitemapItem>());
            }
            List <ISitemapItem> tempRoots = new List <ISitemapItem>(roots);
            int index = 0;

            while (index < tempRoots.Count)
            {
                ISitemapItem        root      = tempRoots[index];
                List <ISitemapItem> leafNodes = GetLeafNodes(root);
                foreach (var item in leafNodes)
                {
                    TaxonomySitemapItem n = item as TaxonomySitemapItem;
                    var children          = client.GetSitemapSubtree(ns, pubId, n.Id, requestLevels, Ancestor.NONE, null);
                    if (children == null)
                    {
                        continue;
                    }
                    n.Items = children[0].Items;
                    List <ISitemapItem> leaves = GetLeafNodes(n);
                    if (leaves == null || leaves.Count <= 0)
                    {
                        continue;
                    }
                    tempRoots.AddRange(leaves.OfType <TaxonomySitemapItem>().Select(x => x));
                }
                index++;
            }
            return(roots);
        }