IContentManager 扩展

创建扩展

public static class ContentCreateExtensions {

        /* Item creation extension methods */

        public static T New<T>(this IContentManager manager, string contentType) where T : class, IContent {
            var contentItem = manager.New(contentType);
            if (contentItem == null)
                return null;

            var part = contentItem.Get<T>();
            if (part == null)
                throw new InvalidCastException();

            return part;
        }

        public static void Create(this IContentManager manager, IContent content) {
            manager.Create(content.ContentItem, VersionOptions.Draft);
            manager.Publish(content.ContentItem);
        }

        public static void Create(this IContentManager manager, IContent content, VersionOptions options) {
            manager.Create(content.ContentItem, options);
        }

        public static ContentItem Create(this IContentManager manager, string contentType) {
            return manager.Create<ContentItem>(contentType, init => { });
        }

        public static T Create<T>(this IContentManager manager, string contentType) where T : class, IContent {
            return manager.Create<T>(contentType, init => { });
        }

        public static T Create<T>(this IContentManager manager, string contentType, Action<T> initialize) where T : class, IContent {
            var content = manager.New<T>(contentType);
            if (content == null)
                return null;

            initialize(content);
            manager.Create(content.ContentItem);
            return content;
        }

        public static ContentItem Create(this IContentManager manager, string contentType, VersionOptions options) {
            return manager.Create<ContentItem>(contentType, options, init => { });
        }

        public static T Create<T>(this IContentManager manager, string contentType, VersionOptions options) where T : class, IContent {
            return manager.Create<T>(contentType, options, init => { });
        }

        public static T Create<T>(this IContentManager manager, string contentType, VersionOptions options, Action<T> initialize) where T : class, IContent {
            var content = manager.New<T>(contentType);
            if (content == null)
                return null;

            initialize(content);
            manager.Create(content.ContentItem, options);
            return content;
        }
    }

 

查询扩展

public static class ContentQueryExtensions {

        /* Query related extension methods */

        public static IContentQuery<TPart> Query<TPart>(this IContentManager manager)
            where TPart : ContentPart {
            return manager.Query().ForPart<TPart>();
        }

        public static IContentQuery<TPart, TRecord> Query<TPart, TRecord>(this IContentManager manager)
            where TPart : ContentPart<TRecord>
            where TRecord : ContentPartRecord {
            return manager.Query().ForPart<TPart>().Join<TRecord>();
        }

        public static IHqlQuery<TPart> HqlQuery<TPart>(this IContentManager manager)
            where TPart : ContentPart {
            return manager.HqlQuery().ForPart<TPart>();
        }

        /* Query(VersionOptions options) */

        public static IContentQuery<ContentItem> Query(this IContentManager manager, VersionOptions options) {
            return manager.Query().ForVersion(options);
        }

        public static IContentQuery<TPart> Query<TPart>(this IContentManager manager, VersionOptions options) where TPart : ContentPart {
            return manager.Query().ForPart<TPart>().ForVersion(options);
        }

        public static IContentQuery<TPart, TRecord> Query<TPart, TRecord>(this IContentManager manager, VersionOptions options)
            where TPart : ContentPart<TRecord>
            where TRecord : ContentPartRecord {
            return manager.Query().ForPart<TPart>().ForVersion(options).Join<TRecord>();
        }

        public static IContentQuery<ContentItem> Query(this IContentManager manager, VersionOptions options, params string[] contentTypeNames) {
            return manager.Query().ForVersion(options).ForType(contentTypeNames);
        }
        public static IContentQuery<TPart> Query<TPart>(this IContentManager manager, VersionOptions options, params string[] contentTypeNames) where TPart : ContentPart {
            return manager.Query().ForPart<TPart>().ForVersion(options).ForType(contentTypeNames);
        }

        /* Query(params string[] contentTypeNames) */

        public static IContentQuery<ContentItem> Query(this IContentManager manager, params string[] contentTypeNames) {
            return manager.Query().ForType(contentTypeNames);
        }
        public static IContentQuery<TPart> Query<TPart>(this IContentManager manager, params string[] contentTypeNames) where TPart : ContentPart {
            return manager.Query().ForPart<TPart>().ForType(contentTypeNames);
        }
        public static IContentQuery<TPart, TRecord> Query<TPart, TRecord>(this IContentManager manager, params string[] contentTypeNames)
            where TPart : ContentPart<TRecord>
            where TRecord : ContentPartRecord {
            return manager.Query().ForPart<TPart>().ForType(contentTypeNames).Join<TRecord>();
        }



        public static IEnumerable<T> List<T>(this IContentManager manager, params string[] contentTypeNames) where T : ContentPart {
            return manager.Query<T>(contentTypeNames).List();
        }

        public static IEnumerable<T> List<T>(this IContentQuery query) where T : IContent {
            return query.ForPart<T>().List();
        }

        public static IEnumerable<T> Slice<T>(this IContentQuery<T> query, int count) where T : IContent {
            return query.Slice(0, count);
        }
    }

获取Item扩展

    public static class ContentGetExtensions {

        public static ContentItem GetLatest(this IContentManager manager, int id) {
            return manager.Get(id, VersionOptions.Latest);
        }
        public static ContentItem GetDraftRequired(this IContentManager manager, int id) {
            return manager.Get(id, VersionOptions.DraftRequired);
        }

        public static T Get<T>(this IContentManager manager, int id) where T : class, IContent {
            var contentItem = manager.Get(id);
            return contentItem == null ? null : contentItem.Get<T>();
        }
        public static T Get<T>(this IContentManager manager, int id, VersionOptions options) where T : class, IContent {
            var contentItem = manager.Get(id, options);
            return contentItem == null ? null : contentItem.Get<T>();
        }
        public static T Get<T>(this IContentManager manager, int id, VersionOptions options, QueryHints hints) where T : class, IContent {
            var contentItem = manager.Get(id, options, hints);
            return contentItem == null ? null : contentItem.Get<T>();
        }
        public static T GetLatest<T>(this IContentManager manager, int id) where T : class, IContent {
            return Get<T>(manager, id, VersionOptions.Latest);
        }
        public static T GetDraftRequired<T>(this IContentManager manager, int id) where T : class, IContent {
            return Get<T>(manager, id, VersionOptions.DraftRequired);
        }
        
    }

显示和编辑扩展

public static class ContentExtensions {


        /* Display and editor convenience extension methods */

        public static TContent BuildDisplayShape<TContent>(this IContentManager manager, int id, string displayType) where TContent : class, IContent {
            var content = manager.Get<TContent>(id);
            if (content == null)
                return null;
            return manager.BuildDisplay(content, displayType);
        }

        public static TContent BuildEditorShape<TContent>(this IContentManager manager, int id) where TContent : class, IContent {
            var content = manager.Get<TContent>(id);
            if (content == null)
                return null;
            return manager.BuildEditor(content);

        }

        public static TContent UpdateEditorShape<TContent>(this IContentManager manager, int id, IUpdateModel updater) where TContent : class, IContent {
            var content = manager.Get<TContent>(id);
            if (content == null)
                return null;
            return manager.UpdateEditor(content, updater);
        }




        /* Aggregate item/part type casting extension methods */

        public static bool Is<T>(this IContent content) {
            return content == null ? false : content.ContentItem.Has(typeof(T));
        }
        public static T As<T>(this IContent content) where T : IContent {
            return content == null ? default(T) : (T)content.ContentItem.Get(typeof(T));
        }

        public static bool Has<T>(this IContent content) {
            return content == null ? false : content.ContentItem.Has(typeof(T));
        }
        public static T Get<T>(this IContent content) where T : IContent {
            return content == null ? default(T) : (T)content.ContentItem.Get(typeof(T));
        }

        public static IEnumerable<T> AsPart<T>(this IEnumerable<ContentItem> items) where T : IContent {
            return items == null ? null : items.Where(item => item.Is<T>()).Select(item => item.As<T>());
        }

        public static bool IsPublished(this IContent content) {
            return content.ContentItem.VersionRecord != null && content.ContentItem.VersionRecord.Published;
        }
        public static bool HasDraft(this IContent content) {
            return (
                       (content.ContentItem.VersionRecord != null)
                       && ((content.ContentItem.VersionRecord.Published == false)
                           || (content.ContentItem.VersionRecord.Published && content.ContentItem.VersionRecord.Latest == false)));
        }
        public static bool HasPublished(this IContent content) {
            return content.IsPublished() || content.ContentItem.ContentManager.Get(content.ContentItem.Id, VersionOptions.Published) != null;
        }
    }
posted @ 2012-08-17 13:04  commanderss  阅读(287)  评论(0编辑  收藏  举报