Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 5
0
        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);
        }