Files
Umbraco-CMS/src/Umbraco.Core/PublishedCache/PublishedCacheBase.cs

112 lines
4.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.XPath;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Xml;
using Umbraco.Extensions;
namespace Umbraco.Cms.Core.PublishedCache
{
public abstract class PublishedCacheBase : IPublishedCache
{
2022-02-09 13:24:35 +01:00
private readonly IVariationContextAccessor? _variationContextAccessor;
public PublishedCacheBase(IVariationContextAccessor variationContextAccessor)
{
_variationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor));
}
public bool PreviewDefault { get; }
protected PublishedCacheBase(bool previewDefault)
{
PreviewDefault = previewDefault;
}
2022-02-15 15:48:41 +01:00
public abstract IPublishedContent? GetById(bool preview, int contentId);
2022-02-15 15:48:41 +01:00
public IPublishedContent? GetById(int contentId)
2019-04-12 16:05:43 +02:00
=> GetById(PreviewDefault, contentId);
public abstract IPublishedContent? GetById(bool preview, Guid contentId);
public IPublishedContent? GetById(Guid contentId)
2019-04-12 16:05:43 +02:00
=> GetById(PreviewDefault, contentId);
public abstract IPublishedContent? GetById(bool preview, Udi contentId);
2019-04-12 16:05:43 +02:00
public IPublishedContent? GetById(Udi contentId)
2019-04-12 16:05:43 +02:00
=> GetById(PreviewDefault, contentId);
public abstract bool HasById(bool preview, int contentId);
public bool HasById(int contentId)
2019-04-12 16:05:43 +02:00
=> HasById(PreviewDefault, contentId);
public abstract IEnumerable<IPublishedContent> GetAtRoot(bool preview, string? culture = null);
2022-02-09 13:24:35 +01:00
public IEnumerable<IPublishedContent> GetAtRoot(string? culture = null)
{
2019-06-07 11:15:58 +02:00
return GetAtRoot(PreviewDefault, culture);
}
public abstract IPublishedContent? GetSingleByXPath(bool preview, string xpath, XPathVariable[] vars);
public IPublishedContent? GetSingleByXPath(string xpath, XPathVariable[] vars)
{
return GetSingleByXPath(PreviewDefault, xpath, vars);
}
public abstract IPublishedContent? GetSingleByXPath(bool preview, XPathExpression xpath, XPathVariable[] vars);
public IPublishedContent? GetSingleByXPath(XPathExpression xpath, XPathVariable[] vars)
{
return GetSingleByXPath(PreviewDefault, xpath, vars);
}
public abstract IEnumerable<IPublishedContent> GetByXPath(bool preview, string xpath, XPathVariable[] vars);
public IEnumerable<IPublishedContent> GetByXPath(string xpath, XPathVariable[] vars)
{
return GetByXPath(PreviewDefault, xpath, vars);
}
public abstract IEnumerable<IPublishedContent> GetByXPath(bool preview, XPathExpression xpath, XPathVariable[] vars);
public IEnumerable<IPublishedContent> GetByXPath(XPathExpression xpath, XPathVariable[] vars)
{
return GetByXPath(PreviewDefault, xpath, vars);
}
public abstract XPathNavigator CreateNavigator(bool preview);
public XPathNavigator CreateNavigator()
{
return CreateNavigator(PreviewDefault);
}
public abstract XPathNavigator? CreateNodeNavigator(int id, bool preview);
public abstract bool HasContent(bool preview);
public bool HasContent()
{
return HasContent(PreviewDefault);
}
public abstract IPublishedContentType? GetContentType(int id);
public abstract IPublishedContentType? GetContentType(string alias);
public abstract IPublishedContentType? GetContentType(Guid key);
2019-04-15 13:04:14 +02:00
public virtual IEnumerable<IPublishedContent> GetByContentType(IPublishedContentType contentType)
{
// this is probably not super-efficient, but works
// some cache implementation may want to override it, though
return GetAtRoot()
2022-02-09 13:24:35 +01:00
.SelectMany(x => x.DescendantsOrSelf(_variationContextAccessor!))
.Where(x => x.ContentType.Id == contentType.Id);
}
}
}