using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Umbraco.Core.Composing; using Umbraco.Core.Services; using Umbraco.Web.Trees; namespace Umbraco.Web.Search { internal class SearchableTreeCollection : BuilderCollectionBase { private readonly Dictionary _dictionary; public SearchableTreeCollection(IEnumerable items, IApplicationTreeService treeService) : base(items) { _dictionary = CreateDictionary(treeService); } private Dictionary CreateDictionary(IApplicationTreeService treeService) { var appTrees = treeService.GetAll().ToArray(); var dictionary = new Dictionary(); var searchableTrees = this.ToArray(); foreach (var searchableTree in searchableTrees) { var found = appTrees.FirstOrDefault(x => x.Alias == searchableTree.TreeAlias); if (found != null) { dictionary[searchableTree.TreeAlias] = new SearchableApplicationTree(found.ApplicationAlias, found.Alias, searchableTree); } } return dictionary; } // fixme - oh why?! public IReadOnlyDictionary AsReadOnlyDictionary() { return new ReadOnlyDictionary(_dictionary); } public SearchableApplicationTree this[string key] => _dictionary[key]; } }