You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/13 18:13:51 UTC
[09/50] [abbrv] isis git commit: ISIS-1398: moving the command stuff
to PropertySetter/ClearFacetForDomainEventAbstract,
and out of the wrapped original PropertySetterFacet or PropertyClearFacet.
ISIS-1398: moving the command stuff to PropertySetter/ClearFacetForDomainEventAbstract, and out of the wrapped original PropertySetterFacet or PropertyClearFacet.
Also:
- remove DomainEventHelper#hasEventBusService() since will always return true
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6341730e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6341730e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6341730e
Branch: refs/heads/master
Commit: 6341730eae555bb069b80ee8fa84abfb65771476
Parents: 07342da
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon May 2 11:08:31 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon May 2 11:08:31 2016 +0100
----------------------------------------------------------------------
.../metamodel/facets/DomainEventHelper.java | 28 +---
.../ActionDomainEventFacetAbstract.java | 9 --
...onInvocationFacetForDomainEventAbstract.java | 12 +-
.../actions/action/invocation/CommandUtil.java | 6 +-
...ionAddToFacetForDomainEventFromAbstract.java | 4 -
.../CollectionDomainEventFacetAbstract.java | 9 --
...moveFromFacetForDomainEventFromAbstract.java | 5 -
...ropertyClearFacetForDomainEventAbstract.java | 153 ++++++++++++++++---
.../PropertyDomainEventFacetAbstract.java | 9 --
...opertySetterFacetForDomainEventAbstract.java | 147 ++++++++++++++++--
.../update/PropertyModifyFacetFactory.java | 2 +-
.../update/clear/PropertyClearFacet.java | 6 +-
.../clear/PropertyClearFacetViaClearMethod.java | 8 +-
.../PropertyClearFacetViaSetterMethod.java | 8 +-
.../update/modify/PropertySetterFacet.java | 2 +-
.../PropertySetterFacetViaModifyMethod.java | 76 +--------
.../PropertySetterFacetViaSetterMethod.java | 3 +-
.../services/command/CommandMementoService.java | 4 +-
.../specimpl/OneToOneAssociationDefault.java | 12 +-
.../PropertyAnnotationFacetFactoryTest.java | 2 +-
.../command/CommandMementoServiceDefault.java | 2 +-
...WrapperFactoryDefaultTest_wrappedObject.java | 2 +-
22 files changed, 320 insertions(+), 189 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
index 07d03e9..0e3a566 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
@@ -69,10 +69,6 @@ public class DomainEventHelper {
final Command command,
final ObjectAdapter resultAdapter) {
- if(!hasEventBusService()) {
- return null;
- }
-
try {
final ActionDomainEvent<?> event;
@@ -199,9 +195,6 @@ public class DomainEventHelper {
final Object oldValue,
final Object newValue) {
- if(!hasEventBusService()) {
- return null;
- }
try {
final PropertyDomainEvent<?, ?> event;
final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
@@ -292,9 +285,6 @@ public class DomainEventHelper {
final ObjectAdapter targetAdapter,
final CollectionDomainEvent.Of of,
final Object reference) {
- if(!hasEventBusService()) {
- return null;
- }
try {
final CollectionDomainEvent<?, ?> event;
if (existingEvent != null && phase.isExecuted()) {
@@ -419,22 +409,10 @@ public class DomainEventHelper {
//region > eventBusService
- private EventBusService eventBusService;
- private boolean searchedForEventBusService = false;
-
- public boolean hasEventBusService() {
- return getEventBusService() != null;
- }
-
private EventBusService getEventBusService() {
- if (!searchedForEventBusService) {
- eventBusService = this.servicesInjector.lookupService(EventBusService.class);
- }
- // this caching has been disabled, because it prevents integration tests from switching out the
- // EventBusService with a mock.
- // perhaps a better appraoch
- //searchedForEventBusService = true;
- return eventBusService;
+ // previously this method used to cache, however it prevents integration tests
+ // from switching out the EventBusService with a mock.
+ return this.servicesInjector.lookupService(EventBusService.class);
}
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index 19694b9..45e3dc5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -74,9 +74,6 @@ public abstract class ActionDomainEventFacetAbstract
@Override
public String hides(final VisibilityContext<? extends VisibilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final ActionDomainEvent<?> event =
domainEventHelper.postEventForAction(
@@ -94,9 +91,6 @@ public abstract class ActionDomainEventFacetAbstract
@Override
public String disables(UsabilityContext<? extends UsabilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final ActionDomainEvent<?> event =
domainEventHelper.postEventForAction(
@@ -132,9 +126,6 @@ public abstract class ActionDomainEventFacetAbstract
@Override
public String invalidates(final ValidityContext<? extends ValidityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final ActionInvocationContext aic = (ActionInvocationContext) ic;
final ActionDomainEvent<?> event =
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index d57539b..ef7c3fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -196,6 +196,8 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
final ObjectAdapter[] arguments,
final InteractionInitiatedBy interactionInitiatedBy) {
+ // similar code in Property{Setter/Clear}FacetFDEA
+
final CommandContext commandContext = getCommandContext();
final Command command = commandContext.getCommand();
@@ -208,8 +210,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
command,
null);
- final InvocationResult invocationResult = invoke(owningAction, targetAdapter, arguments);
-
+ final InvocationResult invocationResult = invokeInternal(owningAction, targetAdapter, arguments);
final ObjectAdapter invocationResultAdapter = invocationResult.getAdapter();
// ... post the executed event
@@ -229,14 +230,15 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
}
return filteredIfRequired(invocationResultAdapter, interactionInitiatedBy);
-
}
- private InvocationResult invoke(
+ private InvocationResult invokeInternal(
final ObjectAction owningAction,
final ObjectAdapter targetAdapter,
final ObjectAdapter[] argumentAdapters) {
+ // similar code in Property{Setter/Clear}FacetFDEA
+
try {
owningAction.setupActionInvocationContext(targetAdapter);
owningAction.setupCommand(targetAdapter, argumentAdapters);
@@ -294,6 +296,8 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
final ObjectAdapter[] argumentAdapters)
throws IllegalAccessException, InvocationTargetException {
+ // similar code in Property{Setter/Clear}FacetFDEA
+
final CommandContext commandContext = getCommandContext();
final Command command = commandContext.getCommand();
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index 92843ae..45db776 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -59,7 +59,11 @@ public class CommandUtil {
public static String argDescriptionFor(final ObjectAdapter valueAdapter) {
final StringBuilder buf = new StringBuilder();
- appendArg(buf, "new value", valueAdapter);
+ if(valueAdapter != null) {
+ appendArg(buf, "new value", valueAdapter);
+ } else {
+ buf.append("cleared");
+ }
return buf.toString();
}
public static String argDescriptionFor(
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
index bfa1dde..a5f4625 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
@@ -68,10 +68,6 @@ public abstract class CollectionAddToFacetForDomainEventFromAbstract
if (this.collectionAddToFacet == null) {
return;
}
- if(!domainEventHelper.hasEventBusService()) {
- collectionAddToFacet.add(targetAdapter, referencedObjectAdapter, interactionInitiatedBy);
- return;
- }
final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
index 4a433fb..8e80972 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
@@ -60,9 +60,6 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
@Override
public String hides(final VisibilityContext<? extends VisibilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final CollectionDomainEvent<?, ?> event =
domainEventHelper.postEventForCollection(
@@ -79,9 +76,6 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
@Override
public String disables(final UsabilityContext<? extends UsabilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final CollectionDomainEvent<?, ?> event =
domainEventHelper.postEventForCollection(
@@ -102,9 +96,6 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
@Override
public String invalidates(final ValidityContext<? extends ValidityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final ProposedHolder catc = (ProposedHolder) ic;
final Object proposed = catc.getProposed().getObject();
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
index ae52f09..500beaa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
@@ -69,11 +69,6 @@ public abstract class CollectionRemoveFromFacetForDomainEventFromAbstract
if (this.collectionRemoveFromFacet == null) {
return;
}
- if(!domainEventHelper.hasEventBusService()) {
- collectionRemoveFromFacet.remove(targetAdapter, referencedObjectAdapter, interactionInitiatedBy
- );
- return;
- }
final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
index a689f3c..882b598 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
@@ -20,8 +20,16 @@
package org.apache.isis.core.metamodel.facets.properties.property.modify;
import com.google.common.base.Objects;
+
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.command.spi.CommandService;
import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
+import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.iactn.InteractionContext;
+import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,6 +39,7 @@ import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public abstract class PropertyClearFacetForDomainEventAbstract
extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>>
@@ -47,6 +56,8 @@ public abstract class PropertyClearFacetForDomainEventAbstract
private final PropertyClearFacet clearFacet;
private final PropertyDomainEventFacetAbstract propertyDomainEventFacet;
+ private final ServicesInjector servicesInjector;
+
public PropertyClearFacetForDomainEventAbstract(
final Class<? extends PropertyDomainEvent<?, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
@@ -58,23 +69,21 @@ public abstract class PropertyClearFacetForDomainEventAbstract
this.getterFacet = getterFacet;
this.clearFacet = clearFacet;
this.propertyDomainEventFacet = propertyDomainEventFacet;
+ this.servicesInjector = servicesInjector;
this.domainEventHelper = new DomainEventHelper(servicesInjector);
}
@Override
public void clearProperty(
- final ObjectAdapter targetAdapter,
+ final OneToOneAssociation owningProperty, final ObjectAdapter targetAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
- if(clearFacet == null) {
- return;
- }
- if(!domainEventHelper.hasEventBusService()) {
- clearFacet.clearProperty(targetAdapter, interactionInitiatedBy);
+ // similar code in PropertySetterFacetFDEA and ActionInvocationFacetFDEA
+
+ if(clearFacet == null) {
return;
}
-
// ... post the executing event
final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
final PropertyDomainEvent<?, ?> event =
@@ -84,22 +93,98 @@ public abstract class PropertyClearFacetForDomainEventAbstract
getIdentified(), targetAdapter,
oldValue, null);
- // ... perform the property clear
- clearFacet.clearProperty(targetAdapter, interactionInitiatedBy);
+ clearPropertyInternal(owningProperty, targetAdapter, interactionInitiatedBy);
// reading the actual value from the target object, playing it safe...
final Object actualNewValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
- if(Objects.equal(oldValue, actualNewValue)) {
- // do nothing.
- return;
+ if (!Objects.equal(oldValue, actualNewValue)) {
+
+ // ... and post the event (reusing event from before)
+ domainEventHelper.postEventForProperty(
+ AbstractDomainEvent.Phase.EXECUTED,
+ eventType(), verify(event),
+ getIdentified(), targetAdapter,
+ oldValue, actualNewValue);
+
}
- // ... and post the event (reusing event from before)
- domainEventHelper.postEventForProperty(
- AbstractDomainEvent.Phase.EXECUTED,
- eventType(), verify(event),
- getIdentified(), targetAdapter,
- oldValue, actualNewValue);
+ }
+
+ private void clearPropertyInternal(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ // similar code in PropertySetterFacetFDEA and ActionInvocationFacetFDEA
+
+ final ObjectAdapter valueAdapter = null;
+ owningProperty.setupCommand(targetAdapter, valueAdapter);
+
+ invokeThruCommand(owningProperty, targetAdapter, interactionInitiatedBy);
+ }
+
+ private void invokeThruCommand(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ // similar code in PropertySetterFacetFDEA and ActionInvocationFacetFDEA
+
+ final CommandContext commandContext = getCommandContext();
+ final Command command = commandContext.getCommand();
+
+ final InteractionContext interactionContext = getInteractionContext();
+ final Interaction interaction = interactionContext.getInteraction();
+
+ final String propertyId = owningProperty.getIdentifier().toClassAndNameIdentityString();
+
+
+ if( command.getExecutor() == Command.Executor.USER &&
+ command.getExecuteIn() == org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND) {
+
+ // deal with background commands
+
+ // persist command so can it can subsequently be invoked in the 'background'
+ final CommandService commandService = getCommandService();
+ if (!commandService.persistIfPossible(command)) {
+ throw new IsisException(String.format(
+ "Unable to persist command for property '%s'; CommandService does not support persistent commands ",
+ propertyId));
+ }
+
+ } else {
+
+ // otherwise, go ahead and execute action in the 'foreground'
+
+ final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
+
+ final Object argValue = null;
+ final Interaction.PropertyArgs propertyArgs = new Interaction.PropertyArgs(propertyId, target, argValue);
+ final Interaction.MemberCallable<?> callable = new Interaction.MemberCallable<Interaction.PropertyArgs>() {
+ @Override public Object call(final Interaction.PropertyArgs propertyArgs11) {
+
+ // ... perform the property clear
+ clearFacet.clearProperty(owningProperty, targetAdapter, interactionInitiatedBy);
+
+ return null;
+ }
+ };
+
+ interaction.execute(callable, propertyArgs, getClockService(), command);
+
+ final Interaction.Execution priorExecution = interaction.getPriorExecution();
+
+ final RuntimeException executionExceptionIfAny = priorExecution.getException();
+ if(executionExceptionIfAny != null) {
+ throw executionExceptionIfAny;
+ }
+
+ //
+ // at this point in ActionInvocationFacetFDEA, the action is optionally published via the
+ // PublishingServiceInternal. However, we currently do not support the concept of publishing simple
+ // property modifications.
+ //
+ }
}
@@ -115,4 +200,36 @@ public abstract class PropertyClearFacetForDomainEventAbstract
return value();
}
+
+ private CommandContext getCommandContext() {
+ return lookupService(CommandContext.class);
+ }
+
+ private InteractionContext getInteractionContext() {
+ return lookupService(InteractionContext.class);
+ }
+
+ private CommandService getCommandService() {
+ return lookupService(CommandService.class);
+ }
+
+ private ClockService getClockService() {
+ return lookupService(ClockService.class);
+ }
+
+ private <T> T lookupService(final Class<T> serviceClass) {
+ T service = lookupServiceIfAny(serviceClass);
+ if(service == null) {
+ throw new IllegalStateException("The '" + serviceClass.getName() + "' service is not registered!");
+ }
+ return service;
+ }
+ private <T> T lookupServiceIfAny(final Class<T> serviceClass) {
+ return getServicesInjector().lookupService(serviceClass);
+ }
+
+ private ServicesInjector getServicesInjector() {
+ return servicesInjector;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index 44b1b8b..1a0494a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@ -66,9 +66,6 @@ public abstract class PropertyDomainEventFacetAbstract
@Override
public String hides(VisibilityContext<? extends VisibilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final PropertyDomainEvent<?, ?> event =
domainEventHelper.postEventForProperty(
@@ -84,9 +81,6 @@ public abstract class PropertyDomainEventFacetAbstract
@Override
public String disables(UsabilityContext<? extends UsabilityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final PropertyDomainEvent<?, ?> event =
domainEventHelper.postEventForProperty(
@@ -106,9 +100,6 @@ public abstract class PropertyDomainEventFacetAbstract
@Override
public String invalidates(ValidityContext<? extends ValidityEvent> ic) {
- if(!domainEventHelper.hasEventBusService()) {
- return null;
- }
final Object oldValue = getterFacet.getProperty(ic.getTarget(),
ic.getInitiatedBy());
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
index 4773c7d..1509e41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
@@ -20,8 +20,16 @@
package org.apache.isis.core.metamodel.facets.properties.property.modify;
import com.google.common.base.Objects;
+
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.command.spi.CommandService;
import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
+import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.iactn.InteractionContext;
+import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -47,6 +55,9 @@ public abstract class PropertySetterFacetForDomainEventAbstract
private final PropertySetterFacet setterFacet;
private final PropertyDomainEventFacetAbstract propertyDomainEventFacet;
+ private final ServicesInjector servicesInjector;
+
+
public PropertySetterFacetForDomainEventAbstract(
final Class<? extends PropertyDomainEvent<?, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
@@ -58,6 +69,7 @@ public abstract class PropertySetterFacetForDomainEventAbstract
this.getterFacet = getterFacet;
this.setterFacet = setterFacet;
this.propertyDomainEventFacet = propertyDomainEventFacet;
+ this.servicesInjector = servicesInjector;
this.domainEventHelper = new DomainEventHelper(servicesInjector);
}
@@ -67,14 +79,12 @@ public abstract class PropertySetterFacetForDomainEventAbstract
final ObjectAdapter targetAdapter,
final ObjectAdapter newValueAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
+
+ // similar code in PropertyClearFacetFDEA and ActionInvocationFacetFDEA
+
if(setterFacet == null) {
return;
}
- if(!domainEventHelper.hasEventBusService()) {
- setterFacet.setProperty(owningAssociation, targetAdapter, newValueAdapter, interactionInitiatedBy);
- return;
- }
-
// ... post the executing event
final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
@@ -87,23 +97,95 @@ public abstract class PropertySetterFacetForDomainEventAbstract
getIdentified(), targetAdapter,
oldValue, newValue);
- // ... perform the property modification
- setterFacet.setProperty(owningAssociation, targetAdapter, newValueAdapter, interactionInitiatedBy);
+ setPropertyInternal(owningAssociation, targetAdapter, newValueAdapter, interactionInitiatedBy);
// reading the actual value from the target object, playing it safe...
final Object actualNewValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
- if(Objects.equal(oldValue, actualNewValue)) {
- // do nothing
- return;
+ if (!Objects.equal(oldValue, actualNewValue)) {
+
+ // ... post the executed event
+ domainEventHelper.postEventForProperty(
+ AbstractDomainEvent.Phase.EXECUTED,
+ eventType(), verify(event),
+ getIdentified(), targetAdapter,
+ oldValue, actualNewValue);
}
+ }
- // ... post the executed event
- domainEventHelper.postEventForProperty(
- AbstractDomainEvent.Phase.EXECUTED,
- eventType(), verify(event),
- getIdentified(), targetAdapter,
- oldValue, actualNewValue);
+ public void setPropertyInternal(
+ final OneToOneAssociation owningAssociation,
+ final ObjectAdapter targetAdapter,
+ final ObjectAdapter newValueAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ // similar code in PropertyClearFacetFDEA and ActionInvocationFacetFDEA
+
+ owningAssociation.setupCommand(targetAdapter, newValueAdapter);
+
+ invokeThruCommand(owningAssociation, targetAdapter, newValueAdapter, interactionInitiatedBy);
+ }
+
+ private void invokeThruCommand(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final ObjectAdapter valueAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ // similar code in PropertyClearFacetFDEA and ActionInvocationFacetFDEA
+
+ final CommandContext commandContext = getCommandContext();
+ final Command command = commandContext.getCommand();
+
+ final InteractionContext interactionContext = getInteractionContext();
+ final Interaction interaction = interactionContext.getInteraction();
+
+ final String propertyId = owningProperty.getIdentifier().toClassAndNameIdentityString();
+
+ if( command.getExecutor() == Command.Executor.USER &&
+ command.getExecuteIn() == org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND) {
+
+ // deal with background commands
+
+ // persist command so can it can subsequently be invoked in the 'background'
+ final CommandService commandService = getCommandService();
+ if (!commandService.persistIfPossible(command)) {
+ throw new IsisException(String.format(
+ "Unable to persist command for property '%s'; CommandService does not support persistent commands ",
+ propertyId));
+ }
+
+ } else {
+
+ // otherwise, go ahead and execute action in the 'foreground'
+
+ final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
+ final Object argValue = ObjectAdapter.Util.unwrap(valueAdapter);
+
+ final Interaction.PropertyArgs propertyArgs = new Interaction.PropertyArgs(propertyId, target, argValue);
+ final Interaction.MemberCallable<?> callable = new Interaction.MemberCallable<Interaction.PropertyArgs>() {
+ @Override public Object call(final Interaction.PropertyArgs propertyArgs11) {
+
+ setterFacet.setProperty(
+ owningProperty, targetAdapter, valueAdapter, interactionInitiatedBy);
+ return null;
+ }
+ };
+
+ interaction.execute(callable, propertyArgs, getClockService(), command);
+
+ final Interaction.Execution priorExecution = interaction.getPriorExecution();
+
+ final RuntimeException executionExceptionIfAny = priorExecution.getException();
+ if(executionExceptionIfAny != null) {
+ throw executionExceptionIfAny;
+ }
+
+ //
+ // at this point in ActionInvocationFacetFDEA, the action is optionally published via the
+ // PublishingServiceInternal. However, we currently do not support the concept of publishing simple
+ // property modifications.
+ //
+ }
}
private Class<? extends PropertyDomainEvent<?, ?>> eventType() {
@@ -118,4 +200,37 @@ public abstract class PropertySetterFacetForDomainEventAbstract
return event;
}
+
+
+ private ServicesInjector getServicesInjector() {
+ return servicesInjector;
+ }
+
+ private CommandContext getCommandContext() {
+ return lookupService(CommandContext.class);
+ }
+
+ private InteractionContext getInteractionContext() {
+ return lookupService(InteractionContext.class);
+ }
+
+ private CommandService getCommandService() {
+ return lookupService(CommandService.class);
+ }
+
+ private ClockService getClockService() {
+ return lookupService(ClockService.class);
+ }
+
+ private <T> T lookupService(final Class<T> serviceClass) {
+ T service = lookupServiceIfAny(serviceClass);
+ if(service == null) {
+ throw new IllegalStateException("The '" + serviceClass.getName() + "' service is not registered!");
+ }
+ return service;
+ }
+ private <T> T lookupServiceIfAny(final Class<T> serviceClass) {
+ return getServicesInjector().lookupService(serviceClass);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertyModifyFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertyModifyFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertyModifyFacetFactory.java
index 2495356..907e1b9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertyModifyFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertyModifyFacetFactory.java
@@ -64,7 +64,7 @@ public class PropertyModifyFacetFactory extends MethodPrefixBasedFacetFactoryAbs
processMethodContext.removeMethod(modifyMethod);
final FacetHolder property = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modifyMethod, property, servicesInjector));
+ FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modifyMethod, property));
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
index 7d437bc..84670b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.facets.properties.update.clear;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
/**
* Mechanism for clearing a property of an object (that is, setting it to
@@ -35,5 +36,8 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
*/
public interface PropertyClearFacet extends Facet {
- public void clearProperty(ObjectAdapter inObject, final InteractionInitiatedBy interactionInitiatedBy);
+ void clearProperty(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
index ac79dc4..3f4e29a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -52,8 +53,11 @@ public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract
}
@Override
- public void clearProperty(final ObjectAdapter owningAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
- ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
+ public void clearProperty(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ ObjectAdapter.InvokeUtils.invoke(method, targetAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
index 99baf75..4772389 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -52,8 +53,11 @@ public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstrac
}
@Override
- public void clearProperty(final ObjectAdapter owningAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
- ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
+ public void clearProperty(
+ final OneToOneAssociation owningProperty,
+ final ObjectAdapter targetAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ ObjectAdapter.InvokeUtils.invoke(method, targetAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
index d76fe2a..c018807 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacet.java
@@ -41,7 +41,7 @@ public interface PropertySetterFacet extends Facet {
/**
* Sets the value of this property.
*/
- public void setProperty(
+ void setProperty(
final OneToOneAssociation owningAssociation,
final ObjectAdapter inObject,
final ObjectAdapter value,
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
index 137a63c..91dc8aa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
@@ -23,27 +23,21 @@ import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
-import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.InteractionContext;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
private final Method method;
- private final ServicesInjector servicesInjector;
- public PropertySetterFacetViaModifyMethod(final Method method, final FacetHolder holder, final ServicesInjector servicesInjector) {
+ public PropertySetterFacetViaModifyMethod(
+ final Method method,
+ final FacetHolder holder) {
super(holder);
this.method = method;
- this.servicesInjector = servicesInjector;
}
/**
@@ -62,46 +56,14 @@ public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstr
@Override
public void setProperty(
- final OneToOneAssociation owningAssociation, final ObjectAdapter targetAdapter,
+ final OneToOneAssociation owningAssociation,
+ final ObjectAdapter targetAdapter,
final ObjectAdapter valueAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
- owningAssociation.setupCommand(targetAdapter, valueAdapter);
-
- invokeThruCommand(owningAssociation, targetAdapter, valueAdapter);
-
+ ObjectAdapter.InvokeUtils.invoke(method, targetAdapter, valueAdapter);
}
- private void invokeThruCommand(
- final OneToOneAssociation owningAssociation,
- final ObjectAdapter targetAdapter,
- final ObjectAdapter valueAdapter) {
-
- // TODO: refactor to be the same as ActionInvocationFacetFDEA
-
- final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
- final Object argValue = ObjectAdapter.Util.unwrap(valueAdapter);
-
- final String propertyId = owningAssociation.getIdentifier().toClassAndNameIdentityString();
-
- final Interaction.PropertyArgs propertyArgs =
- new Interaction.PropertyArgs(propertyId, target, argValue);
-
- final CommandContext commandContext = getCommandContext();
- final Command command = commandContext.getCommand();
-
- final InteractionContext interactionContext = getInteractionContext();
- final Interaction interaction = interactionContext.getInteraction();
-
- final Interaction.MemberCallable<?> callable =
- new Interaction.MemberCallable<Interaction.PropertyArgs>() {
- @Override public Object call(final Interaction.PropertyArgs propertyArgs11) {
- return ObjectAdapter.InvokeUtils.invoke(method, targetAdapter, valueAdapter);
- }
- };
-
- interaction.execute(callable, propertyArgs, getClockService(), command);
- }
@Override
protected String toStringValues() {
@@ -109,32 +71,6 @@ public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstr
}
- private ServicesInjector getServicesInjector() {
- return servicesInjector;
- }
-
- private CommandContext getCommandContext() {
- return lookupService(CommandContext.class);
- }
-
- private InteractionContext getInteractionContext() {
- return lookupService(InteractionContext.class);
- }
-
- private ClockService getClockService() {
- return lookupService(ClockService.class);
- }
-
- private <T> T lookupService(final Class<T> serviceClass) {
- T service = lookupServiceIfAny(serviceClass);
- if(service == null) {
- throw new IllegalStateException("The '" + serviceClass.getName() + "' service is not registered!");
- }
- return service;
- }
- private <T> T lookupServiceIfAny(final Class<T> serviceClass) {
- return getServicesInjector().lookupService(serviceClass);
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
index d0bd8e9..a4e0dc5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
@@ -54,7 +54,8 @@ public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstr
@Override
public void setProperty(
- final OneToOneAssociation owningAssociation, final ObjectAdapter adapter,
+ final OneToOneAssociation owningAssociation,
+ final ObjectAdapter adapter,
final ObjectAdapter valueAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
ObjectAdapter.InvokeUtils.invoke(method, adapter, valueAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandMementoService.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandMementoService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandMementoService.java
index 156ecb9..faacb02 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandMementoService.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/command/CommandMementoService.java
@@ -54,14 +54,14 @@ public interface CommandMementoService {
final ObjectAdapter[] argAdapters);
/**
- * Returns a JAXB DTO (hence convertible to XML) that represents the intention to edit a property on
+ * Returns a JAXB DTO (hence convertible to XML) that represents the intention to edit (set or clear) a property on
* a target. The property can be a mixin or contributed.
*/
@Programmatic
CommandMementoDto asCommandMemento(
final ObjectAdapter targetAdapter,
final OneToOneAssociation association,
- final ObjectAdapter valueAdapter);
+ final ObjectAdapter valueAdapterOrNull);
@Programmatic
void addActionArgs(
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index ef6acbd..5c17de6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -231,7 +231,7 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
final ObjectAdapter ownerAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
- facet.clearProperty(ownerAdapter, interactionInitiatedBy);
+ facet.clearProperty(this, ownerAdapter, interactionInitiatedBy);
}
//endregion
@@ -330,11 +330,11 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
@Override
public void setupCommand(
final ObjectAdapter targetAdapter,
- final ObjectAdapter valueAdapter) {
+ final ObjectAdapter valueAdapterOrNull) {
- setupCommandTarget(targetAdapter, valueAdapter);
+ setupCommandTarget(targetAdapter, valueAdapterOrNull);
setupCommandMemberIdentifier();
- setupCommandMementoAndExecutionContext(targetAdapter, valueAdapter);
+ setupCommandMementoAndExecutionContext(targetAdapter, valueAdapterOrNull);
}
protected void setupCommandTarget(
@@ -348,10 +348,10 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
protected void setupCommandMementoAndExecutionContext(
final ObjectAdapter targetAdapter,
- final ObjectAdapter valueAdapter) {
+ final ObjectAdapter valueAdapterOrNull) {
final CommandMementoService commandMementoService = getCommandMementoService();
- final CommandMementoDto dto = commandMementoService.asCommandMemento(targetAdapter, this, valueAdapter);
+ final CommandMementoDto dto = commandMementoService.asCommandMemento(targetAdapter, this, valueAdapterOrNull);
setupCommandMementoAndExecutionContext(dto);
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index d644a0a..347c273 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -156,7 +156,7 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
FacetUtil.addFacet(new PropertyClearFacetAbstract(holder) {
@Override
public void clearProperty(
- final ObjectAdapter inObject,
+ final OneToOneAssociation owningProperty, final ObjectAdapter targetAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
}
});
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
index 8db796c..bab2aee 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
@@ -169,7 +169,7 @@ public class CommandMementoServiceDefault implements CommandMementoService {
public CommandMementoDto asCommandMemento(
final ObjectAdapter targetAdapter,
final OneToOneAssociation association,
- final ObjectAdapter valueAdapter) {
+ final ObjectAdapter valueAdapterOrNull) {
// TODO. introduce a choice for aim vs pmm, in the cmd.xsd
http://git-wip-us.apache.org/repos/asf/isis/blob/6341730e/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index e5d488f..ae682f5 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -334,7 +334,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
mockAuthenticationSessionProvider, mockAdapterManager
));
FacetUtil.addFacet(new PropertyInitializationFacetViaSetterMethod(init, facetedMethod));
- FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modify, facetedMethod, null));
+ FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modify, facetedMethod));
FacetUtil.addFacet(new PropertyClearFacetViaClearMethod(clear, facetedMethod));
FacetUtil.addFacet(new HideForContextFacetViaMethod(hide, facetedMethod));
FacetUtil.addFacet(new DisableForContextFacetViaMethod(disable, null, null, facetedMethod));