Exemplo n.º 1
0
        public void SearchTree(IHierarchicalTreeSearch search, IHierarchicalTreeSearchResult searchResult)
        {
            Assert.IsTrue(search.SearchPaths.Length > 0, $"Search of type {search.GetType().Name} has no paths to search.");

            foreach (var searchPath in search.SearchPaths)
            {
                var activeBranch = SearchForBranch(searchPath, false, search.Settings);
                if (activeBranch == null)
                {
                    continue;
                }

                RetrieveLeafContent(activeBranch, search, searchResult);
            }
        }
Exemplo n.º 2
0
        private void RetrieveLeafContent(HierarchicalTree <TLeaf> branch, IHierarchicalTreeSearch search, IHierarchicalTreeSearchResult searchResult)
        {
            if (branch.HasResources)
            {
                foreach (var resource in branch.leaves)
                {
                    var extensionIsValid = true;
                    if (search.SearchExtensions != null && search.SearchExtensions.Length > 0)
                    {
                        extensionIsValid = false;
                        foreach (var extension in search.SearchExtensions)
                        {
                            if (resource.Extension == extension)
                            {
                                extensionIsValid = true;
                                break;
                            }
                        }
                    }

                    if (!extensionIsValid)
                    {
                        continue;
                    }

                    if (!search.AcceptLeaf(resource.LeafData))
                    {
                        continue;
                    }

                    searchResult.Add(resource.LeafData);
                }
            }

            if (branch.HasBranches)
            {
                foreach (var childBranch in branch.branches.Values)
                {
                    RetrieveLeafContent(childBranch, search, searchResult);
                }
            }
        }
Exemplo n.º 3
0
        public void Remove(IHierarchicalTreeSearch search)
        {
            Assert.IsTrue(search.SearchPaths.Length > 0, $"Search of type {search.GetType().Name} has no paths to search.");

            foreach (var searchPath in search.SearchPaths)
            {
                var activeBranch = SearchForBranch(searchPath, false, search.Settings);
                if (activeBranch == null)
                {
                    continue;
                }

                activeBranch.Branches.Clear();
                activeBranch.Leaves.Clear();

                if (activeBranch.parent != null)
                {
                    activeBranch.parent.Branches.Remove(activeBranch.branchName);
                }
            }
        }