private TemplateFolder GetTemplatesDeep(string rootPath)
        {
            var metaItemMapper = new TemplateMetaItemMapper(new HttpRequestWrapper(HttpContext.Current.Request));
            var fldrMapper     = new TemplateFolderMapper();

            // get root item - go deeper if are sub items
            // otherwise, assume empty folder or bad path
            Item           root   = this.Database.GetItem(rootPath);
            TemplateFolder result = fldrMapper.Map(root);

            if (root.HasChildren)
            {
                // grab folders, add, traverse deeper
                var fldrs = root
                            .Axes
                            .GetDescendants()
                            .Where(x => this.FolderTemplates.Contains(x.TemplateID))
                            .Select(x => fldrMapper.Map(x))
                            .ToList();

                foreach (var f in fldrs)
                {
                    result.Folders.Add(this.GetTemplatesDeep(f.Path));
                }

                // grab templates, add only
                var templates = root
                                .Children
                                .Where(x => !this.FolderTemplates.Contains(x.TemplateID))
                                .Select(x => metaItemMapper.Map(x))
                                .ToList();

                foreach (var r in templates)
                {
                    result.Templates.Add(r);
                }
            }

            return(result);
        }
        private TemplateFolder GetTemplatesDeep(string rootPath)
        {
            var metaItemMapper = new TemplateMetaItemMapper(new HttpRequestWrapper(HttpContext.Current.Request));
            var fldrMapper = new TemplateFolderMapper();

            // get root item - go deeper if are sub items
            // otherwise, assume empty folder or bad path
            Item root = this.Database.GetItem(rootPath);
            TemplateFolder result = fldrMapper.Map(root);

            if (root.HasChildren)
            {
                // grab folders, add, traverse deeper
                var fldrs = root
                    .Axes
                    .GetDescendants()
                    .Where(x => this.FolderTemplates.Contains(x.TemplateID))
                    .Select(x => fldrMapper.Map(x))
                    .ToList();

                foreach (var f in fldrs)
                {
                    result.Folders.Add(this.GetTemplatesDeep(f.Path));
                }

                // grab templates, add only
                var templates = root
                    .Children
                    .Where(x => !this.FolderTemplates.Contains(x.TemplateID))
                    .Select(x => metaItemMapper.Map(x))
                    .ToList();

                foreach (var r in templates)
                {
                    result.Templates.Add(r);
                }
            }

            return result;
        }