Moving around some handler/driver machinary

Relocating IContentHandler imlementations that power IContentXxxDriver interfaces
Giving them component role suffix Coordinator
Merging two handlers into one content part driver coordinator

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-06-22 14:34:10 -07:00
parent 5db91c1689
commit 32d59676dc
10 changed files with 57 additions and 69 deletions

View File

@@ -5,21 +5,24 @@ using Moq;
using NUnit.Framework; using NUnit.Framework;
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Drivers.Coordinators;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.Environment.AutofacUtil; using Orchard.Environment.AutofacUtil;
using Orchard.Mvc.ViewModels; using Orchard.Mvc.ViewModels;
using Orchard.Tests.Utility;
using Orchard.UI.Zones; using Orchard.UI.Zones;
namespace Orchard.Tests.ContentManagement { namespace Orchard.Tests.ContentManagement.Handlers.Coordinators {
[TestFixture] [TestFixture]
public class ContentPartDriverHandlerTests { public class ContentPartDriverCoordinatorTests {
private IContainer _container; private IContainer _container;
[SetUp] [SetUp]
public void Init() { public void Init() {
var builder = new ContainerBuilder(); var builder = new ContainerBuilder();
//builder.RegisterModule(new ImplicitCollectionSupportModule()); //builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.RegisterType<ContentPartDriverHandler>().As<IContentHandler>(); builder.RegisterType<ContentPartDriverCoordinator>().As<IContentHandler>();
builder.RegisterAutoMocking();
_container = builder.Build(); _container = builder.Build();
} }

View File

@@ -168,7 +168,7 @@
<Compile Include="ContentManagement\Models\Phi.cs" /> <Compile Include="ContentManagement\Models\Phi.cs" />
<Compile Include="ContentManagement\Models\Styled.cs" /> <Compile Include="ContentManagement\Models\Styled.cs" />
<Compile Include="ContentManagement\Models\StyledHandler.cs" /> <Compile Include="ContentManagement\Models\StyledHandler.cs" />
<Compile Include="ContentManagement\ContentPartDriverHandlerTests.cs"> <Compile Include="ContentManagement\Handlers\Coordinators\ContentPartDriverCoordinatorTests.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Records\DeltaRecord.cs"> <Compile Include="ContentManagement\Records\DeltaRecord.cs">

View File

@@ -7,16 +7,14 @@ using Orchard.Localization;
using Orchard.Localization.Services; using Orchard.Localization.Services;
using Orchard.ContentManagement; using Orchard.ContentManagement;
namespace Orchard.Search.Services namespace Orchard.Search.Services {
{ public class SearchService : ISearchService {
public class SearchService : ISearchService private readonly IIndexManager _indexManager;
{
private readonly IContentManager _contentManager;
private readonly ICultureManager _cultureManager; private readonly ICultureManager _cultureManager;
public SearchService(IOrchardServices services, IContentManager contentManager, ICultureManager cultureManager) { public SearchService(IOrchardServices services, IIndexManager indexManager, ICultureManager cultureManager) {
Services = services; Services = services;
_contentManager = contentManager; _indexManager = indexManager;
_cultureManager = cultureManager; _cultureManager = cultureManager;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@@ -24,14 +22,20 @@ namespace Orchard.Search.Services
public IOrchardServices Services { get; set; } public IOrchardServices Services { get; set; }
public Localizer T { get; set; } public Localizer T { get; set; }
ISearchBuilder Search() {
return _indexManager.HasIndexProvider()
? _indexManager.GetSearchIndexProvider().CreateSearchBuilder("Search")
: new NullSearchBuilder();
}
IPageOfItems<T> ISearchService.Query<T>(string query, int page, int? pageSize, bool filterCulture, string[] searchFields, Func<ISearchHit, T> shapeResult) { IPageOfItems<T> ISearchService.Query<T>(string query, int page, int? pageSize, bool filterCulture, string[] searchFields, Func<ISearchHit, T> shapeResult) {
if (string.IsNullOrWhiteSpace(query)) if (string.IsNullOrWhiteSpace(query))
return null; return null;
var searchBuilder = _contentManager.Search().Parse(searchFields, query); var searchBuilder = Search().Parse(searchFields, query);
if ( filterCulture ) { if (filterCulture) {
var culture = _cultureManager.GetSiteCulture(); var culture = _cultureManager.GetSiteCulture();
// use LCID as the text representation gets analyzed by the query parser // use LCID as the text representation gets analyzed by the query parser
@@ -48,7 +52,7 @@ namespace Orchard.Search.Services
var pageOfItems = new PageOfItems<T>(searchBuilder.Search().Select(shapeResult)) { var pageOfItems = new PageOfItems<T>(searchBuilder.Search().Select(shapeResult)) {
PageNumber = page, PageNumber = page,
PageSize = pageSize != null ? (int) pageSize : totalCount, PageSize = pageSize != null ? (int)pageSize : totalCount,
TotalItemCount = totalCount TotalItemCount = totalCount
}; };

View File

@@ -18,7 +18,6 @@ namespace Orchard.ContentManagement {
private readonly IRepository<ContentItemVersionRecord> _contentItemVersionRepository; private readonly IRepository<ContentItemVersionRecord> _contentItemVersionRepository;
private readonly IContentDefinitionManager _contentDefinitionManager; private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly Func<IContentManagerSession> _contentManagerSession; private readonly Func<IContentManagerSession> _contentManagerSession;
private readonly IIndexManager _indexManager;
public DefaultContentManager( public DefaultContentManager(
IComponentContext context, IComponentContext context,
@@ -26,15 +25,13 @@ namespace Orchard.ContentManagement {
IRepository<ContentItemRecord> contentItemRepository, IRepository<ContentItemRecord> contentItemRepository,
IRepository<ContentItemVersionRecord> contentItemVersionRepository, IRepository<ContentItemVersionRecord> contentItemVersionRepository,
IContentDefinitionManager contentDefinitionManager, IContentDefinitionManager contentDefinitionManager,
Func<IContentManagerSession> contentManagerSession, Func<IContentManagerSession> contentManagerSession) {
IIndexManager indexManager) {
_context = context; _context = context;
_contentTypeRepository = contentTypeRepository; _contentTypeRepository = contentTypeRepository;
_contentItemRepository = contentItemRepository; _contentItemRepository = contentItemRepository;
_contentItemVersionRepository = contentItemVersionRepository; _contentItemVersionRepository = contentItemVersionRepository;
_contentDefinitionManager = contentDefinitionManager; _contentDefinitionManager = contentDefinitionManager;
_contentManagerSession = contentManagerSession; _contentManagerSession = contentManagerSession;
_indexManager = indexManager;
} }
private IEnumerable<IContentHandler> _handlers; private IEnumerable<IContentHandler> _handlers;
@@ -447,10 +444,10 @@ namespace Orchard.ContentManagement {
} }
} }
public ISearchBuilder Search() { //public ISearchBuilder Search() {
return _indexManager.HasIndexProvider() // return _indexManager.HasIndexProvider()
? _indexManager.GetSearchIndexProvider().CreateSearchBuilder("Search") // ? _indexManager.GetSearchIndexProvider().CreateSearchBuilder("Search")
: new NullSearchBuilder(); // : new NullSearchBuilder();
} //}
} }
} }

View File

@@ -3,12 +3,12 @@ using JetBrains.Annotations;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.Logging; using Orchard.Logging;
namespace Orchard.ContentManagement.Drivers { namespace Orchard.ContentManagement.Drivers.Coordinators {
[UsedImplicitly] [UsedImplicitly]
public class ContentFieldDriverHandler : ContentHandlerBase { public class ContentFieldDriverCoordinator : ContentHandlerBase {
private readonly IEnumerable<IContentFieldDriver> _drivers; private readonly IEnumerable<IContentFieldDriver> _drivers;
public ContentFieldDriverHandler(IEnumerable<IContentFieldDriver> drivers) { public ContentFieldDriverCoordinator(IEnumerable<IContentFieldDriver> drivers) {
_drivers = drivers; _drivers = drivers;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }

View File

@@ -3,12 +3,12 @@ using JetBrains.Annotations;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.Logging; using Orchard.Logging;
namespace Orchard.ContentManagement.Drivers { namespace Orchard.ContentManagement.Drivers.Coordinators {
[UsedImplicitly] [UsedImplicitly]
public class ContentItemDriverHandler : ContentHandlerBase { public class ContentItemDriverCoordinator : ContentHandlerBase {
private readonly IEnumerable<IContentItemDriver> _drivers; private readonly IEnumerable<IContentItemDriver> _drivers;
public ContentItemDriverHandler(IEnumerable<IContentItemDriver> drivers) { public ContentItemDriverCoordinator(IEnumerable<IContentItemDriver> drivers) {
_drivers = drivers; _drivers = drivers;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }

View File

@@ -1,19 +1,37 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData;
using Orchard.Logging; using Orchard.Logging;
namespace Orchard.ContentManagement.Drivers { namespace Orchard.ContentManagement.Drivers.Coordinators {
[UsedImplicitly] [UsedImplicitly]
public class ContentPartDriverHandler : ContentHandlerBase { public class ContentPartDriverCoordinator : ContentHandlerBase {
private readonly IEnumerable<IContentPartDriver> _drivers; private readonly IEnumerable<IContentPartDriver> _drivers;
private readonly IContentDefinitionManager _contentDefinitionManager;
public ContentPartDriverHandler(IEnumerable<IContentPartDriver> drivers) { public ContentPartDriverCoordinator(IEnumerable<IContentPartDriver> drivers, IContentDefinitionManager contentDefinitionManager) {
_drivers = drivers; _drivers = drivers;
_contentDefinitionManager = contentDefinitionManager;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }
public ILogger Logger { get; set; } public ILogger Logger { get; set; }
public override void Activating(ActivatingContentContext context) {
var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(context.ContentType);
if (contentTypeDefinition == null)
return;
foreach (var partInfo in _drivers.SelectMany(cpp => cpp.GetPartInfo())) {
var partName = partInfo.PartName;
var typePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(p => p.PartDefinition.Name == partName);
if (typePartDefinition != null) {
context.Builder.Weld(partInfo.Factory(typePartDefinition));
}
}
}
public override void BuildDisplayModel(BuildDisplayModelContext context) { public override void BuildDisplayModel(BuildDisplayModelContext context) {
_drivers.Invoke(driver => { _drivers.Invoke(driver => {

View File

@@ -20,7 +20,6 @@ namespace Orchard.ContentManagement {
void Remove(ContentItem contentItem); void Remove(ContentItem contentItem);
void Index(ContentItem contentItem, IDocumentIndex documentIndex); void Index(ContentItem contentItem, IDocumentIndex documentIndex);
ISearchBuilder Search();
void Flush(); void Flush();
IContentQuery<ContentItem> Query(); IContentQuery<ContentItem> Query();

View File

@@ -1,30 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.Drivers;
namespace Orchard.ContentManagement.MetaData {
public class ContentPartHandler : ContentHandlerBase {
private readonly IEnumerable<IContentPartDriver> _contentPartDrivers;
private readonly IContentDefinitionManager _contentDefinitionManager;
public ContentPartHandler(IEnumerable<IContentPartDriver> contentPartDrivers, IContentDefinitionManager contentDefinitionManager) {
_contentPartDrivers = contentPartDrivers;
_contentDefinitionManager = contentDefinitionManager;
}
public override void Activating(ActivatingContentContext context) {
var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(context.ContentType);
if (contentTypeDefinition == null)
return;
foreach (var partInfo in _contentPartDrivers.SelectMany(cpp => cpp.GetPartInfo())) {
var partName = partInfo.PartName;
var typePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(p => p.PartDefinition.Name == partName);
if (typePartDefinition != null) {
context.Builder.Weld(partInfo.Factory(typePartDefinition));
}
}
}
}
}

View File

@@ -172,11 +172,11 @@
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Drivers\ContentFieldDriver.cs" /> <Compile Include="ContentManagement\Drivers\ContentFieldDriver.cs" />
<Compile Include="ContentManagement\Drivers\ContentFieldDriverHandler.cs" /> <Compile Include="ContentManagement\Drivers\Coordinators\ContentFieldDriverCoordinator.cs" />
<Compile Include="ContentManagement\Drivers\ContentItemDriver.cs"> <Compile Include="ContentManagement\Drivers\ContentItemDriver.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Drivers\ContentItemDriverHandler.cs"> <Compile Include="ContentManagement\Drivers\Coordinators\ContentItemDriverCoordinator.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Drivers\ContentItemTemplateResult.cs"> <Compile Include="ContentManagement\Drivers\ContentItemTemplateResult.cs">
@@ -185,7 +185,7 @@
<Compile Include="ContentManagement\Drivers\ContentPartDriver.cs"> <Compile Include="ContentManagement\Drivers\ContentPartDriver.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Drivers\ContentPartDriverHandler.cs"> <Compile Include="ContentManagement\Drivers\Coordinators\ContentPartDriverCoordinator.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ContentManagement\Drivers\ContentTemplateResult.cs" /> <Compile Include="ContentManagement\Drivers\ContentTemplateResult.cs" />
@@ -299,9 +299,6 @@
<Compile Include="ContentManagement\MetaData\Builders\ContentPartDefinitionBuilder.cs" /> <Compile Include="ContentManagement\MetaData\Builders\ContentPartDefinitionBuilder.cs" />
<Compile Include="ContentManagement\MetaData\Builders\ContentTypeDefinitionBuilder.cs" /> <Compile Include="ContentManagement\MetaData\Builders\ContentTypeDefinitionBuilder.cs" />
<Compile Include="ContentManagement\MetaData\ContentFieldInfo.cs" /> <Compile Include="ContentManagement\MetaData\ContentFieldInfo.cs" />
<Compile Include="ContentManagement\MetaData\ContentPartHandler.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="ContentManagement\MetaData\ContentPartInfo.cs"> <Compile Include="ContentManagement\MetaData\ContentPartInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>