Skip to content

Commit

Permalink
Memoizing reversed handlers
Browse files Browse the repository at this point in the history
Fixes #891
  • Loading branch information
sebastienros committed Oct 3, 2017
1 parent e54c931 commit 98d0ab8
Showing 1 changed file with 15 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OrchardCore.Modules;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using OrchardCore.ContentManagement.Handlers;
using OrchardCore.ContentManagement.Metadata.Builders;
using OrchardCore.ContentManagement.Metadata;
using OrchardCore.ContentManagement.Metadata.Builders;
using OrchardCore.ContentManagement.Records;
using OrchardCore.Modules;
using YesSql;

namespace OrchardCore.ContentManagement
Expand All @@ -30,13 +30,15 @@ public class DefaultContentManager : IContentManager
{
_contentDefinitionManager = contentDefinitionManager;
Handlers = handlers;
ReversedHandlers = handlers.Reverse().ToArray();
_session = session;
_idGenerator = idGenerator;
_contentManagerSession = new DefaultContentManagerSession();
_logger = logger;
}

public IEnumerable<IContentHandler> Handlers { get; private set; }
public IEnumerable<IContentHandler> ReversedHandlers { get; private set; }

public ContentItem New(string contentType)
{
Expand All @@ -62,12 +64,12 @@ public ContentItem New(string contentType)
context2.ContentItem.ContentItemId = _idGenerator.GenerateUniqueId(context2.ContentItem);
context2.ContentItem.ContentItemVersionId = _idGenerator.GenerateUniqueId(context2.ContentItem);

Handlers.Reverse().Invoke(handler => handler.Activated(context2), _logger);
ReversedHandlers.Invoke(handler => handler.Activated(context2), _logger);

var context3 = new InitializingContentContext(context2.ContentItem);

Handlers.Invoke(handler => handler.Initializing(context3), _logger);
Handlers.Reverse().Invoke(handler => handler.Initialized(context3), _logger);
ReversedHandlers.Invoke(handler => handler.Initialized(context3), _logger);

// composite result is returned
return context3.ContentItem;
Expand Down Expand Up @@ -150,7 +152,7 @@ public async Task<ContentItem> GetAsync(string contentItemId, VersionOptions opt

// invoke handlers to acquire state, or at least establish lazy loading callbacks
Handlers.Invoke(handler => handler.Loading(context), _logger);
Handlers.Reverse().Invoke(handler => handler.Loaded(context), _logger);
ReversedHandlers.Invoke(handler => handler.Loaded(context), _logger);

contentItem = context.ContentItem;
}
Expand Down Expand Up @@ -198,7 +200,7 @@ public async Task<ContentItem> GetVersionAsync(string contentItemVersionId)

// invoke handlers to acquire state, or at least establish lazy loading callbacks
Handlers.Invoke(handler => handler.Loading(context), _logger);
Handlers.Reverse().Invoke(handler => handler.Loaded(context), _logger);
ReversedHandlers.Invoke(handler => handler.Loaded(context), _logger);

contentItem = context.ContentItem;
}
Expand Down Expand Up @@ -241,7 +243,7 @@ public async Task PublishAsync(ContentItem contentItem)

_session.Save(contentItem);

Handlers.Reverse().Invoke(handler => handler.Published(context), _logger);
ReversedHandlers.Invoke(handler => handler.Published(context), _logger);
}

public async Task UnpublishAsync(ContentItem contentItem)
Expand Down Expand Up @@ -284,7 +286,7 @@ public async Task UnpublishAsync(ContentItem contentItem)

_session.Save(publishedItem);

Handlers.Reverse().Invoke(handler => handler.Unpublished(context), _logger);
ReversedHandlers.Invoke(handler => handler.Unpublished(context), _logger);
}

protected async Task<ContentItem> BuildNewVersionAsync(ContentItem existingContentItem)
Expand Down Expand Up @@ -324,7 +326,7 @@ protected async Task<ContentItem> BuildNewVersionAsync(ContentItem existingConte
var context = new VersionContentContext(existingContentItem, buildingContentItem);

Handlers.Invoke(handler => handler.Versioning(context), _logger);
Handlers.Reverse().Invoke(handler => handler.Versioned(context), _logger);
ReversedHandlers.Invoke(handler => handler.Versioned(context), _logger);

return context.BuildingContentItem;
}
Expand Down Expand Up @@ -360,7 +362,7 @@ public void Create(ContentItem contentItem, VersionOptions options)
// invoke handlers to add information to persistent stores
Handlers.Invoke(handler => handler.Creating(context), _logger);

Handlers.Reverse().Invoke(handler => handler.Created(context), _logger);
ReversedHandlers.Invoke(handler => handler.Created(context), _logger);

_session.Save(contentItem);
_contentManagerSession.Store(contentItem);
Expand All @@ -373,7 +375,7 @@ public void Create(ContentItem contentItem, VersionOptions options)
Handlers.Invoke(handler => handler.Publishing(publishContext), _logger);

// invoke handlers to acquire state, or at least establish lazy loading callbacks
Handlers.Reverse().Invoke(handler => handler.Published(publishContext), _logger);
ReversedHandlers.Invoke(handler => handler.Published(publishContext), _logger);
}
}

Expand Down Expand Up @@ -408,7 +410,7 @@ public async Task RemoveAsync(ContentItem contentItem)
_session.Save(version);
}

Handlers.Reverse().Invoke(handler => handler.Removed(context), _logger);
ReversedHandlers.Invoke(handler => handler.Removed(context), _logger);
}

public async Task DiscardDraftAsync(ContentItem contentItem)
Expand All @@ -425,7 +427,7 @@ public async Task DiscardDraftAsync(ContentItem contentItem)
contentItem.Latest = false;
_session.Save(contentItem);

Handlers.Reverse().Invoke(handler => handler.Removed(context), _logger);
ReversedHandlers.Invoke(handler => handler.Removed(context), _logger);

var publishedItem = await GetAsync(contentItem.ContentItemId, VersionOptions.Published);

Expand Down

0 comments on commit 98d0ab8

Please sign in to comment.