private int travelFolder(NFSFolder source) { int count = 0; count++; var iteratorStack = new Stack <IEnumerator <NFSFolder> >(); iteratorStack.Push(source.Folders.GetEnumerator()); while (iteratorStack.Count > 0) { var iterator = iteratorStack.Peek(); if (!iterator.MoveNext()) { iteratorStack.Pop(); } else { var current = iterator.Current; iteratorStack.Push(current.Folders.GetEnumerator()); count++; } } return(count); }
private IDictionary <string, NFSFolder> buildNFSFolderBranchMap(NFSFolder root) { if (!root.Folders.Any()) { throw new ArgumentException("sub folders empty"); } var map = new Dictionary <string, NFSFolder>(); int depth = 5; var branch = new NFSFolderBranch(depth); foreach (var folder in root.Folders) { if (folder.Folders.Any()) { throw new InvalidOperationException("the root here should be only one layer"); } branch.Add(folder.Name); string branchPath = branch.Path; try { map.Add(branchPath, folder); } catch (ArgumentException) { throw new Exception(string.Format("branch path [{0}] already exists", branchPath)); } } return(map); }
public FolderData(NFSFolder folder, FolderData parentFolder) : base(parentFolder) { if (folder == null) { throw new ArgumentNullException("folder"); } this.source = folder; this.name = folder.Name; this.description = folder.ToString(); this.files = folder.Files //.OrderBy(item => item.Extension) //.ThenBy(item => item.Filename) //keep origin file order .Select(item => new FileData(item, this)) .ToArray(); this.subFolders = folder.Folders .OrderBy(item => item.Name) .Select(item => new FolderData(item, this)) .ToArray(); this.hasAnyFiles = new Business.FileDataEnumerable(this).Any(); }
public NFSTreeBuilder(NFSFolder nfsRoot, NFSFolderBranchesManager branchesManager) { if (nfsRoot == null) { throw new ArgumentNullException("nfsRoot"); } if (branchesManager == null) { throw new ArgumentNullException("branchesManager"); } this.nfsRoot = nfsRoot.Copy(); this.branchesManager = branchesManager; }
private NFSFolder LoadNFSFolderRoot() { var reporter = this.reporter; string linesFile = "lines.txt"; if (!File.Exists(linesFile)) { throw new FileNotFoundException(linesFile); } var lines = File.ReadAllLines(linesFile); return(NFSFolder.Load(lines, reporter).Result); }
public NFSFolderNodePair(NFSFolder folder, NFSFolderBranchNode node) { if (folder == null) { throw new ArgumentNullException("folder"); } if (node == null) { throw new ArgumentNullException("node"); } if (folder.Name != node.Name) { throw new ArgumentException("folder and node are mismatched"); } this.folder = folder; this.node = node; }
public void CopyNFSFolder() { var root = NFSFolder.CreateRoot(); var folder1 = new NFSFolder(1, "Folder 1"); var folder2 = new NFSFolder(2, "Folder 2"); root.Add(folder1); root.Add(folder2); var copyRoot = root.Copy(); Assert.AreNotSame(folder1, copyRoot.Folders.First()); Assert.AreNotSame(folder2, copyRoot.Folders.ElementAt(1)); folder1.Add(folder2); Assert.AreSame(root.Folders.First().Folders.First(), folder2); Assert.IsFalse(copyRoot.Folders.First().Folders.Any()); }
private NFSFolder buildMethod(IProgressReporter reporter) { var report = reporter != null; var root = NFSFolder.CreateRoot(); var nfsFolders = this.GetRoot().Folders.ToList(); var branchesManager = this.branchesManager; var branches = branchesManager.Branches; var nodeRefCountMap = branchesManager.CreateRefMap(); var total = nodeRefCountMap.NodesCount; int current = 0; foreach (var branch in branches) { if (report) { reporter.Report("build " + branch.FullPath); } var nodes = branch.Nodes; int nodesCount = branch.NodeCount; var matchedStack = new Stack <NFSFolderNodePair>(nodesCount); foreach (var node in nodes) { var folder = nfsFolders .FirstOrDefault(item => item.Name == node.Name); if (folder == null) { break; } matchedStack.Push(new NFSFolderNodePair(folder, node)); } if (matchedStack.Count != nodesCount) { throw new Exception(string.Format("[{0}] not match to [{1}]", string.Join(", ", matchedStack.Select(item => item.Folder.Name)), branch.FullPath)); } //add inner folder to outer parent folder NFSFolder subFolder = null; while (matchedStack.Count > 0) { var pair = matchedStack.Pop(); var folder = pair.Folder; var node = pair.Node; int refCount = nodeRefCountMap.DecreaseReferenceCount(node); if (report) { reporter.Report((double)(current++) / total); } if (refCount == 0) { nfsFolders.Remove(folder); } if (subFolder != null) { folder.Add(subFolder); } if (matchedStack.Count == 0) { root.Add(folder); break; } subFolder = folder; } } if (nfsFolders.Count != 0) { throw new Exception( string.Format("Unassigned folders: {0}", string.Join(", ", nfsFolders.Select(item => item.Name)))); } return(root); }