示例#1
0
        public static void SetParentLinkForChildren <T>(this IGuidTreeItemGeneric <T> guidTreeItem) where T : class, IGuidTreeItemGeneric <T>
        {
            if (guidTreeItem.Children == null)
            {
                return;
            }

            foreach (var child in guidTreeItem.Children)
            {
                child.Parent = guidTreeItem;
                child.UpdateAncestry();

                //Recurse
                child.SetParentLinkForChildren();
            }
        }
示例#2
0
        public static string GetAncestry <T>(this IGuidTreeItemGeneric <T> guidTreeItem, bool usePopulatedParentIfPossible = false)
        {
            if (usePopulatedParentIfPossible && guidTreeItem.Parent != null && guidTreeItem.Parent.Ancestry != null)
            {
                return(guidTreeItem.Parent.Ancestry + guidTreeItem.Id);
            }

            var ancestry     = new List <IGuidTreeItemGeneric <T> >();
            var currentStage = guidTreeItem;

            while (currentStage != null)
            {
                if (ancestry.Contains(currentStage))
                {
                    throw new StackOverflowException("The current tree structure contains a loop");
                }

                ancestry.Add(currentStage);
                currentStage = currentStage.Parent;
            }

            return(BuildAcestryString(ancestry));
        }
示例#3
0
 public static void UpdateAncestry <T>(this IGuidTreeItemGeneric <T> guidTreeItem, bool usePopulatedParentIfPossible = false)
 {
     guidTreeItem.Ancestry = guidTreeItem.GetAncestry(usePopulatedParentIfPossible);
 }
示例#4
0
 public static int GetTreeLevel <T>(this IGuidTreeItemGeneric <T> guidTreeItem)
 {
     return(guidTreeItem.Ancestry.Length / Guid.Empty.ToString().Length);
 }