1994194656
- Review fixes
87 lines
3.6 KiB
C#
87 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using AutoMapper;
|
|
using Umbraco.Core;
|
|
using Umbraco.Core.Logging;
|
|
using Umbraco.Core.Models;
|
|
using Umbraco.Core.PropertyEditors;
|
|
using Umbraco.Core.Services;
|
|
using Umbraco.Web.Models.ContentEditing;
|
|
|
|
namespace Umbraco.Web.Models.Mapping
|
|
{
|
|
/// <summary>
|
|
/// Creates a base generic ContentPropertyBasic from a Property
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
internal class ContentPropertyBasicConverter<T> : ITypeConverter<Property, T>
|
|
where T : ContentPropertyBasic, new()
|
|
{
|
|
protected IDataTypeService DataTypeService { get; }
|
|
protected IEntityService EntityService { get; }
|
|
|
|
private static readonly List<string> ComplexPropertyTypeAliases = new List<string> {"Umbraco.NestedContent"};
|
|
|
|
public ContentPropertyBasicConverter(IDataTypeService dataTypeService, IEntityService entityService)
|
|
{
|
|
DataTypeService = dataTypeService;
|
|
EntityService = entityService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Assigns the PropertyEditor, Id, Alias and Value to the property
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public virtual T Convert(ResolutionContext context)
|
|
{
|
|
var property = context.SourceValue as Property;
|
|
if (property == null)
|
|
throw new InvalidOperationException("Source value is not a property.");
|
|
|
|
var editor = PropertyEditorResolver.Current.GetByAlias(property.PropertyType.PropertyEditorAlias);
|
|
if (editor == null)
|
|
{
|
|
LogHelper.Error<ContentPropertyBasicConverter<T>>(
|
|
"No property editor found, converting to a Label",
|
|
new NullReferenceException("The property editor with alias " +
|
|
property.PropertyType.PropertyEditorAlias + " does not exist"));
|
|
|
|
editor = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias);
|
|
}
|
|
|
|
var dataTypeDefinitionKey = EntityService.GetKeyForId(property.PropertyType.DataTypeDefinitionId, UmbracoObjectTypes.DataType);
|
|
|
|
if (dataTypeDefinitionKey.Success == false)
|
|
{
|
|
throw new InvalidOperationException("Can't get the unique key from the id: " + property.PropertyType.DataTypeDefinitionId);
|
|
}
|
|
|
|
|
|
var result = new T
|
|
{
|
|
Id = property.Id,
|
|
DataTypeId = dataTypeDefinitionKey.Result,
|
|
Alias = property.Alias,
|
|
PropertyEditor = editor,
|
|
Editor = editor.Alias
|
|
};
|
|
|
|
// if there's a set of property aliases specified, we will check if the current property's value should be mapped.
|
|
// if it isn't one of the ones specified in 'includeProperties', we will just return the result without mapping the Value.
|
|
if (context.Options.Items.ContainsKey("IncludeProperties"))
|
|
{
|
|
var includeProperties = context.Options.Items["IncludeProperties"] as IEnumerable<string>;
|
|
if (includeProperties != null && includeProperties.Contains(property.Alias) == false)
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
|
|
// if no 'IncludeProperties' were specified or this property is set to be included - we will map the value and return.
|
|
result.Value = editor.ValueEditor.ConvertDbToEditor(property, property.PropertyType, DataTypeService);
|
|
return result;
|
|
}
|
|
}
|
|
}
|