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); } } } }
/// <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); }