Files
Umbraco-CMS/src/Umbraco.PublishedCache.NuCache/Navigable/NavigableContent.cs

78 lines
2.4 KiB
C#
Raw Normal View History

using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Xml.XPath;
2016-05-27 14:26:28 +02:00
namespace Umbraco.Cms.Infrastructure.PublishedCache.Navigable;
internal class NavigableContent : INavigableContent
2016-05-27 14:26:28 +02:00
{
private readonly string?[] _builtInValues;
private readonly PublishedContent _content;
public NavigableContent(IPublishedContent content)
2016-05-27 14:26:28 +02:00
{
InnerContent = content;
_content = PublishedContent.UnwrapIPublishedContent(InnerContent);
2016-05-27 14:26:28 +02:00
var i = 0;
_builtInValues = new[]
2016-05-27 14:26:28 +02:00
{
XmlString(i++, _content.Name), XmlString(i++, _content.ParentId), XmlString(i++, _content.CreateDate),
XmlString(i++, _content.UpdateDate), XmlString(i++, true), // isDoc
XmlString(i++, _content.SortOrder), XmlString(i++, _content.Level), XmlString(i++, _content.TemplateId),
XmlString(i++, _content.WriterId), XmlString(i++, _content.CreatorId), XmlString(i++, _content.UrlSegment),
XmlString(i, _content.IsDraft()),
};
}
2016-05-27 14:26:28 +02:00
#region INavigableContent
public IPublishedContent InnerContent { get; }
private string? XmlString(int index, object? value)
{
if (value == null)
2016-05-27 14:26:28 +02:00
{
return string.Empty;
2016-05-27 14:26:28 +02:00
}
INavigableFieldType field = Type.FieldTypes[index];
return field.XmlStringConverter == null ? value.ToString() : field.XmlStringConverter(value);
}
2016-05-27 14:26:28 +02:00
public int Id => _content.Id;
2016-05-27 14:26:28 +02:00
public int ParentId => _content.ParentId;
2016-05-27 14:26:28 +02:00
public INavigableContentType Type => NavigableContentType.GetContentType(_content.ContentType);
2016-05-27 14:26:28 +02:00
// returns all child ids, will be filtered by the source
public IList<int>? ChildIds => _content.ChildIds;
2016-05-27 14:26:28 +02:00
public object? Value(int index)
{
if (index < 0)
{
throw new ArgumentOutOfRangeException(nameof(index));
}
2016-05-27 14:26:28 +02:00
if (index < NavigableContentType.BuiltinProperties.Length)
2016-05-27 14:26:28 +02:00
{
// built-in field, ie attribute
// return XmlString(index, _builtInValues1[index]);
return _builtInValues[index];
2016-05-27 14:26:28 +02:00
}
index -= NavigableContentType.BuiltinProperties.Length;
IPublishedProperty[] properties = _content.PropertiesArray;
if (index >= properties.Length)
{
throw new ArgumentOutOfRangeException(nameof(index));
}
// custom property, ie element
return properties[index].GetXPathValue();
2016-05-27 14:26:28 +02:00
}
#endregion
2016-05-27 14:26:28 +02:00
}