public NodeStorageContainerFileViewModel(BaseTreeViewModel trvTree, IHierarchicalViewModel parent,
                                          StorageModel storage, BlobNodeModel blob, bool isFolder)
     : base(trvTree, parent, blob.Name, NodeType.File, isFolder ? IconType.Path : IconType.File,
            blob, false, isFolder,
            isFolder ? MvvmColor.Navy : MvvmColor.Black)
 {
     IsFolder = isFolder;
     Storage  = storage;
     Blob     = blob;
 }
        /// <summary>
        ///		Transforma una lista de elementos en un árbol
        /// </summary>
        private List <BlobNodeModel> TransformToTree(List <BlobModel> items)
        {
            List <BlobNodeModel> tree = new List <BlobNodeModel>();

            // Ordena los elementos
            items.Sort((first, second) => first.FullFileName.CompareTo(second.FullFileName));
            // Convierte los elementos en un árbol
            foreach (BlobModel item in items)
            {
                AddNode(tree, null, item, item.FullFileName.Split('/'), 0);
            }
            // Devuelve el árbol de elementos
            return(tree);

            void AddNode(List <BlobNodeModel> nodes, BlobNodeModel parent, BlobModel blob, string[] parts, int index)
            {
                if (parts.Length > index)
                {
                    BlobNodeModel previous = null;

                    // Busca un nodo con el mismo nombre
                    foreach (BlobNodeModel child in nodes)
                    {
                        if (child.Name.Equals(parts[index], StringComparison.CurrentCultureIgnoreCase))
                        {
                            previous = child;
                        }
                    }
                    // Si se ha encontrado, se añade en alguno de sus hijos
                    if (previous != null)
                    {
                        AddNode(previous.Children, previous, blob, parts, index + 1);
                    }
                    else
                    {
                        BlobNodeModel blobNode = new BlobNodeModel(parts[index], blob);

                        // Añade el blob al árbol
                        if (parent != null)
                        {
                            parent.Children.Add(blobNode);
                        }
                        else
                        {
                            nodes.Add(blobNode);
                        }
                        // Añade los nodos hijo
                        AddNode(blobNode.Children, blobNode, blob, parts, index + 1);
                    }
                }
            }
        }
Exemple #3
0
        /// <summary>
        ///		Obtiene los hijos de un blob
        /// </summary>
        private List <BlobNodeModel> GetBlobs(BlobNodeModel node)
        {
            List <BlobNodeModel> blobs = new List <BlobNodeModel>();

            // Obtiene los nodos hijo (si hay alguno)
            if (node.Children.Count == 0)
            {
                blobs.Add(node);
            }
            else
            {
                foreach (BlobNodeModel child in node.Children)
                {
                    blobs.AddRange(GetBlobs(child));
                }
            }
            // Devuelve los nodos
            return(blobs);
        }