private async Task AddChildNode( TreeNode <NavigationNode> node, XElement xmlNode, NavigationTreeBuilderService service ) { NavigationNode navNode = BuildNavNode(xmlNode, service); TreeNode <NavigationNode> navNodeT = node.AddChild(navNode); foreach (XElement childrenNode in xmlNode.Elements(XName.Get("Children"))) { foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) { var childBuilder = GetNodeBuilderName(childNode); if (string.IsNullOrEmpty(childBuilder)) { await AddChildNode(navNodeT, childNode, service).ConfigureAwait(false); //recursion } else { var appendToBuilderNode = AppendToBuilderNode(childNode); var childTreeRoot = await service.GetTree(childBuilder).ConfigureAwait(false); //if(appendToBuilderNode) //{ //} //else //{ if (childTreeRoot.Value.ChildContainerOnly) { foreach (var subChild in childTreeRoot.Children) { navNodeT.AddChild(subChild); } } else { navNodeT.AddChild(childTreeRoot); } //} } } } }
public async Task <IViewComponentResult> InvokeAsync(string viewName, string filterName, string startingNodeKey) { var rootNode = await builder.GetTree(); var urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccesor.ActionContext); NavigationViewModel model = new NavigationViewModel( startingNodeKey, filterName, Request.HttpContext, urlHelper, rootNode, permissionResolvers, nodeFinders, prefixProvider.GetPrefix(), log); return(View(viewName, model)); }
public async Task <TreeNode <NavigationNode> > FromXml( XDocument xml, NavigationTreeBuilderService service ) { if (xml.Root.Name != "NavNode") { throw new ArgumentException("Expected NavNode"); } TreeNode <NavigationNode> treeRoot; var builderName = GetNodeBuilderName(xml.Root); if (string.IsNullOrEmpty(builderName)) { NavigationNode rootNav = BuildNavNode(xml.Root, service); treeRoot = new TreeNode <NavigationNode>(rootNav); } else { var otherBuilderRoot = await service.GetTree(builderName).ConfigureAwait(false); if (otherBuilderRoot.Value.ChildContainerOnly) { NavigationNode rootNav = BuildNavNode(xml.Root, service); treeRoot = new TreeNode <NavigationNode>(rootNav); foreach (var firstChild in otherBuilderRoot.Children) { treeRoot.AddChild(firstChild); } } else { treeRoot = otherBuilderRoot; } } var childrenNode = xml.Root.Elements(XName.Get("Children")); if (childrenNode != null) { foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) { var childBuilder = GetNodeBuilderName(childNode); if (string.IsNullOrEmpty(childBuilder)) { await AddChildNode(treeRoot, childNode, service).ConfigureAwait(false); } else { var appendToBuilderNode = AppendToBuilderNode(childNode); var childTreeRoot = await service.GetTree(childBuilder).ConfigureAwait(false); if (appendToBuilderNode) { var builderNode = BuildNavNode(childNode, service); var bt = treeRoot.AddChild(builderNode); foreach (var subChild in childTreeRoot.Children) { bt.AddChild(subChild); } } else { if (childTreeRoot.Value.ChildContainerOnly) { foreach (var subChild in childTreeRoot.Children) { treeRoot.AddChild(subChild); } } else { treeRoot.AddChild(childTreeRoot); } } } } } //foreach (XElement childrenNode in xml.Root.Elements(XName.Get("Children"))) //{ // foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) // { // var childBuilder = GetNodeBuilderName(childNode); // if(string.IsNullOrEmpty(childBuilder)) // { // await AddChildNode(treeRoot, childNode, service).ConfigureAwait(false); // } // else // { // var child = await service.GetTree(childBuilder).ConfigureAwait(false); // if(child.Value.ChildContainerOnly) // { // foreach(var subChild in child.Children) // { // treeRoot.AddChild(subChild); // } // } // else // { // treeRoot.AddChild(child); // } // } // } //} return(treeRoot); }
private async Task AddChildNode( TreeNode<NavigationNode> node, XElement xmlNode, NavigationTreeBuilderService service ) { NavigationNode navNode = BuildNavNode(xmlNode, service); TreeNode<NavigationNode> navNodeT = node.AddChild(navNode); foreach (XElement childrenNode in xmlNode.Elements(XName.Get("Children"))) { foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) { var childBuilder = GetNodeBuilderName(childNode); if (string.IsNullOrEmpty(childBuilder)) { await AddChildNode(navNodeT, childNode, service).ConfigureAwait(false); //recursion } else { var child = await service.GetTree(childBuilder).ConfigureAwait(false); if (child.Value.ChildContainerOnly) { foreach (var subChild in child.Children) { navNodeT.AddChild(subChild); } } else { navNodeT.AddChild(child); } } } } }
public async Task<TreeNode<NavigationNode>> FromXml( XDocument xml, NavigationTreeBuilderService service ) { if(xml.Root.Name != "NavNode") { throw new ArgumentException("Expected NavNode"); } TreeNode<NavigationNode> treeRoot; var builderName = GetNodeBuilderName(xml.Root); if (string.IsNullOrEmpty(builderName)) { NavigationNode rootNav = BuildNavNode(xml.Root, service); treeRoot = new TreeNode<NavigationNode>(rootNav); } else { var otherBuilderRoot = await service.GetTree(builderName).ConfigureAwait(false); if(otherBuilderRoot.Value.ChildContainerOnly) { NavigationNode rootNav = BuildNavNode(xml.Root, service); treeRoot = new TreeNode<NavigationNode>(rootNav); foreach(var firstChild in otherBuilderRoot.Children) { treeRoot.AddChild(firstChild); } } else { treeRoot = otherBuilderRoot; } } var childrenNode = xml.Root.Elements(XName.Get("Children")); if (childrenNode != null) { foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) { var childBuilder = GetNodeBuilderName(childNode); if (string.IsNullOrEmpty(childBuilder)) { await AddChildNode(treeRoot, childNode, service).ConfigureAwait(false); } else { var child = await service.GetTree(childBuilder).ConfigureAwait(false); if (child.Value.ChildContainerOnly) { foreach (var subChild in child.Children) { treeRoot.AddChild(subChild); } } else { treeRoot.AddChild(child); } } } } //foreach (XElement childrenNode in xml.Root.Elements(XName.Get("Children"))) //{ // foreach (XElement childNode in childrenNode.Elements(XName.Get("NavNode"))) // { // var childBuilder = GetNodeBuilderName(childNode); // if(string.IsNullOrEmpty(childBuilder)) // { // await AddChildNode(treeRoot, childNode, service).ConfigureAwait(false); // } // else // { // var child = await service.GetTree(childBuilder).ConfigureAwait(false); // if(child.Value.ChildContainerOnly) // { // foreach(var subChild in child.Children) // { // treeRoot.AddChild(subChild); // } // } // else // { // treeRoot.AddChild(child); // } // } // } //} return treeRoot; }