Continuing to refactor ModelDriver concept into ContentHandler

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041352
This commit is contained in:
loudej
2009-11-19 05:31:39 +00:00
parent 50da138925
commit 40632265f7
44 changed files with 248 additions and 255 deletions

View File

@@ -28,7 +28,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
builder.Register<AdminController>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<MembershipService>().As<IMembershipService>();
builder.Register<UserDriver>().As<IModelDriver>();
builder.Register<UserDriver>().As<IContentHandler>();
builder.Register(new Mock<INotifier>().Object);
}

View File

@@ -58,7 +58,7 @@ namespace Orchard.Tests.Packages.Users.Services {
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register<MembershipService>().As<IMembershipService>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<UserDriver>().As<IModelDriver>();
builder.Register<UserDriver>().As<IContentHandler>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
_session = _sessionFactory.OpenSession();
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();

View File

@@ -38,11 +38,11 @@ namespace Orchard.Tests.Models {
var builder = new ContainerBuilder();
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<AlphaDriver>().As<IModelDriver>();
builder.Register<BetaDriver>().As<IModelDriver>();
builder.Register<GammaDriver>().As<IModelDriver>();
builder.Register<FlavoredDriver>().As<IModelDriver>();
builder.Register<StyledDriver>().As<IModelDriver>();
builder.Register<AlphaDriver>().As<IContentHandler>();
builder.Register<BetaDriver>().As<IContentHandler>();
builder.Register<GammaDriver>().As<IContentHandler>();
builder.Register<FlavoredDriver>().As<IContentHandler>();
builder.Register<StyledDriver>().As<IContentHandler>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
@@ -139,7 +139,7 @@ namespace Orchard.Tests.Models {
}
[Test]
public void CreateShouldMakeModelAndModelTypeRecords() {
public void CreateShouldMakeModelAndContentTypeRecords() {
var beta = _manager.New("beta");
_manager.Create(beta);
@@ -148,13 +148,13 @@ namespace Orchard.Tests.Models {
Assert.That(modelRecord.ContentType.Name, Is.EqualTo("beta"));
}
private ContentItemRecord CreateModelRecord(string modelType) {
var modelRepository = _container.Resolve<IRepository<ContentItemRecord>>();
var modelTypeRepository = _container.Resolve<IRepository<ContentTypeRecord>>();
private ContentItemRecord CreateModelRecord(string contentType) {
var contentItemRepository = _container.Resolve<IRepository<ContentItemRecord>>();
var contentTypeRepository = _container.Resolve<IRepository<ContentTypeRecord>>();
var modelRecord = new ContentItemRecord { ContentType = new ContentTypeRecord { Name = modelType } };
modelTypeRepository.Create(modelRecord.ContentType);
modelRepository.Create(modelRecord);
var modelRecord = new ContentItemRecord { ContentType = new ContentTypeRecord { Name = contentType } };
contentTypeRepository.Create(modelRecord.ContentType);
contentItemRepository.Create(modelRecord);
_session.Flush();
_session.Clear();

View File

@@ -14,7 +14,7 @@ namespace Orchard.Tests.Models.Drivers {
var part = new TestModelPart();
contentItem.Weld(part);
((IModelDriver)modelDriver).Creating(new CreateModelContext { ContentItem = contentItem });
((IContentHandler)modelDriver).Creating(new CreateContentContext { ContentItem = contentItem });
Assert.That(part.CreatingCalled, Is.True);
}
@@ -23,7 +23,7 @@ namespace Orchard.Tests.Models.Drivers {
var modelDriver = new TestModelDriver();
var builder = new ContentItemBuilder("testing");
((IModelDriver)modelDriver).Activating(new ActivatingModelContext { Builder = builder, ModelType = "testing" });
((IContentHandler)modelDriver).Activating(new ActivatingContentContext { Builder = builder, ContentType = "testing" });
var model = builder.Build();
Assert.That(model.Is<TestModelPart>(), Is.True);
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
@@ -34,7 +34,7 @@ namespace Orchard.Tests.Models.Drivers {
}
public class TestModelDriver : ModelDriver {
public class TestModelDriver : ContentHandler {
public TestModelDriver() {
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
Filters.Add(new TestModelStorageFilter());
@@ -42,7 +42,7 @@ namespace Orchard.Tests.Models.Drivers {
}
public class TestModelStorageFilter : StorageFilterBase<TestModelPart> {
protected override void Creating(CreateModelContext context, TestModelPart instance) {
protected override void Creating(CreateContentContext context, TestModelPart instance) {
instance.CreatingCalled = true;
}
}

View File

@@ -1,9 +1,9 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class AlphaDriver : ModelDriver {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "alpha") {
public class AlphaDriver : ContentHandler {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") {
context.Builder.Weld<Alpha>();
}
}

View File

@@ -5,9 +5,9 @@ using System.Text;
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class BetaDriver : ModelDriver {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "beta") {
public class BetaDriver : ContentHandler {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "beta") {
context.Builder.Weld<Beta>();
}
}

View File

@@ -1,9 +1,9 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class FlavoredDriver : ModelDriver {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "beta" || context.ModelType == "alpha") {
public class FlavoredDriver : ContentHandler {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "beta" || context.ContentType == "alpha") {
context.Builder.Weld<Flavored>();
}
}

View File

@@ -12,7 +12,7 @@ namespace Orchard.Tests.Models.Stubs {
}
public class GammaDriver : ModelDriver {
public class GammaDriver : ContentHandler {
public GammaDriver(IRepository<GammaRecord> repository){
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));

View File

@@ -1,9 +1,9 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class StyledDriver : ModelDriver {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "alpha") {
public class StyledDriver : ContentHandler {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") {
context.Builder.Weld<Styled>();
}
}

View File

@@ -6,7 +6,7 @@ using Orchard.Security;
using Orchard.Services;
namespace Orchard.Core.Common.Models {
public class CommonDriver : ModelDriver {
public class CommonDriver : Orchard.Models.Driver.ContentHandler {
private readonly IClock _clock;
private readonly IAuthenticationService _authenticationService;
private readonly IContentManager _contentManager;
@@ -26,7 +26,7 @@ namespace Orchard.Core.Common.Models {
AddOnLoaded<CommonModel>(LoadOwnerModel);
}
void SetCreateTimesAndAuthor(CreateModelContext context, CommonModel instance) {
void SetCreateTimesAndAuthor(CreateContentContext context, CommonModel instance) {
if (instance.Record.CreatedUtc == null) {
instance.Record.CreatedUtc = _clock.UtcNow;
}
@@ -40,7 +40,7 @@ namespace Orchard.Core.Common.Models {
}
}
void LoadOwnerModel(LoadModelContext context, CommonModel instance) {
void LoadOwnerModel(LoadContentContext context, CommonModel instance) {
if (instance.Record.OwnerId != 0) {
instance.Owner = _contentManager.Get(instance.Record.OwnerId).As<IUser>();
}

View File

@@ -1,7 +1,7 @@
using Orchard.Models.Driver;
namespace Orchard.Core.Common.Models {
public class ContentDriver : ModelDriver {
public class ContentDriver : Orchard.Models.Driver.ContentHandler {
}
}

View File

@@ -3,7 +3,7 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Core.Common.Models {
public class RoutableDriver : ModelDriver {
public class RoutableDriver : Orchard.Models.Driver.ContentHandler {
public RoutableDriver(IRepository<RoutableRecord> repository) {
Filters.Add(new StorageFilterForRecord<RoutableRecord>(repository));
}

View File

@@ -9,7 +9,7 @@ using Orchard.Models.Driver;
namespace Orchard.Core.Settings.Controllers {
[ValidateInput(false)]
public class AdminController : Controller, IModelUpdater {
public class AdminController : Controller, IUpdateModel {
private readonly ISiteService _siteService;
private readonly IContentManager _modelManager;
private readonly INotifier _notifier;
@@ -43,9 +43,9 @@ namespace Orchard.Core.Settings.Controllers {
return RedirectToAction("Index");
}
#region IModelUpdater Members
#region IUpdateModel Members
bool IModelUpdater.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
}

View File

@@ -3,7 +3,7 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Core.Settings.Models {
public class SiteDriver : ModelDriver {
public class SiteDriver : ContentHandler {
public SiteDriver(IRepository<SiteSettingsRecord> repository){
Filters.Add(new ActivatingFilter<SiteModel>("site"));
Filters.Add(new StorageFilterForRecord<SiteSettingsRecord>(repository));

View File

@@ -12,13 +12,13 @@ namespace Orchard.Media.Models {
public virtual string RootMediaFolder { get; set; }
}
public class MediaSettingsDriver : ModelDriver {
public class MediaSettingsDriver : ContentHandler {
public MediaSettingsDriver(IRepository<MediaSettingsRecord> repository) {
Filters.Add(new ActivatingFilter<MediaSettings>("site"));
Filters.Add(new StorageFilterForRecord<MediaSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
}
protected override void GetEditors(GetModelEditorsContext context) {
protected override void GetEditors(GetContentEditorsContext context) {
var model = context.ContentItem.As<MediaSettings>();
if (model == null)
return;
@@ -26,7 +26,7 @@ namespace Orchard.Media.Models {
context.Editors.Add(ModelTemplate.For(model.Record, "MediaSettings"));
}
protected override void UpdateEditors(UpdateModelContext context) {
protected override void UpdateEditors(UpdateContentContext context) {
var model = context.ContentItem.As<MediaSettings>();
if (model == null)
return;

View File

@@ -11,7 +11,7 @@ using Orchard.UI.Models;
using Orchard.UI.Notify;
namespace Orchard.Roles.Models {
public class UserRolesDriver : ModelDriver {
public class UserRolesDriver : ContentHandler {
private readonly IRepository<UserRolesRecord> _userRolesRepository;
private readonly IRoleService _roleService;
private readonly INotifier _notifier;
@@ -22,19 +22,19 @@ namespace Orchard.Roles.Models {
_notifier = notifier;
}
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "user") {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "user") {
context.Builder.Weld<UserRolesModel>();
}
}
protected override void Creating(CreateModelContext context) {
protected override void Creating(CreateContentContext context) {
var userRoles = context.ContentItem.As<UserRolesModel>();
if (userRoles != null) {
}
}
protected override void Loading(LoadModelContext context) {
protected override void Loading(LoadContentContext context) {
var userRoles = context.ContentItem.As<UserRolesModel>();
if (userRoles != null) {
userRoles.Roles = _userRolesRepository.Fetch(x => x.UserId == context.ContentItem.Id)
@@ -42,7 +42,7 @@ namespace Orchard.Roles.Models {
}
}
protected override void GetEditors(GetModelEditorsContext context) {
protected override void GetEditors(GetContentEditorsContext context) {
var userRoles = context.ContentItem.As<UserRolesModel>();
if (userRoles != null) {
var roles =
@@ -63,7 +63,7 @@ namespace Orchard.Roles.Models {
}
}
protected override void UpdateEditors(UpdateModelContext context) {
protected override void UpdateEditors(UpdateContentContext context) {
var userRoles = context.ContentItem.As<UserRolesModel>();
if (userRoles != null) {
var viewModel = new UserRolesViewModel();

View File

@@ -12,7 +12,7 @@ using Orchard.Users.ViewModels;
namespace Orchard.Users.Controllers {
public class AdminController : Controller, IModelUpdater {
public class AdminController : Controller, IUpdateModel {
private readonly IMembershipService _membershipService;
private readonly IContentManager _contentManager;
private readonly IRepository<UserRecord> _userRepository;
@@ -86,7 +86,7 @@ namespace Orchard.Users.Controllers {
}
bool IModelUpdater.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
}
}

View File

@@ -2,7 +2,7 @@
using Orchard.Models.Driver;
namespace Orchard.Users.Models {
public class UserDriver : ModelDriver {
public class UserDriver : ContentHandler {
public UserDriver(IRepository<UserRecord> repository) {
Filters.Add(new ActivatingFilter<UserModel>("user"));
Filters.Add(new StorageFilterForRecord<UserRecord>(repository));

View File

@@ -6,9 +6,9 @@ using Orchard.Core.Common.Models;
using Orchard.Models.Driver;
namespace Orchard.Wikis.Models {
public class WikiPageDriver : ModelDriver {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "wikipage") {
public class WikiPageDriver : ContentHandler {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "wikipage") {
context.Builder
.Weld<CommonModel>()
.Weld<RoutableModel>()

View File

@@ -16,7 +16,7 @@ namespace Orchard.Wikis.Models {
public virtual string WikiEditTheme { get; set; }
}
public class WikiSettingsDriver : ModelDriver {
public class WikiSettingsDriver : ContentHandler {
public WikiSettingsDriver(IRepository<WikiSettingsRecord> repository) {
Filters.Add(new ActivatingFilter<WikiSettings>("site"));
Filters.Add(new StorageFilterForRecord<WikiSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
@@ -25,7 +25,7 @@ namespace Orchard.Wikis.Models {
Filters.Add(new ActivatingFilter<WikiSettings>("user"));
}
protected override void GetEditors(GetModelEditorsContext context) {
protected override void GetEditors(GetContentEditorsContext context) {
var model = context.ContentItem.As<WikiSettings>();
if (model == null)
return;
@@ -33,7 +33,7 @@ namespace Orchard.Wikis.Models {
context.Editors.Add(ModelTemplate.For(model.Record, "WikiSettings"));
}
protected override void UpdateEditors(UpdateModelContext context) {
protected override void UpdateEditors(UpdateContentContext context) {
var model = context.ContentItem.As<WikiSettings>();
if (model == null)
return;

View File

@@ -22,29 +22,29 @@ namespace Orchard.Models {
_contentTypeRepository = contentTypeRepository;
}
private IEnumerable<IModelDriver> _drivers;
public IEnumerable<IModelDriver> Drivers {
private IEnumerable<IContentHandler> _drivers;
public IEnumerable<IContentHandler> Drivers {
get {
if (_drivers == null)
_drivers = _context.Resolve<IEnumerable<IModelDriver>>();
_drivers = _context.Resolve<IEnumerable<IContentHandler>>();
return _drivers;
}
}
public virtual ContentItem New(string modelType) {
public virtual ContentItem New(string contentType) {
// create a new kernel for the model instance
var context = new ActivatingModelContext {
ModelType = modelType,
Builder = new ContentItemBuilder(modelType)
var context = new ActivatingContentContext {
ContentType = contentType,
Builder = new ContentItemBuilder(contentType)
};
// invoke drivers to weld aspects onto kernel
foreach (var driver in Drivers) {
driver.Activating(context);
}
var context2 = new ActivatedModelContext {
ContentType = modelType,
var context2 = new ActivatedContentContext {
ContentType = contentType,
ContentItem = context.Builder.Build()
};
foreach (var driver in Drivers) {
@@ -60,9 +60,9 @@ namespace Orchard.Models {
var contentItemRecord = _contentItemRepository.Get(id);
// create a context with a new instance to load
var context = new LoadModelContext {
var context = new LoadContentContext {
Id = contentItemRecord.Id,
ModelType = contentItemRecord.ContentType.Name,
ContentType = contentItemRecord.ContentType.Name,
ContentItemRecord = contentItemRecord,
ContentItem = New(contentItemRecord.ContentType.Name)
};
@@ -87,9 +87,9 @@ namespace Orchard.Models {
_contentItemRepository.Create(modelRecord);
// build a context with the initialized instance to create
var context = new CreateModelContext {
var context = new CreateContentContext {
Id = modelRecord.Id,
ModelType = modelRecord.ContentType.Name,
ContentType = modelRecord.ContentType.Name,
ContentItemRecord = modelRecord,
ContentItem = contentItem
};
@@ -108,15 +108,15 @@ namespace Orchard.Models {
}
public IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem) {
var context = new GetModelEditorsContext(contentItem);
var context = new GetContentEditorsContext(contentItem);
foreach (var driver in Drivers) {
driver.GetEditors(context);
}
return context.Editors;
}
public IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IModelUpdater updater) {
var context = new UpdateModelContext(contentItem, updater);
public IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater) {
var context = new UpdateContentContext(contentItem, updater);
foreach (var driver in Drivers) {
driver.UpdateEditors(context);
}
@@ -124,13 +124,13 @@ namespace Orchard.Models {
}
private ContentTypeRecord AcquireContentTypeRecord(string contentType) {
var modelTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType);
if (modelTypeRecord == null) {
var contentTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType);
if (contentTypeRecord == null) {
//TEMP: this is not safe... ContentItem types could be created concurrently?
modelTypeRecord = new ContentTypeRecord { Name = contentType };
_contentTypeRepository.Create(modelTypeRecord);
contentTypeRecord = new ContentTypeRecord { Name = contentType };
_contentTypeRepository.Create(contentTypeRecord);
}
return modelTypeRecord;
return contentTypeRecord;
}
}
}

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models.Driver {
public class ActivatedModelContext {
public class ActivatedContentContext {
public string ContentType { get; set; }
public ContentItem ContentItem { get; set; }
}

View File

@@ -1,6 +1,6 @@
namespace Orchard.Models.Driver {
public class ActivatingModelContext {
public string ModelType { get; set; }
public class ActivatingContentContext {
public string ContentType { get; set; }
public ContentItemBuilder Builder { get; set; }
}
}

View File

@@ -2,19 +2,19 @@ using System;
using System.Linq;
namespace Orchard.Models.Driver {
public class ActivatingFilter<TPart> : IModelActivatingFilter where TPart : class, IContentItemPart, new() {
public class ActivatingFilter<TPart> : IContentActivatingFilter where TPart : class, IContentItemPart, new() {
private readonly Func<string, bool> _predicate;
public ActivatingFilter(Func<string, bool> predicate) {
_predicate = predicate;
}
public ActivatingFilter(params string[] modelTypes)
: this(modelType => modelTypes.Contains(modelType)) {
public ActivatingFilter(params string[] contentTypes)
: this(contentType => contentTypes.Contains(contentType)) {
}
public void Activating(ActivatingModelContext context) {
if (_predicate(context.ModelType))
public void Activating(ActivatingContentContext context) {
if (_predicate(context.ContentType))
context.Builder.Weld<TPart>();
}
}

View File

@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Logging;
namespace Orchard.Models.Driver {
public abstract class ContentHandler : IContentHandler {
protected ContentHandler() {
Filters = new List<IContentFilter>();
Logger = NullLogger.Instance;
}
public List<IContentFilter> Filters { get; set; }
public ILogger Logger { get; set; }
public void AddOnActivated<TPart>(Action<ActivatedContentContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnActivated = handler });
}
public void AddOnCreating<TPart>(Action<CreateContentContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnCreating = handler });
}
public void AddOnLoaded<TPart>(Action<LoadContentContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnLoaded = handler });
}
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContentItemPart {
public Action<ActivatedContentContext, TPart> OnActivated { get; set; }
public Action<CreateContentContext, TPart> OnCreating { get; set; }
public Action<CreateContentContext, TPart> OnCreated { get; set; }
public Action<LoadContentContext, TPart> OnLoading { get; set; }
public Action<LoadContentContext, TPart> OnLoaded { get; set; }
protected override void Activated(ActivatedContentContext context, TPart instance) { if (OnActivated != null) OnActivated(context, instance); }
protected override void Creating(CreateContentContext context, TPart instance) { if (OnCreating != null) OnCreating(context, instance); }
protected override void Loaded(LoadContentContext context, TPart instance) { if (OnLoaded != null) OnLoaded(context, instance); }
}
void IContentHandler.Activating(ActivatingContentContext context) {
foreach (var filter in Filters.OfType<IContentActivatingFilter>())
filter.Activating(context);
Activating(context);
}
void IContentHandler.Activated(ActivatedContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Activated(context);
Activated(context);
}
void IContentHandler.Creating(CreateContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Creating(context);
Creating(context);
}
void IContentHandler.Created(CreateContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Created(context);
Created(context);
}
void IContentHandler.Loading(LoadContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Loading(context);
Loading(context);
}
void IContentHandler.Loaded(LoadContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Loaded(context);
Loaded(context);
}
void IContentHandler.GetEditors(GetContentEditorsContext context) { GetEditors(context); }
void IContentHandler.UpdateEditors(UpdateContentContext context) { UpdateEditors(context); }
protected virtual void Activating(ActivatingContentContext context) { }
protected virtual void Activated(ActivatedContentContext context) { }
protected virtual void Loading(LoadContentContext context) { }
protected virtual void Loaded(LoadContentContext context) { }
protected virtual void Creating(CreateContentContext context) { }
protected virtual void Created(CreateContentContext context) { }
protected virtual void GetEditors(GetContentEditorsContext context) {}
protected virtual void UpdateEditors(UpdateContentContext context) {}
}
}

View File

@@ -1,9 +1,9 @@
using Orchard.Models.Records;
namespace Orchard.Models.Driver {
public class CreateModelContext {
public class CreateContentContext {
public int Id { get; set; }
public string ModelType { get; set; }
public string ContentType { get; set; }
public ContentItemRecord ContentItemRecord { get; set; }
public ContentItem ContentItem { get; set; }
}

View File

@@ -2,8 +2,8 @@ using System.Collections.Generic;
using Orchard.UI.Models;
namespace Orchard.Models.Driver {
public class GetModelEditorsContext {
public GetModelEditorsContext(ContentItem part) {
public class GetContentEditorsContext {
public GetContentEditorsContext(ContentItem part) {
ContentItem = part;
Editors= new List<ModelTemplate>();
}

View File

@@ -0,0 +1,5 @@
namespace Orchard.Models.Driver {
public interface IContentActivatingFilter : IContentFilter {
void Activating(ActivatingContentContext context);
}
}

View File

@@ -1,4 +1,4 @@
namespace Orchard.Models.Driver {
public interface IModelFilter {
public interface IContentFilter {
}
}

View File

@@ -0,0 +1,13 @@
namespace Orchard.Models.Driver {
public interface IContentHandler : IDependency {
void Activating(ActivatingContentContext context);
void Activated(ActivatedContentContext context);
void Creating(CreateContentContext context);
void Created(CreateContentContext context);
void Loading(LoadContentContext context);
void Loaded(LoadContentContext context);
void GetEditors(GetContentEditorsContext context);
void UpdateEditors(UpdateContentContext context);
}
}

View File

@@ -0,0 +1,9 @@
namespace Orchard.Models.Driver {
public interface IContentStorageFilter : IContentFilter {
void Activated(ActivatedContentContext context);
void Creating(CreateContentContext context);
void Created(CreateContentContext context);
void Loading(LoadContentContext context);
void Loaded(LoadContentContext context);
}
}

View File

@@ -1,5 +0,0 @@
namespace Orchard.Models.Driver {
public interface IModelActivatingFilter : IModelFilter {
void Activating(ActivatingModelContext context);
}
}

View File

@@ -1,13 +0,0 @@
namespace Orchard.Models.Driver {
public interface IModelDriver : IDependency {
void Activating(ActivatingModelContext context);
void Activated(ActivatedModelContext context);
void Creating(CreateModelContext context);
void Created(CreateModelContext context);
void Loading(LoadModelContext context);
void Loaded(LoadModelContext context);
void GetEditors(GetModelEditorsContext context);
void UpdateEditors(UpdateModelContext context);
}
}

View File

@@ -1,9 +0,0 @@
namespace Orchard.Models.Driver {
public interface IModelStorageFilter : IModelFilter {
void Activated(ActivatedModelContext context);
void Creating(CreateModelContext context);
void Created(CreateModelContext context);
void Loading(LoadModelContext context);
void Loaded(LoadModelContext context);
}
}

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models.Driver {
public interface IModelUpdater {
public interface IUpdateModel {
bool TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class;
}
}

View File

@@ -2,9 +2,9 @@ using System;
using Orchard.Models.Records;
namespace Orchard.Models.Driver {
public class LoadModelContext {
public class LoadContentContext {
public int Id { get; set; }
public string ModelType { get; set; }
public string ContentType { get; set; }
public ContentItemRecord ContentItemRecord { get; set; }
public ContentItem ContentItem { get; set; }
}

View File

@@ -1,89 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Logging;
namespace Orchard.Models.Driver {
public abstract class ModelDriver : IModelDriver {
protected ModelDriver() {
Filters = new List<IModelFilter>();
Logger = NullLogger.Instance;
}
public List<IModelFilter> Filters { get; set; }
public ILogger Logger { get; set; }
public void AddOnActivated<TPart>(Action<ActivatedModelContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnActivated = handler });
}
public void AddOnCreating<TPart>(Action<CreateModelContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnCreating = handler });
}
public void AddOnLoaded<TPart>(Action<LoadModelContext, TPart> handler) where TPart : class, IContentItemPart {
Filters.Add(new InlineStorageFilter<TPart> { OnLoaded = handler });
}
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContentItemPart {
public Action<ActivatedModelContext, TPart> OnActivated { get; set; }
public Action<CreateModelContext, TPart> OnCreating { get; set; }
public Action<CreateModelContext, TPart> OnCreated { get; set; }
public Action<LoadModelContext, TPart> OnLoading { get; set; }
public Action<LoadModelContext, TPart> OnLoaded { get; set; }
protected override void Activated(ActivatedModelContext context, TPart instance) { if (OnActivated != null) OnActivated(context, instance); }
protected override void Creating(CreateModelContext context, TPart instance) { if (OnCreating != null) OnCreating(context, instance); }
protected override void Loaded(LoadModelContext context, TPart instance) { if (OnLoaded != null) OnLoaded(context, instance); }
}
void IModelDriver.Activating(ActivatingModelContext context) {
foreach (var filter in Filters.OfType<IModelActivatingFilter>())
filter.Activating(context);
Activating(context);
}
void IModelDriver.Activated(ActivatedModelContext context) {
foreach (var filter in Filters.OfType<IModelStorageFilter>())
filter.Activated(context);
Activated(context);
}
void IModelDriver.Creating(CreateModelContext context) {
foreach (var filter in Filters.OfType<IModelStorageFilter>())
filter.Creating(context);
Creating(context);
}
void IModelDriver.Created(CreateModelContext context) {
foreach (var filter in Filters.OfType<IModelStorageFilter>())
filter.Created(context);
Created(context);
}
void IModelDriver.Loading(LoadModelContext context) {
foreach (var filter in Filters.OfType<IModelStorageFilter>())
filter.Loading(context);
Loading(context);
}
void IModelDriver.Loaded(LoadModelContext context) {
foreach (var filter in Filters.OfType<IModelStorageFilter>())
filter.Loaded(context);
Loaded(context);
}
void IModelDriver.GetEditors(GetModelEditorsContext context) { GetEditors(context); }
void IModelDriver.UpdateEditors(UpdateModelContext context) { UpdateEditors(context); }
protected virtual void Activating(ActivatingModelContext context) { }
protected virtual void Activated(ActivatedModelContext context) { }
protected virtual void Loading(LoadModelContext context) { }
protected virtual void Loaded(LoadModelContext context) { }
protected virtual void Creating(CreateModelContext context) { }
protected virtual void Created(CreateModelContext context) { }
protected virtual void GetEditors(GetModelEditorsContext context) {}
protected virtual void UpdateEditors(UpdateModelContext context) {}
}
}

View File

@@ -1,34 +1,34 @@
namespace Orchard.Models.Driver {
public abstract class StorageFilterBase<TPart> : IModelStorageFilter where TPart : class, IContentItemPart {
public abstract class StorageFilterBase<TPart> : IContentStorageFilter where TPart : class, IContentItemPart {
protected virtual void Activated(ActivatedModelContext context, TPart instance) { }
protected virtual void Creating(CreateModelContext context, TPart instance) { }
protected virtual void Created(CreateModelContext context, TPart instance) { }
protected virtual void Loading(LoadModelContext context, TPart instance) { }
protected virtual void Loaded(LoadModelContext context, TPart instance) { }
protected virtual void Activated(ActivatedContentContext context, TPart instance) { }
protected virtual void Creating(CreateContentContext context, TPart instance) { }
protected virtual void Created(CreateContentContext context, TPart instance) { }
protected virtual void Loading(LoadContentContext context, TPart instance) { }
protected virtual void Loaded(LoadContentContext context, TPart instance) { }
void IModelStorageFilter.Activated(ActivatedModelContext context) {
void IContentStorageFilter.Activated(ActivatedContentContext context) {
if (context.ContentItem.Is<TPart>())
Activated(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Creating(CreateModelContext context) {
void IContentStorageFilter.Creating(CreateContentContext context) {
if (context.ContentItem.Is<TPart>())
Creating(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Created(CreateModelContext context) {
void IContentStorageFilter.Created(CreateContentContext context) {
if (context.ContentItem.Is<TPart>())
Created(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Loading(LoadModelContext context) {
void IContentStorageFilter.Loading(LoadContentContext context) {
if (context.ContentItem.Is<TPart>())
Loading(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Loaded(LoadModelContext context) {
void IContentStorageFilter.Loaded(LoadContentContext context) {
if (context.ContentItem.Is<TPart>())
Loaded(context, context.ContentItem.As<TPart>());
}

View File

@@ -11,16 +11,16 @@ namespace Orchard.Models.Driver {
public bool AutomaticallyCreateMissingRecord { get; set; }
protected override void Activated(ActivatedModelContext context, ContentItemPartWithRecord<TRecord> instance) {
protected override void Activated(ActivatedContentContext context, ContentItemPartWithRecord<TRecord> instance) {
instance.Record = new TRecord();
}
protected override void Creating(CreateModelContext context, ContentItemPartWithRecord<TRecord> instance) {
protected override void Creating(CreateContentContext context, ContentItemPartWithRecord<TRecord> instance) {
instance.Record.ContentItem = context.ContentItemRecord;
_repository.Create(instance.Record);
}
protected override void Loading(LoadModelContext context, ContentItemPartWithRecord<TRecord> instance) {
protected override void Loading(LoadContentContext context, ContentItemPartWithRecord<TRecord> instance) {
instance.Record = _repository.Get(instance.ContentItem.Id);
if (instance.Record == null && AutomaticallyCreateMissingRecord) {
instance.Record = new TRecord {ContentItem = context.ContentItemRecord};

View File

@@ -0,0 +1,9 @@
namespace Orchard.Models.Driver {
public class UpdateContentContext : GetContentEditorsContext {
public UpdateContentContext(ContentItem contentItem, IUpdateModel updater) : base(contentItem) {
Updater = updater;
}
public IUpdateModel Updater { get; set; }
}
}

View File

@@ -1,9 +0,0 @@
namespace Orchard.Models.Driver {
public class UpdateModelContext : GetModelEditorsContext {
public UpdateModelContext(ContentItem contentItem, IModelUpdater updater) : base(contentItem) {
Updater = updater;
}
public IModelUpdater Updater { get; set; }
}
}

View File

@@ -1,12 +1,5 @@
namespace Orchard.Models {
public interface IContentItemPart {
ContentItem ContentItem { get; set; }
//int Id { get; }
//string ModelType { get; }
//bool Is<T>() where T : class, IContentItemPart;
//T As<T>() where T : class, IContentItemPart;
//void Weld(IContentItemPart part);
}
}

View File

@@ -9,6 +9,6 @@ namespace Orchard.Models {
void Create(ContentItem contentItem);
IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem);
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IModelUpdater updater);
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater);
}
}

View File

@@ -124,12 +124,12 @@
<Compile Include="Localization\Localizer.cs" />
<Compile Include="Localization\LocalizedString.cs" />
<Compile Include="Localization\NullLocalizer.cs" />
<Compile Include="Models\Driver\ActivatedModelContext.cs" />
<Compile Include="Models\Driver\ActivatedContentContext.cs" />
<Compile Include="Models\Driver\ActivatingFilter.cs" />
<Compile Include="Models\Driver\IModelActivatingFilter.cs" />
<Compile Include="Models\Driver\IModelFilter.cs" />
<Compile Include="Models\Driver\IModelStorageFilter.cs" />
<Compile Include="Models\Driver\IModelUpdater.cs" />
<Compile Include="Models\Driver\IContentActivatingFilter.cs" />
<Compile Include="Models\Driver\IContentFilter.cs" />
<Compile Include="Models\Driver\IContentStorageFilter.cs" />
<Compile Include="Models\Driver\IUpdateModel.cs" />
<Compile Include="Environment\ServiceLocator.cs" />
<Compile Include="Logging\CastleLogger.cs" />
<Compile Include="Logging\CastleLoggerFactory.cs" />
@@ -140,16 +140,16 @@
<Compile Include="Logging\NullLogger.cs" />
<Compile Include="Logging\NullLoggerFactory.cs" />
<Compile Include="Models\DefaultContentManager.cs" />
<Compile Include="Models\Driver\CreateModelContext.cs" />
<Compile Include="Models\Driver\LoadModelContext.cs" />
<Compile Include="Models\Driver\CreateContentContext.cs" />
<Compile Include="Models\Driver\LoadContentContext.cs" />
<Compile Include="Models\Driver\ContentItemBuilder.cs" />
<Compile Include="Models\Driver\ModelDriver.cs" />
<Compile Include="Models\Driver\ActivatingModelContext.cs" />
<Compile Include="Models\Driver\GetModelEditorsContext.cs" />
<Compile Include="Models\Driver\ContentHandler.cs" />
<Compile Include="Models\Driver\ActivatingContentContext.cs" />
<Compile Include="Models\Driver\GetContentEditorsContext.cs" />
<Compile Include="Models\Driver\StorageFilterForRecord.cs" />
<Compile Include="Models\Driver\StorageFilterBase.cs" />
<Compile Include="Models\IContentManager.cs" />
<Compile Include="Models\Driver\IModelDriver.cs" />
<Compile Include="Models\Driver\IContentHandler.cs" />
<Compile Include="Models\ContentExtensions.cs" />
<Compile Include="Models\ContentItemPart.cs" />
<Compile Include="Models\IContentItemPart.cs" />
@@ -158,7 +158,7 @@
<Compile Include="Models\Records\ContentPartRecordBase.cs" />
<Compile Include="Models\Records\ContentTypeRecord.cs" />
<Compile Include="Models\Records\ContentItemRecord.cs" />
<Compile Include="Models\Driver\UpdateModelContext.cs" />
<Compile Include="Models\Driver\UpdateContentContext.cs" />
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
<Compile Include="Mvc\Filters\FilterProvider.cs" />
<Compile Include="Mvc\Filters\FilterResolvingActionInvoker.cs" />