using System;
using System.Collections.Generic;
using System.Diagnostics;
using Umbraco.Extensions;
namespace Umbraco.Cms.Core.Models.PublishedContent
{
///
/// Provide an abstract base class for IPublishedContent implementations.
///
/// This base class does which (a) consistently resolves and caches the URL, (b) provides an implementation
/// for this[alias], and (c) provides basic content set management.
[DebuggerDisplay("Content Id: {Id}")]
public abstract class PublishedContentBase : IPublishedContent
{
private readonly IVariationContextAccessor _variationContextAccessor;
protected PublishedContentBase(IVariationContextAccessor variationContextAccessor)
{
_variationContextAccessor = variationContextAccessor;
}
#region ContentType
public abstract IPublishedContentType ContentType { get; }
#endregion
#region PublishedElement
///
public abstract Guid Key { get; }
#endregion
#region PublishedContent
///
public abstract int Id { get; }
///
public virtual string? Name => this.Name(_variationContextAccessor);
///
public virtual string? UrlSegment => this.UrlSegment(_variationContextAccessor);
///
public abstract int SortOrder { get; }
///
public abstract int Level { get; }
///
public abstract string Path { get; }
///
public abstract int? TemplateId { get; }
///
public abstract int CreatorId { get; }
///
public abstract DateTime CreateDate { get; }
///
public abstract int WriterId { get; }
///
public abstract DateTime UpdateDate { get; }
///
public abstract IReadOnlyDictionary Cultures { get; }
///
public abstract PublishedItemType ItemType { get; }
///
public abstract bool IsDraft(string? culture = null);
///
public abstract bool IsPublished(string? culture = null);
#endregion
#region Tree
///
public abstract IPublishedContent Parent { get; }
///
public virtual IEnumerable? Children => this.Children(_variationContextAccessor);
///
public abstract IEnumerable ChildrenForAllCultures { get; }
#endregion
#region Properties
///
public abstract IEnumerable Properties { get; }
///
public abstract IPublishedProperty GetProperty(string alias);
#endregion
}
}