// Copyright (c) Umbraco. // See LICENSE for more details. using Examine; using Examine.Lucene.Directories; using Examine.Lucene.Providers; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; using Directory = Lucene.Net.Store.Directory; namespace Umbraco.Cms.Infrastructure.Examine; /// /// An Examine directory factory implementation based on configured values /// public class ConfigurationEnabledDirectoryFactory : DirectoryFactoryBase { private readonly IApplicationRoot _applicationRoot; private readonly IServiceProvider _services; private readonly IndexCreatorSettings _settings; private IDirectoryFactory? _directoryFactory; public ConfigurationEnabledDirectoryFactory( IServiceProvider services, IOptions settings, IApplicationRoot applicationRoot) { _services = services; _applicationRoot = applicationRoot; _settings = settings.Value; } protected override Directory CreateDirectory(LuceneIndex luceneIndex, bool forceUnlock) { _directoryFactory = CreateFactory(); return _directoryFactory.CreateDirectory(luceneIndex, forceUnlock); } /// /// Creates a directory factory based on the configured value and ensures that /// private IDirectoryFactory CreateFactory() { DirectoryInfo dirInfo = _applicationRoot.ApplicationRoot; if (!dirInfo.Exists) { System.IO.Directory.CreateDirectory(dirInfo.FullName); } switch (_settings.LuceneDirectoryFactory) { case LuceneDirectoryFactory.SyncedTempFileSystemDirectoryFactory: return _services.GetRequiredService(); case LuceneDirectoryFactory.TempFileSystemDirectoryFactory: return _services.GetRequiredService(); case LuceneDirectoryFactory.Default: default: return _services.GetRequiredService(); } } }