using System;
namespace Umbraco.Core.Models.PublishedContent
{
///
/// Provides strongly typed published content models services.
///
internal static class PublishedContentExtensionsForModels
{
///
/// Creates a strongly typed published content model for an internal published content.
///
/// The internal published content.
/// The strongly typed published content model.
public static IPublishedContent CreateModel(this IPublishedContent content)
{
if (content == null)
return null;
if (PublishedContentModelFactoryResolver.Current.HasValue == false)
return content;
// get model
// if factory returns nothing, throw
// if factory just returns what it got, return
var model = PublishedContentModelFactoryResolver.Current.Factory.CreateModel(content);
if (model == null)
throw new Exception("IPublishedContentFactory returned null.");
if (ReferenceEquals(model, content))
return content;
// at the moment, other parts of our code assume that all models will
// somehow implement IPublishedContentExtended and not just be IPublishedContent,
// so we'd better check this here to fail as soon as we can.
//
// see also PublishedContentExtended.Extend
var extended = model as IPublishedContentExtended;
if (extended == null)
throw new Exception("IPublishedContentFactory created an object that does not implement IPublishedContentModelExtended.");
return model;
}
}
}