Inheritance: INavigationNode, INavigationNodeRenderSettings, INavigationNodeDesignMeta
        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;

        }
示例#2
0
        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("excludeFromSearchSiteMap");
            if (a != null)
            {
                navNode.ExcludeFromSearchSiteMap = 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);
        }
示例#3
0
        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 string ResolveUrl(NavigationNode node, IUrlHelper urlHelper)
        {
            if (node.HideFromAnonymous) return string.Empty;

            // if url is already fully resolved just return it
            if (node.Url.StartsWith("http")) return node.Url;
            
            string urlToUse = string.Empty;
            if ((node.Action.Length > 0) && (node.Controller.Length > 0))
            { 
                urlToUse = urlHelper.Action(node.Action, node.Controller);
            }
            else if (node.NamedRoute.Length > 0)
            {
                urlToUse = urlHelper.RouteUrl(node.NamedRoute);
            }
            
            if (string.IsNullOrEmpty(urlToUse)) urlToUse = node.Url; 

            if (urlToUse.StartsWith("http")) return urlToUse;

            return BaseUrl + urlToUse;
        }
        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;
        }
        private NavigationNode BuildNavNode(XElement xmlNode)
        {
            NavigationNode navNode = new NavigationNode();

            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("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();
            }

            a = xmlNode.Attribute("isRootNode");
            if (a != null) { navNode.IsRootNode = 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; }

            
            
            return navNode;
        }
#pragma warning restore 1998

        private TreeNode<NavigationNode> BuildTree()
        {
            
            NavigationNode home = new NavigationNode();
            home.Key = "Home";
            home.ParentKey = "RootNode";
            home.Controller = "Home";
            home.Action = "Index";
            home.Text = "Home";
            home.Url = home.ResolveUrl();
            home.IsRootNode = true;
            TreeNode<NavigationNode> treeRoot = new TreeNode<NavigationNode>(home);

            NavigationNode about = new NavigationNode();
            about.Key = "About";
            about.ParentKey = "RootNode";
            about.Controller = "Home";
            about.Action = "About";
            about.Text = "About";
            about.Url = about.ResolveUrl();
            treeRoot.AddChild(about);

            NavigationNode contact = new NavigationNode();
            contact.Key = "Contact";
            contact.ParentKey = "RootNode";
            contact.Controller = "Home";
            contact.Action = "Contact";
            contact.Text = "Contact";
            contact.Url = contact.ResolveUrl();
            treeRoot.AddChild(contact);


            NavigationNode siteAdmin = new NavigationNode();
            siteAdmin.Key = "SiteAdmin";
            siteAdmin.ParentKey = "RootNode";
            siteAdmin.Controller = "SiteAdmin";
            siteAdmin.Action = "Index";
            siteAdmin.Text = "Administration";
            siteAdmin.ViewRoles = "Admins,Content Administrators";
            siteAdmin.Url = siteAdmin.ResolveUrl();
            TreeNode<NavigationNode> adminRoot = treeRoot.AddChild(siteAdmin);

            NavigationNode siteSettings = new NavigationNode();
            siteSettings.Key = "BasicSettings";
            siteSettings.ParentKey = "SiteAdmin";
            siteSettings.Controller = "SiteAdmin";
            siteSettings.Action = "SiteInfo";
            siteSettings.Text = "Site Settings";
            siteSettings.ViewRoles = "Admins,Content Administrators";
            siteSettings.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree; 
            siteSettings.PreservedRouteParameters = "siteGuid";
            siteSettings.Url = siteSettings.ResolveUrl();
            TreeNode<NavigationNode> siteT = adminRoot.AddChild(siteSettings);

            NavigationNode hosts = new NavigationNode();
            hosts.Key = "SiteHostMappings";
            hosts.ParentKey = "BasicSettings";
            hosts.Controller = "SiteAdmin";
            hosts.Action = "SiteHostMappings";
            hosts.Text = "Domain Mappings";
            hosts.ViewRoles = "Admins,Content Administrators";
            hosts.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            hosts.PreservedRouteParameters = "siteGuid";
            hosts.Url = hosts.ResolveUrl();
            TreeNode<NavigationNode> hostsT = siteT.AddChild(hosts);

            NavigationNode siteList = new NavigationNode();
            siteList.Key = "SiteList";
            siteList.ParentKey = "SiteAdmin";
            siteList.Controller = "SiteAdmin";
            siteList.Action = "SiteList";
            siteList.Text = "SiteList";
            siteList.ViewRoles = "ServerAdmins";
            siteList.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            siteList.Url = siteList.ResolveUrl();
            TreeNode<NavigationNode> siteListT = adminRoot.AddChild(siteList);

            NavigationNode newSite = new NavigationNode();
            newSite.Key = "NewSite";
            newSite.ParentKey = "SiteList";
            newSite.Controller = "SiteAdmin";
            newSite.Action = "NewSite";
            newSite.Text = "NewSite";
            newSite.ViewRoles = "ServerAdmins";
            newSite.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            newSite.Url = newSite.ResolveUrl();
            TreeNode<NavigationNode> newSiteT = siteListT.AddChild(newSite);


            NavigationNode userAdmin = new NavigationNode();
            userAdmin.Key = "UserAdmin";
            userAdmin.ParentKey = "SiteAdmin";
            userAdmin.Controller = "UserAdmin";
            userAdmin.Action = "Index";
            userAdmin.Text = "UserManagement";
            userAdmin.ViewRoles = "ServerAdmins";
            userAdmin.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            userAdmin.Url = userAdmin.ResolveUrl();
            TreeNode<NavigationNode> userAdminT = adminRoot.AddChild(userAdmin);

            NavigationNode newUser = new NavigationNode();
            newUser.Key = "UserEdit";
            newUser.ParentKey = "UserAdmin";
            newUser.Controller = "UserAdmin";
            newUser.Action = "UserEdit";
            newUser.Text = "NewUser";
            newUser.ViewRoles = "Admins";
            newUser.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            newUser.Url = newUser.ResolveUrl();
            TreeNode<NavigationNode> newUserT = userAdminT.AddChild(newUser);

            NavigationNode userSearch = new NavigationNode();
            userSearch.Key = "UserSearch";
            userSearch.ParentKey = "UserAdmin";
            userSearch.Controller = "UserAdmin";
            userSearch.Action = "Search";
            userSearch.Text = "User Search";
            userSearch.ViewRoles = "Admins";
            userSearch.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            userSearch.Url = userSearch.ResolveUrl();
            TreeNode<NavigationNode> userSearchT = userAdminT.AddChild(userSearch);

            NavigationNode ipSearch = new NavigationNode();
            ipSearch.Key = "IpSearch";
            ipSearch.ParentKey = "UserAdmin";
            ipSearch.Controller = "UserAdmin";
            ipSearch.Action = "IpSearch";
            ipSearch.Text = "IpSearch";
            ipSearch.ViewRoles = "Admins";
            ipSearch.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            ipSearch.Url = ipSearch.ResolveUrl();
            TreeNode<NavigationNode> ipSearchT = userAdminT.AddChild(ipSearch);


            NavigationNode roleAdmin = new NavigationNode();
            roleAdmin.Key = "RoleAdmin";
            roleAdmin.ParentKey = "SiteAdmin";
            roleAdmin.Controller = "RoleAdmin";
            roleAdmin.Action = "Index";
            roleAdmin.Text = "RoleManagement";
            roleAdmin.ViewRoles = "Admins";
            roleAdmin.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            roleAdmin.Url = roleAdmin.ResolveUrl();
            TreeNode<NavigationNode> roleAdminT = adminRoot.AddChild(roleAdmin);

            // TODO: this one should not be in main or child menus
            // we can't have just one url since it depends on roleId
            // but we do want it to appear ar the active breadcrumb
            NavigationNode roleMembers = new NavigationNode();
            roleMembers.Key = "RoleMembers";
            roleMembers.ParentKey = "RoleAdmin";
            roleMembers.Controller = "RoleAdmin";
            roleMembers.Action = "RoleMembers";
            roleMembers.Text = "RoleMembers";
            roleMembers.ViewRoles = "Admins";
            roleMembers.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            roleMembers.Url = roleMembers.ResolveUrl();
            roleMembers.PreservedRouteParameters = "roleId,pageNumber,pageSize";
            TreeNode<NavigationNode> roleMembersT = roleAdminT.AddChild(roleMembers);

            NavigationNode roleEdit = new NavigationNode();
            roleEdit.Key = "RoleEdit";
            roleEdit.ParentKey = "RoleAdmin";
            roleEdit.Controller = "RoleAdmin";
            roleEdit.Action = "RoleEdit";
            roleEdit.Text = "NewRole";
            roleEdit.ViewRoles = "Admins";
            roleEdit.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            roleEdit.Url = roleEdit.ResolveUrl();
            roleEdit.PreservedRouteParameters = "roleIde";
            TreeNode<NavigationNode> roleEditT = roleAdminT.AddChild(roleEdit);


            NavigationNode coreData = new NavigationNode();
            coreData.Key = "CoreData";
            coreData.ParentKey = "SiteAdmin";
            coreData.Controller = "CoreData";
            coreData.Action = "Index";
            coreData.Text = "CoreData";
            coreData.ViewRoles = "ServerAdmins";
            coreData.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            coreData.Url = coreData.ResolveUrl();
            TreeNode<NavigationNode> coreDataT = adminRoot.AddChild(coreData);

            NavigationNode currencyList = new NavigationNode();
            currencyList.Key = "CurrencyList";
            currencyList.ParentKey = "SiteAdmin";
            currencyList.Controller = "CoreData";
            currencyList.Action = "CurrencyList";
            currencyList.Text = "CurrencyAdministration";
            currencyList.ViewRoles = "ServerAdmins";
            currencyList.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            currencyList.Url = currencyList.ResolveUrl();
            TreeNode<NavigationNode> currencyListT = coreDataT.AddChild(currencyList);

            //TODO: again I think we just want to be a breadcrumb here
            NavigationNode currencyEdit = new NavigationNode();
            currencyEdit.Key = "CurrencyEdit";
            currencyEdit.ParentKey = "CurrencyList";
            currencyEdit.Controller = "CoreData";
            currencyEdit.Action = "CurrencyEdit";
            currencyEdit.Text = "NewCurrency";
            currencyEdit.ViewRoles = "ServerAdmins";
            currencyEdit.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            currencyEdit.Url = currencyEdit.ResolveUrl();
            currencyEdit.PreservedRouteParameters = "currencyGuid";
            TreeNode<NavigationNode> currencyEditT = currencyListT.AddChild(currencyEdit);


            NavigationNode countryList = new NavigationNode();
            countryList.Key = "CountryListPage";
            countryList.ParentKey = "SiteAdmin";
            countryList.Controller = "CoreData";
            countryList.Action = "CountryListPage";
            countryList.Text = "CountryStateAdministration";
            countryList.ViewRoles = "ServerAdmins";
            countryList.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            countryList.Url = countryList.ResolveUrl();
            TreeNode<NavigationNode> countryListT = coreDataT.AddChild(countryList);

            NavigationNode countryEdit = new NavigationNode();
            countryEdit.Key = "CountryEdit";
            countryEdit.ParentKey = "CountryListPage";
            countryEdit.Controller = "CoreData";
            countryEdit.Action = "CountryEdit";
            countryEdit.Text = "NewCountry";
            countryEdit.ViewRoles = "ServerAdmins";
            countryEdit.ComponentVisibility = NamedNavigationFilters.Breadcrumbs + "," + NamedNavigationFilters.ChildTree;
            countryEdit.Url = countryEdit.ResolveUrl();
            countryEdit.PreservedRouteParameters = "guid";
            TreeNode<NavigationNode> countryEditT = countryListT.AddChild(countryEdit);

            NavigationNode stateList = new NavigationNode();
            stateList.Key = "StateListPage";
            stateList.ParentKey = "CountryListPage";
            stateList.Controller = "CoreData";
            stateList.Action = "StateListPage";
            stateList.Text = "States";
            stateList.ViewRoles = "ServerAdmins";
            stateList.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            stateList.Url = stateList.ResolveUrl();
            stateList.PreservedRouteParameters = "countryGuid";
            TreeNode<NavigationNode> stateListT = countryListT.AddChild(stateList);

            NavigationNode stateEdit = new NavigationNode();
            stateEdit.Key = "StateEdit";
            stateEdit.ParentKey = "StateListPage";
            stateEdit.Controller = "CoreData";
            stateEdit.Action = "StateEdit";
            stateEdit.Text = "New State";
            stateEdit.ViewRoles = "ServerAdmins";
            stateEdit.ComponentVisibility = NamedNavigationFilters.Breadcrumbs;
            stateEdit.Url = stateEdit.ResolveUrl();
            stateEdit.PreservedRouteParameters = "countryGuid";
            TreeNode<NavigationNode> stateEditT = stateListT.AddChild(stateEdit);



            //string serialized = JsonConvert.SerializeObject(treeRoot,Formatting.Indented);


            return treeRoot;
        }