private async Task <TreeNode <NavigationNode> > BuildTreeInternal(NavigationTreeBuilderService service) { string filePath = ResolveFilePath(); if (!File.Exists(filePath)) { log.LogError("unable to build navigation tree, could not find the file " + filePath); NavigationNode rootNav = new NavigationNode(); rootNav.Key = "filenotfound"; rootNav.IsRootNode = true; rootNav.Text = filePath + " not found"; rootNav.Url = "/"; var treeRoot = new TreeNode <NavigationNode>(rootNav); return(treeRoot); } string xml; using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { using (StreamReader streamReader = new StreamReader(fileStream)) { xml = await streamReader.ReadToEndAsync(); } } XDocument doc = XDocument.Parse(xml); NavigationTreeXmlConverter converter = new NavigationTreeXmlConverter(); TreeNode <NavigationNode> result = await converter.FromXml(doc, service).ConfigureAwait(false); return(result); }
public NavigationViewComponent( NavigationTreeBuilderService siteMapTreeBuilder, IEnumerable <INavigationNodePermissionResolver> permissionResolvers, IEnumerable <IFindCurrentNode> nodeFinders, IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionContextAccesor, INodeUrlPrefixProvider prefixProvider, ILogger <NavigationViewComponent> logger) { builder = siteMapTreeBuilder; this.permissionResolvers = permissionResolvers; this.nodeFinders = nodeFinders; this.urlHelperFactory = urlHelperFactory; this.actionContextAccesor = actionContextAccesor; if (prefixProvider == null) { this.prefixProvider = new DefaultNodeUrlPrefixProvider(); } else { this.prefixProvider = prefixProvider; } log = logger; }
private NavigationNode BuildNavNode( XElement xmlNode, NavigationTreeBuilderService service ) { NavigationNode navNode = new NavigationNode(); //var tb = xmlNode.Attribute("TreeBuilderName"); //if (tb != null) //{ // return await service.GetTree(tb.Value).ConfigureAwait(false) //} var a = xmlNode.Attribute("key"); if (a != null) { navNode.Key = a.Value; } a = xmlNode.Attribute("parentKey"); if (a != null) { navNode.ParentKey = a.Value; } a = xmlNode.Attribute("controller"); if (a != null) { navNode.Controller = a.Value; } a = xmlNode.Attribute("action"); if (a != null) { navNode.Action = a.Value; } a = xmlNode.Attribute("area"); if (a != null) { navNode.Area = a.Value; } a = xmlNode.Attribute("namedRoute"); if (a == null) { a = xmlNode.Attribute("named-route"); //this is not consistent was a mistake } if (a != null) { navNode.NamedRoute = a.Value; } a = xmlNode.Attribute("text"); if (a != null) { navNode.Text = a.Value; } a = xmlNode.Attribute("title"); if (a != null) { navNode.Title = a.Value; } a = xmlNode.Attribute("url"); if (a != null) { navNode.Url = a.Value; } else { navNode.Url = navNode.ResolveUrl(); // this smells bad } a = xmlNode.Attribute("isRootNode"); if (a != null) { navNode.IsRootNode = Convert.ToBoolean(a.Value); } a = xmlNode.Attribute("hideFromAuthenticated"); if (a != null) { navNode.HideFromAuthenticated = Convert.ToBoolean(a.Value); } a = xmlNode.Attribute("hideFromAnonymous"); if (a != null) { navNode.HideFromAnonymous = Convert.ToBoolean(a.Value); } //a = xmlNode.Attribute("includeAmbientValuesInUrl"); //if (a != null) { navNode.IncludeAmbientValuesInUrl = Convert.ToBoolean(a.Value); } //a = xmlNode.Attribute("resourceName"); //if (a != null) { navNode.ResourceName = a.Value; } //a = xmlNode.Attribute("resourceTextKey"); //if (a != null) { navNode.ResourceTextKey = a.Value; } //a = xmlNode.Attribute("resourceTitleKey"); //if (a != null) { navNode.ResourceTitleKey = a.Value; } a = xmlNode.Attribute("preservedRouteParameters"); if (a != null) { navNode.PreservedRouteParameters = a.Value; } a = xmlNode.Attribute("componentVisibility"); if (a != null) { navNode.ComponentVisibility = a.Value; } a = xmlNode.Attribute("viewRoles"); if (a != null) { navNode.ViewRoles = a.Value; } a = xmlNode.Attribute("customData"); if (a != null) { navNode.CustomData = a.Value; } a = xmlNode.Attribute("isClickable"); if (a != null) { navNode.IsClickable = Convert.ToBoolean(a.Value); } a = xmlNode.Attribute("iconCssClass"); if (a != null) { navNode.IconCssClass = a.Value; } a = xmlNode.Attribute("cssClass"); if (a != null) { navNode.CssClass = a.Value; } a = xmlNode.Attribute("menuDescription"); if (a != null) { navNode.MenuDescription = a.Value; } a = xmlNode.Attribute("target"); if (a != null) { navNode.Target = a.Value; } var da = xmlNode.Element(XName.Get("DataAttributes")); if (da != null) { foreach (XElement childNode in da.Elements(XName.Get("DataAttribute"))) { var key = childNode.Attribute("attribute"); var val = childNode.Attribute("value"); if ((key != null) && (val != null)) { var att = new DataAttribute(); att.Attribute = key.Value; att.Value = val.Value; navNode.DataAttributes.Add(att); } } } return(navNode); }
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); }