public OrganisedNodeTree(List <Node> filteredNodes, NodeTreeType type) { MainCategories = new List <CategorisedNodes>(); var contextualCat = new CategorisedNodes() { CatergoryName = type.ToString() }; var refilteredNodes = filteredNodes; for (int index = 0; index < refilteredNodes.Count; index++) { var node = refilteredNodes[index]; if (!string.IsNullOrEmpty(node.TreeType) && node.TreeType == type.ToString()) { refilteredNodes.RemoveAt(index); contextualCat.Nodes.Add(node); index--; } } foreach (var node in refilteredNodes) { var nodeMainCat = node.MainCat; var nodeSubCat = node.SubCat; var mainCat = MainCategories.FirstOrDefault(f => f.CatergoryName == nodeMainCat); if (mainCat == null) { mainCat = new CategorisedNodes() { CatergoryName = nodeMainCat }; MainCategories.Add(mainCat); } var subCat = mainCat.SubCategories.FirstOrDefault(s => s.SubCatergoryName == nodeSubCat); if (string.IsNullOrEmpty(nodeSubCat)) { mainCat.Nodes.Add(node); } else if (subCat == null) { subCat = new SubCategorisedNodes() { SubCatergoryName = nodeSubCat }; mainCat.SubCategories.Add(subCat); } if (subCat != null) { subCat.Nodes.Add(node); } } MainCategories = MainCategories.OrderBy(m => m.CatergoryName).ToList(); if (contextualCat.Nodes.Any()) { MainCategories.Insert(0, contextualCat); } var uncategorised = MainCategories.FirstOrDefault(c => c.CatergoryName == "Uncategorised"); if (uncategorised != null) { MainCategories.Remove(uncategorised); MainCategories.Add(uncategorised); } foreach (var c in MainCategories) { c.Nodes = c.Nodes.OrderBy(n => n.Tag).ToList(); c.SubCategories = c.SubCategories.OrderBy(v => v.SubCatergoryName).ToList(); foreach (var x in c.SubCategories) { x.Nodes = x.Nodes.OrderBy(n => n.Tag).ToList(); } } }
public NodeCategoryTreeAttribute(NodeTreeType type) { Tree = type.ToString(); }