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