Go to the documentation of this file.00001 using System.Collections.Generic;
00002 using System;
00003
00004 namespace N2.Collections
00005 {
00009 [Obsolete("Use hierarchy builders and hierarchy nodes")]
00010 public class ItemHierarchyNavigator : IHierarchyNavigator<ContentItem>
00011 {
00012 private readonly HierarchyNode<ContentItem> currentNode = null;
00013
00014 public ItemHierarchyNavigator(HierarchyNode<ContentItem> currentNode)
00015 {
00016 this.currentNode = currentNode;
00017 }
00018
00019 public ItemHierarchyNavigator(HierarchyBuilder builder, params ItemFilter[] filters)
00020 {
00021 currentNode = builder.Build(filters);
00022 }
00023
00024 public ItemHierarchyNavigator(HierarchyBuilder builder)
00025 {
00026 currentNode = builder.Build();
00027 }
00028
00029 public HierarchyNode<ContentItem> CurrentNode
00030 {
00031 get { return currentNode; }
00032 }
00033
00034 public ItemHierarchyNavigator GetRootHierarchy()
00035 {
00036 return new ItemHierarchyNavigator(GetRootNode());
00037 }
00038
00039 public HierarchyNode<ContentItem> GetRootNode()
00040 {
00041 HierarchyNode<ContentItem> last = currentNode;
00042 while (last.Parent != null)
00043 last = last.Parent;
00044 return last;
00045 }
00046
00047 public IEnumerable<ContentItem> EnumerateAllItems()
00048 {
00049 HierarchyNode<ContentItem> rootNode = GetRootNode();
00050 return EnumerateItemsRecursive(rootNode);
00051 }
00052
00053 public IEnumerable<ContentItem> EnumerateChildItems()
00054 {
00055 return EnumerateItemsRecursive(currentNode);
00056 }
00057
00058 protected virtual IEnumerable<ContentItem> EnumerateItemsRecursive(HierarchyNode<ContentItem> node)
00059 {
00060 yield return node.Current;
00061 foreach (HierarchyNode<ContentItem> childNode in node.Children)
00062 {
00063 foreach (ContentItem childItem in EnumerateItemsRecursive(childNode))
00064 {
00065 yield return childItem;
00066 }
00067 }
00068 }
00069
00070 #region IHierarchyItem<ContentItem> Members
00071
00072 public IHierarchyNavigator<ContentItem> Parent
00073 {
00074 get
00075 {
00076 if (currentNode.Parent != null)
00077 return new ItemHierarchyNavigator(currentNode.Parent);
00078 else
00079 return null;
00080 }
00081 }
00082
00083 public IEnumerable<IHierarchyNavigator<ContentItem>> Children
00084 {
00085 get
00086 {
00087 foreach (HierarchyNode<ContentItem> childNode in currentNode.Children)
00088 {
00089 yield return new ItemHierarchyNavigator(childNode);
00090 }
00091 }
00092 }
00093
00094 public ContentItem Current
00095 {
00096 get { return currentNode.Current; }
00097 }
00098
00099 public bool HasChildren
00100 {
00101 get { return currentNode.Children.Count > 0; }
00102 }
00103
00104 #endregion
00105 }
00106 }