Files
Umbraco-CMS/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyBase.cs
2020-02-24 08:21:53 +01:00

68 lines
2.4 KiB
C#

using System;
using Umbraco.Core.PropertyEditors;
namespace Umbraco.Core.Models.PublishedContent
{
/// <summary>
/// Provides a base class for <c>IPublishedProperty</c> implementations which converts and caches
/// the value source to the actual value to use when rendering content.
/// </summary>
public abstract class PublishedPropertyBase : IPublishedProperty
{
/// <summary>
/// Initializes a new instance of the <see cref="PublishedPropertyBase"/> class.
/// </summary>
protected PublishedPropertyBase(IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel)
{
PropertyType = propertyType ?? throw new ArgumentNullException(nameof(propertyType));
ReferenceCacheLevel = referenceCacheLevel;
ValidateCacheLevel(ReferenceCacheLevel, true);
ValidateCacheLevel(PropertyType.CacheLevel, false);
}
// validates the cache level
private static void ValidateCacheLevel(PropertyCacheLevel cacheLevel, bool validateUnknown)
{
switch (cacheLevel)
{
case PropertyCacheLevel.Element:
case PropertyCacheLevel.Elements:
case PropertyCacheLevel.Snapshot:
case PropertyCacheLevel.None:
break;
case PropertyCacheLevel.Unknown:
if (!validateUnknown) goto default;
break;
default:
throw new Exception($"Invalid cache level \"{cacheLevel}\".");
}
}
/// <summary>
/// Gets the property type.
/// </summary>
public IPublishedPropertyType PropertyType { get; }
/// <summary>
/// Gets the property reference cache level.
/// </summary>
public PropertyCacheLevel ReferenceCacheLevel { get; }
/// <inheritdoc />
public string Alias => PropertyType.Alias;
/// <inheritdoc />
public abstract bool HasValue(string culture = null, string segment = null);
/// <inheritdoc />
public abstract object GetSourceValue(string culture = null, string segment = null);
/// <inheritdoc />
public abstract object GetValue(string culture = null, string segment = null);
/// <inheritdoc />
public abstract object GetXPathValue(string culture = null, string segment = null);
}
}