using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.IO;
using Umbraco.Core.Manifest;
using Umbraco.Core.ObjectResolution;
namespace Umbraco.Core.PropertyEditors
{
///
/// A resolver to resolve all property editors
///
///
/// This resolver will contain any property editors defined in manifests as well!
///
public class PropertyEditorResolver : LazyManyObjectsResolverBase
{
public PropertyEditorResolver(IServiceProvider serviceProvider, ILogger logger, Func> typeListProducerList, IRuntimeCacheProvider runtimeCache)
: base(serviceProvider, logger, typeListProducerList, ObjectLifetimeScope.Application)
{
var builder = new ManifestBuilder(
runtimeCache,
new ManifestParser(new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), runtimeCache));
_unioned = new Lazy>(() => Values.Union(builder.PropertyEditors).ToList());
}
[Obsolete("Use the ctor specifying all dependencies instead")]
public PropertyEditorResolver(Func> typeListProducerList)
: base(typeListProducerList, ObjectLifetimeScope.Application)
{
var builder = new ManifestBuilder(
ApplicationContext.Current.ApplicationCache.RuntimeCache,
new ManifestParser(new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), ApplicationContext.Current.ApplicationCache.RuntimeCache));
_unioned = new Lazy>(() => Values.Union(builder.PropertyEditors).ToList());
}
internal PropertyEditorResolver(IServiceProvider serviceProvider, ILogger logger, Func> typeListProducerList, ManifestBuilder builder)
: base(serviceProvider, logger, typeListProducerList, ObjectLifetimeScope.Application)
{
_unioned = new Lazy>(() => SanitizeNames(Values.Union(builder.PropertyEditors).ToList()));
}
private static List SanitizeNames(List editors)
{
var nestedContentEditorFromPackage = editors.FirstOrDefault(x => x.Alias == "Our.Umbraco.NestedContent");
if (nestedContentEditorFromPackage != null)
nestedContentEditorFromPackage.Name = "(Obsolete) " + nestedContentEditorFromPackage.Name;
return editors;
}
private readonly Lazy> _unioned;
///
/// Returns the property editors
///
public virtual IEnumerable PropertyEditors
{
get { return _unioned.Value; }
}
///
/// Returns a property editor by alias
///
///
///
public virtual PropertyEditor GetByAlias(string alias)
{
return PropertyEditors.SingleOrDefault(x => x.Alias == alias);
}
}
}