/// <summary>
        /// Need to check if the node being requested is a file, if so, return the rules for it, otherwise process as per normal
        /// </summary>
        /// <param name="parentId"></param>
        /// <param name="queryStrings"></param>
        /// <returns></returns>
        protected override UmbracoTreeResult GetTreeData(HiveId parentId, FormCollection queryStrings)
        {
            using (var uow = Hive.CreateReadonly())
            {
                var stylesheet = uow.Repositories.Get <File>(parentId);
                if (!stylesheet.IsContainer)
                {
                    var rules = StylesheetHelper.ParseRules(stylesheet);
                    if (rules.Any())
                    {
                        foreach (var rule in rules)
                        {
                            var hiveId = new HiveId(new Uri(HiveUriRouteMatch), string.Empty, new HiveIdValue(parentId.Value + "/" + rule.Name.Replace(" ", "__s__")));
                            var node   = CreateTreeNode(hiveId,
                                                        null,
                                                        rule.Name,
                                                        Url.GetEditorUrl("EditRule", hiveId, EditorControllerId, BackOfficeRequestContext.RegisteredComponents, BackOfficeRequestContext.Application.Settings),
                                                        false,
                                                        "tree-css-item");
                            node.AddEditorMenuItem <Delete>(this, "deleteUrl", "DeleteRule");
                            NodeCollection.Add(node);
                        }
                    }
                    return(UmbracoTree());
                }
            }

            return(base.GetTreeData(parentId, queryStrings));
        }
        protected override RebelTreeResult GetTreeData(HiveId parentId, FormCollection queryStrings)
        {
            using (var uow = Hive.CreateReadonly())
            {
                var repo  = uow.Repositories;
                var files = repo.GetAll <File>().Where(x => !x.IsContainer);

                // Create map of files based upon Layout properties
                var fileMap = TemplateHelper.CreateLayoutFileMap(files);

                // Choose the tree depth to render
                var currentKey = "None";
                if (parentId != RootNodeId)
                {
                    var parentFile = files.SingleOrDefault(x => x.Id == parentId);
                    currentKey = Server.MapPath(parentFile.RootRelativePath);
                }

                // Construct tree nodes
                var treeNodes = fileMap[currentKey].Select(f => new
                {
                    treeNode = CreateTreeNode(
                        f.Id,
                        queryStrings,
                        f.GetFileNameForDisplay(),
                        GetEditorUrl(f.Id, queryStrings),
                        fileMap.ContainsKey(Server.MapPath(f.RootRelativePath)),
                        f.Name.ToLower().StartsWith("_viewstart.")
                            ? "tree-viewstart-template"
                            : f.Name.StartsWith("_") || f.RelationProxies.GetChildRelations(FixedRelationTypes.DefaultRelationType).Any()
                                ? "tree-master-template"
                                : "tree-template"
                        ),
                    entity = f
                });

                foreach (var file in treeNodes)
                {
                    // Set menu items
                    file.treeNode.AddEditorMenuItem <CreateItem>(this, "createUrl", "CreateNew");
                    file.treeNode.AddEditorMenuItem <Delete>(this, "deleteUrl", "Delete");
                    file.treeNode.AddMenuItem <Reload>();

                    // Set tree expand url
                    if (file.treeNode.HasChildren)
                    {
                        file.treeNode.JsonUrl = Url.GetTreeUrl(GetType(), file.treeNode.HiveId, queryStrings);
                    }

                    // Add to node collection
                    NodeCollection.Add(file.treeNode);
                }
            }

            return(RebelTree());
        }
        protected override RebelTreeResult GetTreeData(HiveId parentId, FormCollection queryStrings)
        {
            using (var uow = Hive.CreateReadonly())
            {
                var repo = uow.Repositories;
                IEnumerable <File> files;

                //First node - get the root entities
                if (parentId == RootNodeId)
                {
                    files = repo.GetAll <File>();
                }
                else
                {
                    //get entities from the current depth
                    var fileRelations = repo.GetLazyChildRelations(parentId, FixedRelationTypes.DefaultRelationType);
                    files = fileRelations.Select(x => x.Destination).OfType <File>();
                }

                var treeNodes = files.Select(f => new
                {
                    treeNode = CreateTreeNode(
                        f.Id,
                        queryStrings,
                        f.GetFileNameForDisplay(),
                        f.IsContainer
                            ? GetDashboardUrl()
                            : GetEditorUrl(f.Id, queryStrings)
                        ),
                    entity = f
                }
                                             );
                foreach (var file in treeNodes)
                {
                    if (file.entity.IsContainer)
                    {
                        //If container then see if it has children
                        file.treeNode.HasChildren = repo.GetChildRelations(file.entity.Id, FixedRelationTypes.DefaultRelationType).Any();
                        CustomizeFolderNode(file.treeNode, queryStrings);
                    }
                    else
                    {
                        CustomizeFileNode(file.treeNode, queryStrings);
                    }
                    NodeCollection.Add(file.treeNode);
                }
            }

            return(RebelTree());
        }
        protected override void CustomizeFileNode(TreeNode n, FormCollection queryStrings)
        {
            n.AddEditorMenuItem <CreateItem>(this, "createUrl", "EditRule");
            base.CustomizeFileNode(n, queryStrings);
            n.AddMenuItem <Reload>();

            n.Icon = "tree-css";

            using (var uow = Hive.CreateReadonly())
            {
                var stylesheet = uow.Repositories.Get <File>(n.HiveId);
                var rules      = StylesheetHelper.ParseRules(stylesheet);
                n.HasChildren = rules.Count() > 0;
                if (n.HasChildren)
                {
                    n.JsonUrl = Url.GetTreeUrl(GetType(), n.HiveId, queryStrings);
                }
            }
        }