Updates lots of trees for searching and gets results grouped

This commit is contained in:
Shannon
2017-05-31 12:25:05 +02:00
parent 3ae16e717c
commit a70c9226fc
26 changed files with 1091 additions and 439 deletions

View File

@@ -0,0 +1,60 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Services;
using Umbraco.Web.Editors;
using Umbraco.Web.Trees;
namespace Umbraco.Web.Search
{
public class SearchableTreeResolver : LazyManyObjectsResolverBase<SearchableTreeResolver, ISearchableTree>
{
private readonly IApplicationTreeService _treeService;
public SearchableTreeResolver(IServiceProvider serviceProvider, ILogger logger, IApplicationTreeService treeService, Func<IEnumerable<Type>> searchableTrees)
: base(serviceProvider, logger, searchableTrees, ObjectLifetimeScope.Application)
{
_treeService = treeService;
}
private SearchableTreeCollection _resolved;
private static readonly object Locker = new object();
/// <summary>
/// Returns the a dictionary of tree alias with it's affiliated <see cref="ISearchableTree"/>
/// </summary>
public SearchableTreeCollection SearchableTrees
{
get
{
if (_resolved != null) return _resolved;
lock (Locker)
{
var appTrees = _treeService.GetAll().ToArray();
_resolved = new SearchableTreeCollection();
var searchableTrees = Values.ToArray();
foreach (var instanceType in InstanceTypes)
{
if (TypeHelper.IsTypeAssignableFrom<ISearchableTree>(instanceType))
{
var found = appTrees.FirstOrDefault(x => x.GetRuntimeType() == instanceType);
if (found != null)
{
_resolved.Add(new SearchableApplicationTree(found.ApplicationAlias, found.Alias, searchableTrees.First(x => x.GetType() == instanceType)));
}
}
}
return _resolved;
}
}
}
}
}