Cleans up the BaseValueSetBuilder
This commit is contained in:
@@ -1,20 +1,27 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Examine;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
|
||||
namespace Umbraco.Examine
|
||||
{
|
||||
public abstract class BaseValueSetBuilder
|
||||
|
||||
/// <inheritdoc />
|
||||
public abstract class BaseValueSetBuilder<TContent> : IValueSetBuilder<TContent>
|
||||
where TContent : IContentBase
|
||||
{
|
||||
private readonly PropertyEditorCollection _propertyEditors;
|
||||
|
||||
public BaseValueSetBuilder(PropertyEditorCollection propertyEditors)
|
||||
protected BaseValueSetBuilder(PropertyEditorCollection propertyEditors)
|
||||
{
|
||||
_propertyEditors = propertyEditors ?? throw new System.ArgumentNullException(nameof(propertyEditors));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public abstract IEnumerable<ValueSet> GetValueSets(params TContent[] content);
|
||||
|
||||
protected void AddPropertyValue(Property property, string culture, string segment, IDictionary<string, object[]> values)
|
||||
{
|
||||
var editor = _propertyEditors[property.PropertyType.PropertyEditorAlias];
|
||||
@@ -57,8 +64,6 @@ namespace Umbraco.Examine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,8 @@ using Umbraco.Core.Strings;
|
||||
|
||||
namespace Umbraco.Examine
|
||||
{
|
||||
public class ContentValueSetBuilder : BaseValueSetBuilder, IValueSetBuilder<IContent>
|
||||
public class ContentValueSetBuilder : BaseValueSetBuilder<IContent>
|
||||
{
|
||||
private readonly PropertyEditorCollection _propertyEditors;
|
||||
private readonly IEnumerable<IUrlSegmentProvider> _urlSegmentProviders;
|
||||
private readonly IUserService _userService;
|
||||
|
||||
@@ -19,19 +18,12 @@ namespace Umbraco.Examine
|
||||
IUserService userService)
|
||||
: base(propertyEditors)
|
||||
{
|
||||
_propertyEditors = propertyEditors;
|
||||
_urlSegmentProviders = urlSegmentProviders;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a collection of <see cref="ValueSet"/> for a <see cref="IContent"/> collection
|
||||
/// </summary>
|
||||
/// <param name="urlSegmentProviders"></param>
|
||||
/// <param name="userService"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <returns>Yield returns <see cref="ValueSet"/></returns>
|
||||
public IEnumerable<ValueSet> GetValueSets(params IContent[] content)
|
||||
/// <inheritdoc />
|
||||
public override IEnumerable<ValueSet> GetValueSets(params IContent[] content)
|
||||
{
|
||||
//TODO: There is a lot of boxing going on here and ultimately all values will be boxed by Lucene anyways
|
||||
// but I wonder if there's a way to reduce the boxing that we have to do or if it will matter in the end since
|
||||
|
||||
@@ -4,9 +4,18 @@ using Umbraco.Core.Models;
|
||||
|
||||
namespace Umbraco.Examine
|
||||
{
|
||||
public interface IValueSetBuilder<TContent>
|
||||
/// <summary>
|
||||
/// Creates a collection of <see cref="ValueSet"/> to be indexed based on a collection of <see cref="TContent"/>
|
||||
/// </summary>
|
||||
/// <typeparam name="TContent"></typeparam>
|
||||
public interface IValueSetBuilder<in TContent>
|
||||
where TContent : IContentBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a collection of <see cref="ValueSet"/> to be indexed based on a collection of <see cref="TContent"/>
|
||||
/// </summary>
|
||||
/// <param name="content"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<ValueSet> GetValueSets(params TContent[] content);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using Umbraco.Core.Strings;
|
||||
|
||||
namespace Umbraco.Examine
|
||||
{
|
||||
public class MediaValueSetBuilder : BaseValueSetBuilder, IValueSetBuilder<IMedia>
|
||||
public class MediaValueSetBuilder : BaseValueSetBuilder<IMedia>
|
||||
{
|
||||
private readonly IEnumerable<IUrlSegmentProvider> _urlSegmentProviders;
|
||||
private readonly IUserService _userService;
|
||||
@@ -22,7 +22,8 @@ namespace Umbraco.Examine
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public IEnumerable<ValueSet> GetValueSets(params IMedia[] media)
|
||||
/// <inheritdoc />
|
||||
public override IEnumerable<ValueSet> GetValueSets(params IMedia[] media)
|
||||
{
|
||||
foreach (var m in media)
|
||||
{
|
||||
|
||||
@@ -7,14 +7,15 @@ using Umbraco.Core.PropertyEditors;
|
||||
namespace Umbraco.Examine
|
||||
{
|
||||
|
||||
public class MemberValueSetBuilder : BaseValueSetBuilder, IValueSetBuilder<IMember>
|
||||
public class MemberValueSetBuilder : BaseValueSetBuilder<IMember>
|
||||
{
|
||||
public MemberValueSetBuilder(PropertyEditorCollection propertyEditors)
|
||||
: base(propertyEditors)
|
||||
{
|
||||
}
|
||||
|
||||
public IEnumerable<ValueSet> GetValueSets(params IMember[] members)
|
||||
/// <inheritdoc />
|
||||
public override IEnumerable<ValueSet> GetValueSets(params IMember[] members)
|
||||
{
|
||||
foreach (var m in members)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
@@ -17,17 +16,13 @@ using Umbraco.Core.PropertyEditors;
|
||||
using Umbraco.Core.Scoping;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core.Services.Changes;
|
||||
using Umbraco.Core.Strings;
|
||||
using Umbraco.Core.Sync;
|
||||
using Umbraco.Web.Cache;
|
||||
using Umbraco.Web.PropertyEditors;
|
||||
using Umbraco.Examine;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
using Umbraco.Web.Scheduling;
|
||||
using System.Threading.Tasks;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Composing;
|
||||
using LightInject;
|
||||
|
||||
namespace Umbraco.Web.Search
|
||||
{
|
||||
@@ -42,15 +37,13 @@ namespace Umbraco.Web.Search
|
||||
private IValueSetBuilder<IContent> _contentValueSetBuilder;
|
||||
private IValueSetBuilder<IMedia> _mediaValueSetBuilder;
|
||||
private IValueSetBuilder<IMember> _memberValueSetBuilder;
|
||||
private ContentIndexPopulator _contentIndexPopulator;
|
||||
private MediaIndexPopulator _mediaIndexPopulator;
|
||||
private static bool _disableExamineIndexing = false;
|
||||
private static volatile bool _isConfigured = false;
|
||||
private static readonly object IsConfiguredLocker = new object();
|
||||
private IScopeProvider _scopeProvider;
|
||||
private ServiceContext _services;
|
||||
private static BackgroundTaskRunner<IBackgroundTask> _rebuildOnStartupRunner;
|
||||
private static readonly object _rebuildLocker = new object();
|
||||
private static readonly object RebuildLocker = new object();
|
||||
|
||||
// the default enlist priority is 100
|
||||
// enlist with a lower priority to ensure that anything "default" runs after us
|
||||
@@ -77,15 +70,11 @@ namespace Umbraco.Web.Search
|
||||
IndexRebuilder indexRebuilder, ServiceContext services,
|
||||
IValueSetBuilder<IContent> contentValueSetBuilder,
|
||||
IValueSetBuilder<IMedia> mediaValueSetBuilder,
|
||||
IValueSetBuilder<IMember> memberValueSetBuilder,
|
||||
ContentIndexPopulator contentIndexPopulator, PublishedContentIndexPopulator publishedContentIndexPopulator,
|
||||
MediaIndexPopulator mediaIndexPopulator)
|
||||
IValueSetBuilder<IMember> memberValueSetBuilder)
|
||||
{
|
||||
_services = services;
|
||||
_scopeProvider = scopeProvider;
|
||||
_examineManager = examineManager;
|
||||
_contentIndexPopulator = contentIndexPopulator;
|
||||
_mediaIndexPopulator = mediaIndexPopulator;
|
||||
_contentValueSetBuilder = contentValueSetBuilder;
|
||||
_mediaValueSetBuilder = mediaValueSetBuilder;
|
||||
_memberValueSetBuilder = memberValueSetBuilder;
|
||||
@@ -149,17 +138,20 @@ namespace Umbraco.Web.Search
|
||||
|
||||
RebuildIndexes(indexRebuilder, profilingLogger.Logger, true, 5000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Called to rebuild empty indexes on startup
|
||||
/// </summary>
|
||||
/// <param name="indexRebuilder"></param>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="onlyEmptyIndexes"></param>
|
||||
/// <param name="waitMilliseconds"></param>
|
||||
public static void RebuildIndexes(IndexRebuilder indexRebuilder, ILogger logger, bool onlyEmptyIndexes, int waitMilliseconds = 0)
|
||||
{
|
||||
//TODO: need a way to disable rebuilding on startup
|
||||
|
||||
lock(_rebuildLocker)
|
||||
lock(RebuildLocker)
|
||||
{
|
||||
if (_rebuildOnStartupRunner != null && _rebuildOnStartupRunner.IsRunning)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user