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 } }