Ejemplo n.º 1
0
        public ActionResult <List <CatalogDto> > GetSubcatalogs(int parentCatalogId)
        {
            List <Catalog> catalogs = _directoryFacade.GetSubcatalogs(parentCatalogId);

            return(Ok(catalogs.Select(x => new CatalogDto
            {
                Id = x.Id,
                Name = x.Name,
                OrderInParentCatalog = x.OrderInParentCatalog
            }).ToList()));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Данный метод строит дерево каталогов
        /// </summary>
        /// <param name="initialCatalogId">Id каталога, с которого нужно начинать строить дерево</param>
        /// <param name="isAddTextBlocks">Если true, то в дерево будут добавлены текстовые файлы</param>
        /// <returns>Объект типа NodeType, который является начальным каталогом</returns>
        public NodeType BuildTree(int initialCatalogId = Constants.RootCatalogId, bool isAddTextBlocks = false)
        {
            Catalog initialCatalog;

            if (initialCatalogId == Constants.RootCatalogId)
            {
                initialCatalog = new Catalog {
                    Id = 0
                };
            }
            else
            {
                initialCatalog = _directoryFacade.GetCatalogById(initialCatalogId);
                if (initialCatalog == null)
                {
                    throw new CatalogNotFoundException();
                }
            }
            NodeType result = CreateNode(initialCatalog);

            // Получение подкаталогов и файлов, находящихся в изначальном каталоге
            foreach (Catalog subcatalog in _directoryFacade.GetSubcatalogs(initialCatalogId))
            {
                result.ChildrenNodes.Add(CreateNode(subcatalog, result));
            }
            if (isAddTextBlocks)
            {
                foreach (TextBlock textBlock in _directoryFacade.GetCatalogAttachments(initialCatalogId))
                {
                    result.CatalogAttachments.Add(textBlock);
                }
            }

            // Построение дерева
            List <ICatalogNode> catalogsOnCurrDepthLevel = Enumerable.ToList <ICatalogNode>(result.ChildrenNodes);

            while (catalogsOnCurrDepthLevel.Count > 0)
            {
                List <ICatalogNode> catalogsOnNextDepthLevel = new List <ICatalogNode>();
                foreach (NodeType currParentCatalog in catalogsOnCurrDepthLevel)
                {
                    List <Catalog> allSubcatalogs = _directoryFacade.GetSubcatalogs(currParentCatalog.Id);
                    foreach (Catalog currSubcatalog in allSubcatalogs)
                    {
                        NodeType node = CreateNode(currSubcatalog, currParentCatalog);
                        currParentCatalog.ChildrenNodes.Add(node);
                        catalogsOnNextDepthLevel.Add(node);
                    }

                    if (isAddTextBlocks)
                    {
                        foreach (TextBlock textBlock in _directoryFacade.GetCatalogAttachments(currParentCatalog.Id))
                        {
                            currParentCatalog.CatalogAttachments.Add(textBlock);
                        }
                    }
                }
                catalogsOnCurrDepthLevel = catalogsOnNextDepthLevel;
            }
            return(result);
        }