ISIS-1497: Fixes unmarshalling of arguments out of DTO within AbstractIsisSessionTemplate (and leverage this in BackgroundCommandExecution).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/dc671d0c Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/dc671d0c Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/dc671d0c Branch: refs/heads/master Commit: dc671d0c5ea09ccae92faf9373c0b3b0160cdb8f Parents: fa99caa Author: Dan Haywood <[email protected]> Authored: Tue Sep 27 15:01:45 2016 +0100 Committer: Dan Haywood <[email protected]> Committed: Tue Sep 27 15:04:36 2016 +0100 ---------------------------------------------------------------------- .../background/BackgroundCommandExecution.java | 44 ++++++++++++++------ .../AbstractIsisSessionTemplate.java | 22 +++++++++- 2 files changed, 52 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/dc671d0c/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java index 6362647..9343c11 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java @@ -35,7 +35,6 @@ import org.apache.isis.applib.services.iactn.Interaction; import org.apache.isis.applib.services.iactn.InteractionContext; import org.apache.isis.applib.services.jaxb.JaxbService; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.adapter.oid.RootOid; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil; import org.apache.isis.core.metamodel.spec.ObjectSpecification; @@ -175,11 +174,7 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp for (OidDto targetOidDto : targetOidDtos) { - final Bookmark bookmark = Bookmark.from(targetOidDto); - final Object targetObject = bookmarkService.lookup(bookmark); - - final ObjectAdapter targetAdapter = adapterFor(targetObject); - + final ObjectAdapter targetAdapter = targetAdapterFor(targetOidDto); final ObjectAction objectAction = findObjectAction(targetAdapter, memberId); // we pass 'null' for the mixedInAdapter; if this action _is_ a mixin then @@ -314,18 +309,41 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp if(arg == null) { return null; } - if(Bookmark.class != argType) { - return adapterFor(arg); - } else { - final Bookmark argBookmark = (Bookmark)arg; - final RootOid rootOid = RootOid.create(argBookmark); - return adapterFor(rootOid); - } + return argAdapterFor(argType, arg); + } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } + protected ObjectAdapter targetAdapterFor(final OidDto targetOidDto) { + +// // this is the original code, but it can be simplified ... +// // (moved out to separate method so that, if proven wrong, can override as a patch) + +// final Bookmark bookmark = Bookmark.from(targetOidDto); +// final Object targetObject = bookmarkService.lookup(bookmark); +// final ObjectAdapter targetAdapter = adapterFor(targetObject); + + return adapterFor(targetOidDto); + } + + protected ObjectAdapter argAdapterFor(final Class<?> argType, final Object arg) { + +// // this is the original code, but it can be simplified ... +// // (moved out to separate method so that, if proven wrong, can override as a patch) + +// if(Bookmark.class != argType) { +// return adapterFor(arg); +// } else { +// final Bookmark argBookmark = (Bookmark)arg; +// final RootOid rootOid = RootOid.create(argBookmark); +// return adapterFor(rootOid); +// } + + return adapterFor(arg); + } + private ObjectAdapter[] argAdaptersFor(final ActionDto actionDto) { final List<ParamDto> params = paramDtosFrom(actionDto); final List<ObjectAdapter> args = Lists.newArrayList( http://git-wip-us.apache.org/repos/asf/isis/blob/dc671d0c/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java index df2aa76..1bec4ed 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java @@ -16,9 +16,9 @@ */ package org.apache.isis.core.runtime.sessiontemplate; +import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.metamodel.adapter.oid.RootOid; import org.apache.isis.core.metamodel.specloader.SpecificationLoader; import org.apache.isis.core.runtime.system.context.IsisContext; @@ -27,6 +27,7 @@ import org.apache.isis.core.runtime.system.session.IsisSession; import org.apache.isis.core.runtime.system.session.IsisSessionFactory; import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; import org.apache.isis.core.runtime.system.transaction.TransactionalClosure; +import org.apache.isis.schema.common.v1.OidDto; public abstract class AbstractIsisSessionTemplate { @@ -82,8 +83,27 @@ public abstract class AbstractIsisSessionTemplate { // ////////////////////////////////////// protected ObjectAdapter adapterFor(final Object targetObject) { + if(targetObject instanceof OidDto) { + final OidDto oidDto = (OidDto) targetObject; + return adapterFor(oidDto); + } + if(targetObject instanceof Bookmark) { + final Bookmark bookmark = (Bookmark) targetObject; + return adapterFor(bookmark); + } return getPersistenceSession().adapterFor(targetObject); } + + protected ObjectAdapter adapterFor(final OidDto oidDto) { + final Bookmark bookmark = Bookmark.from(oidDto); + return adapterFor(bookmark); + } + + protected ObjectAdapter adapterFor(final Bookmark bookmark) { + final RootOid rootOid = RootOid.create(bookmark); + return adapterFor(rootOid); + } + protected ObjectAdapter adapterFor(final RootOid rootOid) { return getPersistenceSession().adapterFor(rootOid); }
