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 2015/03/25 18:01:47 UTC

[1/8] isis git commit: ISIS-1045: simplifying DomainEventFacets, removing the threadlocal.

Repository: isis
Updated Branches:
  refs/heads/master 1aa380e0a -> f60ce0249


ISIS-1045: simplifying DomainEventFacets, removing the threadlocal.

The event is reused between the EXECUTING and EXECUTED phases, but nowhere else.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b8322fab
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b8322fab
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b8322fab

Branch: refs/heads/master
Commit: b8322fab4d30227ef1f36d5e1cad05ad430c64e6
Parents: 1aa380e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 07:11:17 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:35:22 2015 +0000

----------------------------------------------------------------------
 .../services/eventbus/AbstractDomainEvent.java  |   6 +-
 .../metamodel/facets/DomainEventHelper.java     | 109 +++++++++----------
 .../ActionDomainEventFacetAbstract.java         |  42 +++----
 ...onInvocationFacetForDomainEventAbstract.java |  58 +++++-----
 ...ionAddToFacetForDomainEventFromAbstract.java |  68 ++++++------
 .../CollectionDomainEventFacetAbstract.java     |  37 ++++---
 ...moveFromFacetForDomainEventFromAbstract.java |  63 +++++------
 ...ropertyClearFacetForDomainEventAbstract.java |  54 +++++----
 .../PropertyDomainEventFacetAbstract.java       |  28 ++---
 ...opertySetterFacetForDomainEventAbstract.java |  55 +++++-----
 10 files changed, 253 insertions(+), 267 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
index c39dfac..947e84e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
@@ -57,7 +57,11 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
          * via {@link org.apache.isis.applib.services.eventbus.ActionInteractionEvent#getCommand()}.
          */
         public boolean isExecutingOrLater() {
-            return this == EXECUTING || this == EXECUTED;
+            return isExecuting() || isExecuted();
+        }
+
+        public boolean isExecuting() {
+            return this == EXECUTING;
         }
 
         public boolean isExecuted() {

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 97f040a..bf1eb75 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
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.facets;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.command.Command;
@@ -52,13 +51,13 @@ public class DomainEventHelper {
     //region > postEventForAction, newActionDomainEvent
     @SuppressWarnings({ "rawtypes" })
     public ActionDomainEvent<?> postEventForAction(
+            final AbstractDomainEvent.Phase phase,
             final Class eventType,
             final ActionDomainEvent<?> existingEvent,
-            final Command command,
-            final AbstractDomainEvent.Phase phase,
             final IdentifiedHolder identified,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters,
+            final Command command,
             final ObjectAdapter resultAdapter) {
 
         if(!hasEventBusService()) {
@@ -66,45 +65,48 @@ public class DomainEventHelper {
         }
         try {
             final ActionDomainEvent<?> event;
-            if (existingEvent != null && phase.isValidatingOrLater()) {
+
+            if (existingEvent != null && phase.isExecuted()) {
+                // reuse existing event from the executing phase
                 event = existingEvent;
-                final Object[] arguments = ObjectAdapter.Util.unwrap(argumentAdapters);
-                event.setArguments(Arrays.asList(arguments));
-                if(phase.isExecutingOrLater()) {
-
-                    // current event always references the command (originally created by the xactn)
-                    event.setCommand(command);
-                    if(command != null) {
-                        if(command instanceof Command3) {
-                            final Command3 command3 = (Command3) command;
-                            command3.pushActionDomainEvent(event);
-                        } else if(command instanceof Command2 && event instanceof ActionInteractionEvent) {
-                            final Command2 command2 = (Command3) command;
-                            final ActionInteractionEvent<?> aie = (ActionInteractionEvent<?>) event;
-                            command2.pushActionInteractionEvent(aie);
-                        }
-                    }
-                }
 
-                if(phase.isExecuted()) {
-                    event.setReturnValue(resultAdapter != null? resultAdapter.getObject(): null);
-                }
+                event.setEventPhase(phase);
+                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
             } else {
+                // all other phases, create a new event
                 final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
                 final Object[] arguments = ObjectAdapter.Util.unwrap(argumentAdapters);
                 final Identifier identifier = identified.getIdentifier();
                 event = newActionDomainEvent(eventType, identifier, source, arguments);
-            }
 
-            if(identified instanceof ObjectAction) {
-                // should always be the case...
-                final ObjectAction objectAction = (ObjectAction) identified;
-                event.setActionSemantics(objectAction.getSemantics());
+                if(identified instanceof ObjectAction) {
+                    // should always be the case...
+                    final ObjectAction objectAction = (ObjectAction) identified;
+                    event.setActionSemantics(objectAction.getSemantics());
+                }
             }
 
-            event.setEventPhase(phase);
-            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+            if(phase.isExecuted()) {
+                event.setReturnValue(ObjectAdapter.Util.unwrap(resultAdapter));
+            }
 
+            // associate event with command...
+            if(command != null) {
+                event.setCommand(command);
+            }
+            // ... and associate command with event
+            if(command != null) {
+                if(phase.isExecuting()) {
+                    if(command instanceof Command3) {
+                        final Command3 command3 = (Command3) command;
+                        command3.pushActionDomainEvent(event);
+                    } else if(command instanceof Command2 && event instanceof ActionInteractionEvent) {
+                        final Command2 command2 = (Command3) command;
+                        final ActionInteractionEvent<?> aie = (ActionInteractionEvent<?>) event;
+                        command2.pushActionInteractionEvent(aie);
+                    }
+                }
+            }
 
             getEventBusService().post(event);
             return event;
@@ -143,13 +145,14 @@ public class DomainEventHelper {
 
     //region > postEventForProperty, newPropertyInteraction
     public PropertyDomainEvent<?, ?> postEventForProperty(
+            final AbstractDomainEvent.Phase phase,
             final Class eventType,
             final PropertyDomainEvent<?, ?> existingEvent,
-            final AbstractDomainEvent.Phase phase,
             final IdentifiedHolder identified,
             final ObjectAdapter targetAdapter,
             final Object oldValue,
             final Object newValue) {
+
         if(!hasEventBusService()) {
             return null;
         }
@@ -158,18 +161,20 @@ public class DomainEventHelper {
             final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
             final Identifier identifier = identified.getIdentifier();
 
-            // because of guava event bus buffering, we always create a new property domain event
-            //
-            event = newPropertyDomainEvent(eventType, identifier, source, oldValue, newValue);
-            event.setEventPhase(phase);
-            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+            if(existingEvent != null && phase.isExecuted()) {
+                // reuse existing event from the executing phase
+                event = existingEvent;
+
+                event.setEventPhase(phase);
+                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
 
-            // Old and New Values are populated only on the VALIDATION Phase and
-            // afterwards.
-            if (phase.isValidatingOrLater()) {
-                setEventOldValue(event, oldValue);
+                // just in case the actual new value held by the object is different from that applied
                 setEventNewValue(event, newValue);
+            } else {
+                // all other phases, create a new event
+                event = newPropertyDomainEvent(eventType, identifier, source, oldValue, newValue);
             }
+
             this.getEventBusService().post(event);
             return event;
         } catch (Exception e) {
@@ -177,10 +182,6 @@ public class DomainEventHelper {
         }
     }
 
-    private static <S,T> void setEventOldValue(PropertyDomainEvent<S, T> event, Object oldValue) {
-        event.setOldValue((T) oldValue);
-    }
-
     private static <S,T> void setEventNewValue(PropertyDomainEvent<S, T> event, Object newValue) {
         event.setNewValue((T) newValue);
     }
@@ -222,9 +223,9 @@ public class DomainEventHelper {
     //region > postEventForCollection, newCollectionDomainEvent
 
     public CollectionDomainEvent<?, ?> postEventForCollection(
+            AbstractDomainEvent.Phase phase,
             final Class eventType,
             final CollectionDomainEvent<?, ?> existingEvent,
-            AbstractDomainEvent.Phase phase,
             final IdentifiedHolder identified,
             final ObjectAdapter targetAdapter,
             final CollectionDomainEvent.Of of,
@@ -234,17 +235,19 @@ public class DomainEventHelper {
         }
         try {
             final CollectionDomainEvent<?, ?> event;
-            if (existingEvent != null && phase.isValidatingOrLater()) {
+            if (existingEvent != null && phase.isExecuted()) {
+                // reuse existing event from the executing phase
                 event = existingEvent;
-                event.setOf(of);
-                setEventValue(event, reference);
+
+                event.setEventPhase(phase);
+                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
             } else {
+                // all other phases, create a new event
                 final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
                 final Identifier identifier = identified.getIdentifier();
                 event = newCollectionDomainEvent(eventType, phase, identifier, source, of, reference);
             }
-            event.setEventPhase(phase);
-            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+
             getEventBusService().post(event);
             return event;
         } catch (Exception e) {
@@ -252,10 +255,6 @@ public class DomainEventHelper {
         }
     }
 
-    private static <T,S> void setEventValue(CollectionDomainEvent<T, S> event, Object reference) {
-        event.setValue((S) reference);
-    }
-
     @SuppressWarnings("unchecked")
     <S, T> CollectionDomainEvent<S, T> newCollectionDomainEvent(
             final Class<? extends CollectionDomainEvent<S, T>> type,

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 1507678..392c1da 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
@@ -48,16 +48,6 @@ public abstract class ActionDomainEventFacetAbstract
 
     private final DomainEventHelper domainEventHelper;
 
-    /**
-     * Pass event from validate to executing phases.
-     *
-     * <p>
-     * A new event is created for the hide, disable and validate phases.  But when the validate completes (and if does
-     * not invalidate), then the event is passed through to the executing phase using this thread-local.
-     * </p>
-     */
-    final static ThreadLocal<ActionDomainEvent<?>> currentInteraction = new ThreadLocal<>();
-
     public ActionDomainEventFacetAbstract(
             final Class<? extends ActionDomainEvent<?>> eventType,
             final FacetHolder holder,
@@ -74,14 +64,14 @@ public abstract class ActionDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final ObjectAdapter[] argumentAdapters = argumentAdaptersFrom(ic);
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
-                        eventType(), null, null, AbstractDomainEvent.Phase.HIDE,
-                        getIdentified(), ic.getTarget(), argumentAdapters, null);
+                        AbstractDomainEvent.Phase.HIDE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(), argumentAdapters,
+                        null,
+                        null);
         if (event != null && event.isHidden()) {
             return "Hidden by subscriber";
         }
@@ -94,14 +84,14 @@ public abstract class ActionDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final ObjectAdapter[] argumentAdapters = argumentAdaptersFrom(ic);
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
-                        eventType(), null, null, AbstractDomainEvent.Phase.DISABLE,
-                        getIdentified(), ic.getTarget(), argumentAdapters, null);
+                        AbstractDomainEvent.Phase.DISABLE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(), argumentAdapters,
+                        null,
+                        null);
         if (event != null && event.isDisabled()) {
             return event.getDisabledReason();
         }
@@ -119,20 +109,18 @@ public abstract class ActionDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final ActionInvocationContext aic = (ActionInvocationContext) ic;
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
-                        eventType(), null, null, AbstractDomainEvent.Phase.VALIDATE,
-                        getIdentified(), ic.getTarget(), aic.getArgs(), null);
+                        AbstractDomainEvent.Phase.VALIDATE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(), aic.getArgs(),
+                        null,
+                        null);
         if (event != null && event.isInvalid()) {
             return event.getInvalidityReason();
         }
 
-        // make available for next phases (executing/executed)
-        currentInteraction.set(event);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 e1439f4..26082f4 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
@@ -173,43 +173,35 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] arguments) {
 
-        try {
-
-            final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
-            final Command command = commandContext != null ? commandContext.getCommand() : null;
-
-            // pick up existing event (saved in thread local during the validation phase)
-            final ActionDomainEvent<?> existingEvent = ActionDomainEventFacetAbstract.currentInteraction.get();
-
-            // ... post the executing event
-            final ActionDomainEvent<?> event =
-                    domainEventHelper.postEventForAction(
-                            eventType, existingEvent, command, AbstractDomainEvent.Phase.EXECUTING,
-                            owningAction, targetAdapter, arguments, null);
-
-            // ... invoke the action
-            final InvocationResult invocationResult = internalInvoke(command, owningAction, targetAdapter, arguments);
+        final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
+        final Command command = commandContext != null ? commandContext.getCommand() : null;
 
-            // ... post the executed event
-            if (invocationResult.getWhetherInvoked()) {
-                // perhaps the Action was not properly invoked (i.e. an exception was raised).
-                // If invoked, then send the ActionInteractionEvent to the EventBus.
+        // ... post the executing event
+        final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
-                        eventType, verify(event), command, AbstractDomainEvent.Phase.EXECUTED,
-                        owningAction, targetAdapter, arguments, invocationResult.getAdapter());
-            }
-
-            return invocationResult.getAdapter();
-
-        } finally {
+                        AbstractDomainEvent.Phase.EXECUTING,
+                        eventType, null,
+                        owningAction, targetAdapter, arguments,
+                        command,
+                        null);
+
+        // ... invoke the action
+        final InvocationResult invocationResult = internalInvoke(command, owningAction, targetAdapter, arguments);
+
+        // ... post the executed event
+        if (invocationResult.getWhetherInvoked()) {
+            // perhaps the Action was not properly invoked (i.e. an exception was raised).
+            // If invoked ok, then post to the event bus
+            domainEventHelper.postEventForAction(
+                    AbstractDomainEvent.Phase.EXECUTED,
+                    eventType, verify(event),
+                    owningAction, targetAdapter, arguments,
+                    command,
+                    invocationResult.getAdapter());
+        }
 
-            // clean up event on thread
+        return invocationResult.getAdapter();
 
-            // note that if the action invoked some other action via a wrapper then this will already have been cleared
-            // out.  That isn't a problem; we only need to pass the event from validate to pre-execute, not to formally
-            // "nest" the events.
-            ActionDomainEventFacetAbstract.currentInteraction.set(null);
-        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 66ab12f..64b96a0 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
@@ -72,44 +72,46 @@ public abstract class CollectionAddToFacetForDomainEventFromAbstract
             return;
         }
 
-        try {
-            final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
-
-            // get hold of underlying collection
-            final Object collection = getterFacet.getProperty(targetAdapter);
-
-            // don't post event if has set semantics and already contains object
-            if(collection instanceof Set) {
-                Set<?> set = (Set<?>) collection;
-                if(set.contains(referencedObject)) {
-                    return;
-                }
-            }
-
+        final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
 
-            // either doesn't contain object, or doesn't have set semantics, so
-            // execute the add wrapped between the executing and executed events ...
+        // get hold of underlying collection
+        final Object collection = getterFacet.getProperty(targetAdapter);
 
-            // pick up existing event (saved in thread local during the validation phase)
-            final CollectionDomainEvent<?, ?> existingEvent = collectionDomainEventFacet.currentInteraction.get();
-
-            // ... post the executing event
-            final CollectionDomainEvent<?, ?> event = domainEventHelper.postEventForCollection(
-                    value(), existingEvent, AbstractDomainEvent.Phase.EXECUTING,
-                    getIdentified(), targetAdapter, CollectionDomainEvent.Of.ADD_TO, referencedObject);
+        // don't post event if has set semantics and already contains object
+        if(collection instanceof Set) {
+            Set<?> set = (Set<?>) collection;
+            if(set.contains(referencedObject)) {
+                return;
+            }
+        }
 
-            // ... perform add
-            collectionAddToFacet.add(targetAdapter, referencedObjectAdapter);
 
-            // ... post the executed event
-            domainEventHelper.postEventForCollection(
-                    value(), verify(event), AbstractDomainEvent.Phase.EXECUTED,
-                    getIdentified(), targetAdapter, CollectionDomainEvent.Of.ADD_TO, referencedObject);
+        // either doesn't contain object, or doesn't have set semantics, so
+        // execute the add wrapped between the executing and executed events ...
+
+        // ... post the executing event
+        final CollectionDomainEvent<?, ?> event =
+                domainEventHelper.postEventForCollection(
+                        AbstractDomainEvent.Phase.EXECUTING,
+                        eventType(), null,
+                        getIdentified(), targetAdapter,
+                        CollectionDomainEvent.Of.ADD_TO,
+                        referencedObject);
+
+        // ... perform add
+        collectionAddToFacet.add(targetAdapter, referencedObjectAdapter);
+
+        // ... post the executed event
+        domainEventHelper.postEventForCollection(
+                AbstractDomainEvent.Phase.EXECUTED,
+                value(), verify(event),
+                getIdentified(), targetAdapter,
+                CollectionDomainEvent.Of.ADD_TO,
+                referencedObject);
+    }
 
-        } finally {
-            // clean up
-            collectionDomainEventFacet.currentInteraction.set(null);
-        }
+    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
+        return value();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 b00a69f..4e221c7 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
@@ -27,6 +27,7 @@ import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
 import org.apache.isis.core.metamodel.interactions.ProposedHolder;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
@@ -38,8 +39,6 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
 
     private final DomainEventHelper domainEventHelper;
 
-    final static ThreadLocal<CollectionDomainEvent<?,?>> currentInteraction = new ThreadLocal<>();
-
     public CollectionDomainEventFacetAbstract(
             final Class<? extends CollectionDomainEvent<?, ?>> eventType,
             final FacetHolder holder,
@@ -55,12 +54,13 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
-                        eventType(), null, AbstractDomainEvent.Phase.HIDE, getIdentified(), ic.getTarget(), CollectionDomainEvent.Of.ACCESS, null);
+                        AbstractDomainEvent.Phase.HIDE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        CollectionDomainEvent.Of.ACCESS,
+                        null);
         if (event != null && event.isHidden()) {
             return "Hidden by subscriber";
         }
@@ -73,12 +73,13 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
-                    eventType(), null, AbstractDomainEvent.Phase.DISABLE, getIdentified(), ic.getTarget(), CollectionDomainEvent.Of.ACCESS, null);
+                        AbstractDomainEvent.Phase.DISABLE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        CollectionDomainEvent.Of.ACCESS,
+                        null);
         if (event != null && event.isDisabled()) {
             return event.getDisabledReason();
         }
@@ -91,21 +92,25 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final ProposedHolder catc = (ProposedHolder) ic;
         final Object proposed = catc.getProposed().getObject();
 
+        final CollectionDomainEvent.Of of =
+                ic instanceof CollectionAddToContext
+                        ? CollectionDomainEvent.Of.ADD_TO
+                        : CollectionDomainEvent.Of.REMOVE_FROM;
+
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
-                        eventType(), null, AbstractDomainEvent.Phase.VALIDATE, getIdentified(), ic.getTarget(), CollectionDomainEvent.Of.ADD_TO, proposed);
+                        AbstractDomainEvent.Phase.VALIDATE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        of,
+                        proposed);
         if (event != null && event.isInvalid()) {
             return event.getInvalidityReason();
         }
 
-        // make available for next phases (executing/executed)
-        currentInteraction.set(event);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 aa4bc25..10f9e00 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
@@ -73,41 +73,42 @@ public abstract class CollectionRemoveFromFacetForDomainEventFromAbstract
         }
 
 
-        try {
+        final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
 
-            final Object referencedObject = ObjectAdapter.Util.unwrap(referencedObjectAdapter);
+        // get hold of underlying collection
+        final Object collection = getterFacet.getProperty(targetAdapter);
 
-            // get hold of underlying collection
-            final Object collection = getterFacet.getProperty(targetAdapter);
-
-            // don't post event if the collections does not contain object
-            if (!((Collection<?>) collection).contains(referencedObject)) {
-                return;
-            }
-
-            // contains the element, so
-            // execute the remove wrapped between the executing and executed events ...
-
-            // pick up existing event (saved in thread local during the validation phase)
-            final CollectionDomainEvent<?, ?> existingEvent = collectionDomainEventFacet.currentInteraction.get();
-
-            // ... post the executing event
-            final CollectionDomainEvent<?, ?> event = domainEventHelper.postEventForCollection(
-                    value(), existingEvent, AbstractDomainEvent.Phase.EXECUTING,
-                    getIdentified(), targetAdapter, CollectionDomainEvent.Of.REMOVE_FROM, referencedObject);
-
-            // ... perform remove
-            collectionRemoveFromFacet.remove(targetAdapter, referencedObjectAdapter);
+        // don't post event if the collections does not contain object
+        if (!((Collection<?>) collection).contains(referencedObject)) {
+            return;
+        }
 
-            // ... and post the executed event
-            domainEventHelper.postEventForCollection(
-                    value(), verify(event), AbstractDomainEvent.Phase.EXECUTED,
-                    getIdentified(), targetAdapter, CollectionDomainEvent.Of.REMOVE_FROM, referencedObject);
+        // contains the element, so
+        // execute the remove wrapped between the executing and executed events ...
+
+        // ... post the executing event
+        final CollectionDomainEvent<?, ?> event =
+                domainEventHelper.postEventForCollection(
+                        AbstractDomainEvent.Phase.EXECUTING,
+                        eventType(), null,
+                        getIdentified(), targetAdapter,
+                        CollectionDomainEvent.Of.REMOVE_FROM,
+                        referencedObject);
+
+        // ... perform remove
+        collectionRemoveFromFacet.remove(targetAdapter, referencedObjectAdapter);
+
+        // ... and post the executed event
+        domainEventHelper.postEventForCollection(
+                AbstractDomainEvent.Phase.EXECUTED,
+                value(), verify(event),
+                getIdentified(), targetAdapter,
+                CollectionDomainEvent.Of.REMOVE_FROM,
+                referencedObject);
+    }
 
-        } finally {
-            // clean up
-            collectionDomainEventFacet.currentInteraction.set(null);
-        }
+    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
+        return value();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 2e0f35c..890e2e6 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
@@ -72,36 +72,32 @@ public abstract class PropertyClearFacetForDomainEventAbstract
         }
 
 
-        try {
-            // pick up existing event (saved in thread local during the validation phase)
-            final PropertyDomainEvent<?, ?> existingEvent =
-                    PropertyDomainEventFacetAbstract.currentInteraction.get();
-
-            // ... post the executing event
-            final Object oldValue = getterFacet.getProperty(targetAdapter);
-            domainEventHelper.postEventForProperty(
-                    value(), existingEvent, AbstractDomainEvent.Phase.EXECUTING,
-                    getIdentified(), targetAdapter, oldValue, null);
-
-            // ... perform the property clear
-            clearFacet.clearProperty(targetAdapter);
-
-            // reading the actual value from the target object, playing it safe...
-            final Object actualNewValue = getterFacet.getProperty(targetAdapter);
-            if(Objects.equal(oldValue, actualNewValue)) {
-                // do nothing.
-                return;
-            }
-
-            // ... and post the event (reusing existing event if available)
-            final PropertyDomainEvent<?, ?> event =
-                    PropertyDomainEventFacetAbstract.currentInteraction.get();
-            domainEventHelper.postEventForProperty(value(), verify(event), AbstractDomainEvent.Phase.EXECUTED, getIdentified(), targetAdapter, oldValue, actualNewValue);
-
-        } finally {
-            // clean up
-            PropertyDomainEventFacetAbstract.currentInteraction.set(null);
+        // ... post the executing event
+        final Object oldValue = getterFacet.getProperty(targetAdapter);
+        final PropertyDomainEvent<?, ?> event =
+                domainEventHelper.postEventForProperty(
+                        AbstractDomainEvent.Phase.EXECUTING,
+                        eventType(), null,
+                        getIdentified(), targetAdapter,
+                        oldValue, null);
+
+        // ... perform the property clear
+        clearFacet.clearProperty(targetAdapter);
+
+        // reading the actual value from the target object, playing it safe...
+        final Object actualNewValue = getterFacet.getProperty(targetAdapter);
+        if(Objects.equal(oldValue, actualNewValue)) {
+            // do nothing.
+            return;
         }
+
+        // ... and post the event (reusing event from before)
+        domainEventHelper.postEventForProperty(
+                AbstractDomainEvent.Phase.EXECUTED,
+                eventType(), verify(event),
+                getIdentified(), targetAdapter,
+                oldValue, actualNewValue);
+
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 7ebd397..c4c5d50 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
@@ -41,8 +41,6 @@ public abstract class PropertyDomainEventFacetAbstract
 
     private final DomainEventHelper domainEventHelper;
 
-    final static ThreadLocal<PropertyDomainEvent<?,?>> currentInteraction = new ThreadLocal<>();
-
     private final PropertyOrCollectionAccessorFacet getterFacet;
 
     public PropertyDomainEventFacetAbstract(
@@ -62,12 +60,12 @@ public abstract class PropertyDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
-                        eventType(), null, AbstractDomainEvent.Phase.HIDE, getIdentified(), ic.getTarget(), null, null);
+                        AbstractDomainEvent.Phase.HIDE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        null, null);
         if (event != null && event.isHidden()) {
             return "Hidden by subscriber";
         }
@@ -80,12 +78,12 @@ public abstract class PropertyDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
-                        eventType(), null, AbstractDomainEvent.Phase.DISABLE, getIdentified(), ic.getTarget(), null, null);
+                        AbstractDomainEvent.Phase.DISABLE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        null, null);
         if (event != null && event.isDisabled()) {
             return event.getDisabledReason();
         }
@@ -98,21 +96,19 @@ public abstract class PropertyDomainEventFacetAbstract
             return null;
         }
 
-        // reset (belt-n-braces)
-        currentInteraction.set(null);
-
         final Object oldValue = getterFacet.getProperty(ic.getTarget());
         final Object proposedValue = proposedFrom(ic);
 
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
-                        eventType(), null, AbstractDomainEvent.Phase.VALIDATE, getIdentified(), ic.getTarget(), oldValue, proposedValue);
+                        AbstractDomainEvent.Phase.VALIDATE,
+                        eventType(), null,
+                        getIdentified(), ic.getTarget(),
+                        oldValue, proposedValue);
         if (event != null && event.isInvalid()) {
             return event.getInvalidityReason();
         }
 
-        // make available for next phases (executing/executed)
-        currentInteraction.set(event);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b8322fab/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 903595d..0a3f540 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
@@ -70,35 +70,38 @@ public abstract class PropertySetterFacetForDomainEventAbstract
         }
 
 
-        try {
-            // pick up existing event (saved in thread local during the validation phase)
-            final PropertyDomainEvent<?, ?> existingEvent = PropertyDomainEventFacetAbstract.currentInteraction.get();
-
-            // ... post the executing event
-            final Object oldValue = getterFacet.getProperty(targetAdapter);
-            final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
-
-            domainEventHelper.postEventForProperty(
-                    value(), existingEvent, AbstractDomainEvent.Phase.EXECUTING,
-                    getIdentified(), targetAdapter, oldValue, newValue);
-
-            // ... perform the property modification
-            setterFacet.setProperty(targetAdapter, newValueAdapter);
+        // ... post the executing event
+        final Object oldValue = getterFacet.getProperty(targetAdapter);
+        final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
+
+        final PropertyDomainEvent<?, ?> event =
+                domainEventHelper.postEventForProperty(
+                        AbstractDomainEvent.Phase.EXECUTING,
+                        eventType(), null,
+                        getIdentified(), targetAdapter,
+                        oldValue, newValue);
+
+        // ... perform the property modification
+        setterFacet.setProperty(targetAdapter, newValueAdapter);
+
+        // reading the actual value from the target object, playing it safe...
+        final Object actualNewValue = getterFacet.getProperty(targetAdapter);
+        if(Objects.equal(oldValue, actualNewValue)) {
+            // do nothing
+            return;
+        }
 
-            // reading the actual value from the target object, playing it safe...
-            final Object actualNewValue = getterFacet.getProperty(targetAdapter);
-            if(Objects.equal(oldValue, actualNewValue)) {
-                return;
-            }
+        // ... post the executed event
+        domainEventHelper.postEventForProperty(
+                AbstractDomainEvent.Phase.EXECUTED,
+                eventType(), verify(event),
+                getIdentified(), targetAdapter,
+                oldValue, actualNewValue);
 
-            // ... post the executed event
-            final PropertyDomainEvent<?, ?> event = PropertyDomainEventFacetAbstract.currentInteraction.get();
-            domainEventHelper.postEventForProperty(value(), verify(event), AbstractDomainEvent.Phase.EXECUTED, getIdentified(), targetAdapter, oldValue, actualNewValue);
+    }
 
-        } finally {
-            // clean up
-            PropertyDomainEventFacetAbstract.currentInteraction.set(null);
-        }
+    private Class<? extends PropertyDomainEvent<?, ?>> eventType() {
+        return value();
     }
 
     /**


[7/8] isis git commit: ISIS-1052: adding spanish translations for simpleapp.

Posted by da...@apache.org.
ISIS-1052: adding spanish translations for simpleapp.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d1463a01
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d1463a01
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d1463a01

Branch: refs/heads/master
Commit: d1463a01adabdb2bee840ea3e97dc6669262f7ab
Parents: 0d64472
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 13:43:50 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:54:47 2015 +0000

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/translations-es.po  | 52 ++++++++++----------
 1 file changed, 26 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d1463a01/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
index 92b8bdb..4f93a31 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
@@ -19,12 +19,12 @@
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
 msgid ".pot file name"
-msgstr ""
+msgstr "fichero .pot"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
 msgid "Clear translation cache"
-msgstr ""
+msgstr "Limpiar la caché de traducciones"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#create()
@@ -34,17 +34,17 @@ msgstr "Crear"
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
 msgid "Discoverable"
-msgstr ""
+msgstr "Descubrible"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
 msgid "Download Translations"
-msgstr ""
+msgstr "Descargar traducciones"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()
 msgid "Exclamation mark is not allowed"
-msgstr ""
+msgstr "No se admite el signo de exclamación"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
@@ -54,33 +54,33 @@ msgstr "Buscar por Nombre"
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
 msgid "Fixture script"
-msgstr ""
+msgstr "Script de Instalación"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
 msgid "Friendly Name"
-msgstr ""
+msgstr "Nombre común"
 
 
 #: domainapp.dom.app.homepage.HomePageService#homePage()
 msgid "Home Page"
-msgstr ""
+msgstr "Página de Inicio"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#listAll()
 msgid "List All"
-msgstr "Lista de Todos"
+msgstr "Listar Todos"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#localName
 msgid "Local Name"
-msgstr ""
+msgstr "Nombre Local"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
 msgid "Lookup"
-msgstr ""
+msgstr "Buscar"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#name
@@ -97,66 +97,66 @@ msgstr "Nuevo nombre"
 
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
 msgid "Object"
-msgstr ""
+msgstr "Objeto"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#title()
 msgid "Object: {name}"
-msgstr ""
+msgstr "Objeto: {name}"
 
 
 #: domainapp.dom.app.homepage.HomePageViewModel#objects
 msgid "Objects"
-msgstr ""
+msgstr "Objetos"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Parameters"
-msgstr ""
+msgstr "Parámetros"
 
 
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
-msgstr ""
+msgstr "Prototipo"
 
 
 #: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
 msgid "Recreate Objects And Return First"
-msgstr ""
+msgstr "Recrear Objetos y Devolver el Primero"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#object
 msgid "Result"
-msgstr ""
+msgstr "Resultado"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#className
 msgid "Result class"
-msgstr ""
+msgstr "Clase del resultado"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#key
 msgid "Result key"
-msgstr ""
+msgstr "Clave del Resultado"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
 msgid "Run Fixture Script"
-msgstr ""
+msgstr "Ejecutar Script de Instalación"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript
 msgid "Script"
-msgstr ""
+msgstr "Script"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
-msgstr ""
+msgstr "Parámetros específicos del Script (si hay alguno). El formato depende de la implementación del script (por ejemplo, clave=valor, CSV, JSON, XML, etc.)"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#title()
@@ -166,17 +166,17 @@ msgstr "Objetos básicos"
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
-msgstr ""
+msgstr "Cambiar a Lectura de Traducciones"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
 msgid "Switch To Writing Translations"
-msgstr ""
+msgstr "Cambiar a Escritura de Traducciones"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#type
 msgid "Type"
-msgstr ""
+msgstr "Tipo"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()


[6/8] isis git commit: Merge branch 'ISIS-1113'

Posted by da...@apache.org.
Merge branch 'ISIS-1113'


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0d64472a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0d64472a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0d64472a

Branch: refs/heads/master
Commit: 0d64472add031e2ac5f3c85f685532f5bcf68093
Parents: 89853e2 95c6f17
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 16:53:34 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:53:34 2015 +0000

----------------------------------------------------------------------
 .../services/eventbus/AbstractDomainEvent.java  | 91 ++++++++++++++++++--
 .../ActionDomainEventFacetAbstract.java         | 22 ++++-
 .../CollectionDomainEventFacetAbstract.java     | 18 ++++
 .../PropertyDomainEventFacetAbstract.java       | 18 ++++
 4 files changed, 142 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[8/8] isis git commit: ISIS-1052: recreating simpleapp archetype

Posted by da...@apache.org.
ISIS-1052: recreating simpleapp archetype


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/f60ce024
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/f60ce024
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/f60ce024

Branch: refs/heads/master
Commit: f60ce02498dbe4a27ce205874273761c2b68c7f4
Parents: d1463a0
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 16:55:21 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:55:21 2015 +0000

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/translations-es.po  | 52 ++++++++++----------
 .../projects/basic/archetype.properties         |  2 +-
 2 files changed, 27 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f60ce024/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
index 92b8bdb..4f93a31 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
@@ -19,12 +19,12 @@
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
 msgid ".pot file name"
-msgstr ""
+msgstr "fichero .pot"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
 msgid "Clear translation cache"
-msgstr ""
+msgstr "Limpiar la caché de traducciones"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#create()
@@ -34,17 +34,17 @@ msgstr "Crear"
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
 msgid "Discoverable"
-msgstr ""
+msgstr "Descubrible"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
 msgid "Download Translations"
-msgstr ""
+msgstr "Descargar traducciones"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()
 msgid "Exclamation mark is not allowed"
-msgstr ""
+msgstr "No se admite el signo de exclamación"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
@@ -54,33 +54,33 @@ msgstr "Buscar por Nombre"
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
 msgid "Fixture script"
-msgstr ""
+msgstr "Script de Instalación"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
 msgid "Friendly Name"
-msgstr ""
+msgstr "Nombre común"
 
 
 #: domainapp.dom.app.homepage.HomePageService#homePage()
 msgid "Home Page"
-msgstr ""
+msgstr "Página de Inicio"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#listAll()
 msgid "List All"
-msgstr "Lista de Todos"
+msgstr "Listar Todos"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#localName
 msgid "Local Name"
-msgstr ""
+msgstr "Nombre Local"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
 msgid "Lookup"
-msgstr ""
+msgstr "Buscar"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#name
@@ -97,66 +97,66 @@ msgstr "Nuevo nombre"
 
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
 msgid "Object"
-msgstr ""
+msgstr "Objeto"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#title()
 msgid "Object: {name}"
-msgstr ""
+msgstr "Objeto: {name}"
 
 
 #: domainapp.dom.app.homepage.HomePageViewModel#objects
 msgid "Objects"
-msgstr ""
+msgstr "Objetos"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Parameters"
-msgstr ""
+msgstr "Parámetros"
 
 
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
-msgstr ""
+msgstr "Prototipo"
 
 
 #: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
 msgid "Recreate Objects And Return First"
-msgstr ""
+msgstr "Recrear Objetos y Devolver el Primero"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#object
 msgid "Result"
-msgstr ""
+msgstr "Resultado"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#className
 msgid "Result class"
-msgstr ""
+msgstr "Clase del resultado"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#key
 msgid "Result key"
-msgstr ""
+msgstr "Clave del Resultado"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
 msgid "Run Fixture Script"
-msgstr ""
+msgstr "Ejecutar Script de Instalación"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript
 msgid "Script"
-msgstr ""
+msgstr "Script"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
-msgstr ""
+msgstr "Parámetros específicos del Script (si hay alguno). El formato depende de la implementación del script (por ejemplo, clave=valor, CSV, JSON, XML, etc.)"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#title()
@@ -166,17 +166,17 @@ msgstr "Objetos básicos"
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
-msgstr ""
+msgstr "Cambiar a Lectura de Traducciones"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
 msgid "Switch To Writing Translations"
-msgstr ""
+msgstr "Cambiar a Escritura de Traducciones"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#type
 msgid "Type"
-msgstr ""
+msgstr "Tipo"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()

http://git-wip-us.apache.org/repos/asf/isis/blob/f60ce024/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
index 63d6814..77952fc 100644
--- a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
+++ b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,4 @@
-#Mon Mar 23 15:28:04 GMT 2015
+#Wed Mar 25 16:55:14 GMT 2015
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it


[4/8] isis git commit: ISIS-1113: allowing vetoing subscribers to provide translatable reasons

Posted by da...@apache.org.
ISIS-1113: allowing vetoing subscribers to provide translatable reasons


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/8346a6be
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/8346a6be
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/8346a6be

Branch: refs/heads/master
Commit: 8346a6beb55abfba319935e2eaba662ee5c73f8a
Parents: 89853e2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 07:31:57 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:52:50 2015 +0000

----------------------------------------------------------------------
 .../services/eventbus/AbstractDomainEvent.java  | 91 ++++++++++++++++++--
 .../ActionDomainEventFacetAbstract.java         | 22 ++++-
 .../CollectionDomainEventFacetAbstract.java     | 18 ++++
 .../PropertyDomainEventFacetAbstract.java       | 18 ++++
 4 files changed, 142 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8346a6be/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
index 947e84e..8ac07b7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import com.google.common.collect.Maps;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.util.ObjectContracts;
 
 public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
@@ -108,48 +109,103 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
         return hidden;
     }
 
+    /**
+     * @see #veto(String, Object...)
+     */
     public void hide() {
         this.hidden = true;
     }
     //endregion
 
-    //region > disable, isDisabled, getDisabledReason
+    //region > disable, isDisabled, getDisabledReason, getDisabledReasonTranslatable
     private String disabledReason;
+
     public boolean isDisabled() {
-        return disabledReason != null;
+        return disabledReason != null || disabledReasonTranslatable != null;
     }
+
+    /**
+     * If {@link #isDisabled() disabled}, then either this method returns non-null or {@link #getDisabledReasonTranslatable()} will.
+     */
     public String getDisabledReason() {
         return disabledReason;
     }
+
+    /**
+     * @see #disable(org.apache.isis.applib.services.i18n.TranslatableString)
+     * @see #veto(String, Object...)
+     */
     public void disable(final String reason) {
         this.disabledReason = reason;
     }
+
+    private TranslatableString disabledReasonTranslatable;
+    /**
+     * If {@link #isDisabled() disabled}, then either this method returns non-null or {@link #getDisabledReason()} will.
+     */
+    public TranslatableString getDisabledReasonTranslatable() {
+        return disabledReasonTranslatable;
+    }
+    /**
+     * @see #disable(java.lang.String)
+     * @see #veto(org.apache.isis.applib.services.i18n.TranslatableString)
+     */
+    public void disable(final TranslatableString reason) {
+        this.disabledReasonTranslatable = reason;
+    }
     //endregion
 
-    //region > invalidate, isInvalid, getInvalidityReason
+    //region > invalidate, isInvalid, getInvalidityReason, getInvalidityReasonTranslatable
     private String invalidatedReason;
     public boolean isInvalid() {
-        return invalidatedReason != null;
+        return invalidatedReason != null || invalidatedReasonTranslatable != null;
     }
+
+    /**
+     * If {@link #isInvalid() invalid}, then either this method returns non-null or {@link #getInvalidityReasonTranslatable()} will.
+     */
     public String getInvalidityReason() {
         return invalidatedReason;
     }
+    /**
+     * @see #invalidate(org.apache.isis.applib.services.i18n.TranslatableString)
+     * @see #veto(String, Object...)
+     */
     public void invalidate(final String reason) {
         this.invalidatedReason = reason;
     }
+
+    private TranslatableString invalidatedReasonTranslatable;
+    /**
+     * If {@link #isInvalid() invalid}, then either this method returns non-null or {@link #getInvalidityReason()} will.
+     */
+    public TranslatableString getInvalidityReasonTranslatable() {
+        return invalidatedReasonTranslatable;
+    }
+
+    /**
+     * @see #invalidate(String)
+     * @see #veto(org.apache.isis.applib.services.i18n.TranslatableString)
+     */
+    public void invalidate(final TranslatableString reason) {
+        this.invalidatedReasonTranslatable = reason;
+    }
+
     //endregion
 
     //region > veto
     /**
      * Use instead of {@link #hide()}, {@link #disable(String)} and {@link #invalidate(String)}; just delegates to
-     * appropriate vetoing method based upon the {@link #getPhase()}.
+     * appropriate vetoing method based upon the {@link #getEventPhase() phase}.
      *
      * <p>
      *     If hiding, just pass <tt>null</tt> for the parameter.
      * </p>
      *
-     * @param reason - reason why the interaction is being invalidated (ignored if in {@link org.apache.isis.applib.services.eventbus.AbstractInteractionEvent.Phase#HIDE hide} phase).
+     * @param reason - reason why the interaction is being invalidated (ignored if in {@link org.apache.isis.applib.services.eventbus.AbstractDomainEvent.Phase#HIDE hide} phase).
      * @param args
+     *
+     * @see #veto(org.apache.isis.applib.services.i18n.TranslatableString)
      */
     @Programmatic
     public void veto(final String reason, final Object... args) {
@@ -162,6 +218,29 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
                 invalidate(String.format(reason, args));
         }
     }
+    /**
+     * Use instead of {@link #hide()}, {@link #disable(org.apache.isis.applib.services.i18n.TranslatableString)} and {@link #invalidate(org.apache.isis.applib.services.i18n.TranslatableString)}; just delegates to
+     * appropriate vetoing method based upon the {@link #getEventPhase() phase}.
+     *
+     * <p>
+     *     If hiding, just pass <tt>null</tt> for the parameter.
+     * </p>
+     *
+     * @param translatableReason - reason why the interaction is being invalidated (ignored if in {@link org.apache.isis.applib.services.eventbus.AbstractDomainEvent.Phase#HIDE hide} phase).
+     *
+     * @see #veto(String)
+     */
+    @Programmatic
+    public void veto(final TranslatableString translatableReason) {
+        switch (getEventPhase()) {
+            case HIDE:
+                hide();
+            case DISABLE:
+                disable(translatableReason);
+            case VALIDATE:
+                invalidate(translatableReason);
+        }
+    }
     //endregion
 
     //region > userData

http://git-wip-us.apache.org/repos/asf/isis/blob/8346a6be/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 392c1da..c1f61e3 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
@@ -26,9 +26,12 @@ import org.apache.isis.applib.events.ValidityEvent;
 import org.apache.isis.applib.events.VisibilityEvent;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
@@ -42,6 +45,9 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 public abstract class ActionDomainEventFacetAbstract
         extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
 
+    private final TranslationService translationService;
+    private final String translationContext;
+
     static Class<? extends Facet> type() {
         return ActionDomainEventFacet.class;
     }
@@ -54,6 +60,11 @@ public abstract class ActionDomainEventFacetAbstract
             final ServicesInjector servicesInjector,
             final SpecificationLoader specificationLoader) {
         super(type(), holder, eventType, specificationLoader);
+
+        this.translationService = servicesInjector.lookupService(TranslationService.class);
+        // sadness: same as in TranslationFactory
+        this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
+
         domainEventHelper = new DomainEventHelper(servicesInjector);
     }
 
@@ -93,7 +104,12 @@ public abstract class ActionDomainEventFacetAbstract
                         null,
                         null);
         if (event != null && event.isDisabled()) {
+            final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getDisabledReason();
+
         }
         return null;
     }
@@ -104,7 +120,7 @@ public abstract class ActionDomainEventFacetAbstract
     }
 
     @Override
-    public String invalidates(ValidityContext<? extends ValidityEvent> ic) {
+    public String invalidates(final ValidityContext<? extends ValidityEvent> ic) {
         if(!domainEventHelper.hasEventBusService()) {
             return null;
         }
@@ -118,6 +134,10 @@ public abstract class ActionDomainEventFacetAbstract
                         null,
                         null);
         if (event != null && event.isInvalid()) {
+            final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getInvalidityReason();
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8346a6be/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 4e221c7..4a433fb 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
@@ -24,7 +24,10 @@ import org.apache.isis.applib.events.ValidityEvent;
 import org.apache.isis.applib.events.VisibilityEvent;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
@@ -38,6 +41,8 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 public abstract class CollectionDomainEventFacetAbstract extends SingleClassValueFacetAbstract implements CollectionDomainEventFacet {
 
     private final DomainEventHelper domainEventHelper;
+    private final TranslationService translationService;
+    private final String translationContext;
 
     public CollectionDomainEventFacetAbstract(
             final Class<? extends CollectionDomainEvent<?, ?>> eventType,
@@ -45,6 +50,11 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
             final ServicesInjector servicesInjector,
             final SpecificationLoader specificationLoader) {
         super(CollectionDomainEventFacet.class, holder, eventType, specificationLoader);
+
+        this.translationService = servicesInjector.lookupService(TranslationService.class);
+        // sadness: same as in TranslationFactory
+        this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
+
         domainEventHelper = new DomainEventHelper(servicesInjector);
     }
 
@@ -81,6 +91,10 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
                         CollectionDomainEvent.Of.ACCESS,
                         null);
         if (event != null && event.isDisabled()) {
+            final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getDisabledReason();
         }
         return null;
@@ -108,6 +122,10 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
                         of,
                         proposed);
         if (event != null && event.isInvalid()) {
+            final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getInvalidityReason();
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8346a6be/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 c4c5d50..77afa56 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
@@ -24,8 +24,11 @@ import org.apache.isis.applib.events.ValidityEvent;
 import org.apache.isis.applib.events.VisibilityEvent;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
@@ -42,6 +45,8 @@ public abstract class PropertyDomainEventFacetAbstract
     private final DomainEventHelper domainEventHelper;
 
     private final PropertyOrCollectionAccessorFacet getterFacet;
+    private final TranslationService translationService;
+    private final String translationContext;
 
     public PropertyDomainEventFacetAbstract(
             final Class<? extends PropertyDomainEvent<?, ?>> eventType,
@@ -51,6 +56,11 @@ public abstract class PropertyDomainEventFacetAbstract
             final SpecificationLoader specificationLoader) {
         super(PropertyDomainEventFacet.class, holder, eventType, specificationLoader);
         this.getterFacet = getterFacet;
+
+        this.translationService = servicesInjector.lookupService(TranslationService.class);
+        // sadness: same as in TranslationFactory
+        this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
+
         domainEventHelper = new DomainEventHelper(servicesInjector);
     }
 
@@ -85,6 +95,10 @@ public abstract class PropertyDomainEventFacetAbstract
                         getIdentified(), ic.getTarget(),
                         null, null);
         if (event != null && event.isDisabled()) {
+            final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getDisabledReason();
         }
         return null;
@@ -106,6 +120,10 @@ public abstract class PropertyDomainEventFacetAbstract
                         getIdentified(), ic.getTarget(),
                         oldValue, proposedValue);
         if (event != null && event.isInvalid()) {
+            final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable();
+            if(reasonTranslatable != null) {
+                return reasonTranslatable.translate(translationService, translationContext);
+            }
             return event.getInvalidityReason();
         }
 


[3/8] isis git commit: Merge branch 'ISIS-1045'

Posted by da...@apache.org.
Merge branch 'ISIS-1045'


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/89853e24
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/89853e24
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/89853e24

Branch: refs/heads/master
Commit: 89853e246b187aedad5ec52e418c196d96ca1eaf
Parents: 1aa380e 51e3591
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 16:52:08 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:52:08 2015 +0000

----------------------------------------------------------------------
 .../services/eventbus/AbstractDomainEvent.java  |   6 +-
 .../metamodel/facets/DomainEventHelper.java     | 103 +++++++++----------
 .../ActionDomainEventFacetAbstract.java         |  42 +++-----
 ...onInvocationFacetForDomainEventAbstract.java |  58 +++++------
 ...ionAddToFacetForDomainEventFromAbstract.java |  68 ++++++------
 .../CollectionDomainEventFacetAbstract.java     |  37 ++++---
 ...moveFromFacetForDomainEventFromAbstract.java |  63 ++++++------
 ...ropertyClearFacetForDomainEventAbstract.java |  54 +++++-----
 .../PropertyDomainEventFacetAbstract.java       |  28 +++--
 ...opertySetterFacetForDomainEventAbstract.java |  55 +++++-----
 10 files changed, 250 insertions(+), 264 deletions(-)
----------------------------------------------------------------------



[2/8] isis git commit: ISIS-1045: fix in algorithm of DomainEventHelper

Posted by da...@apache.org.
ISIS-1045: fix in algorithm of DomainEventHelper


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/51e35911
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/51e35911
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/51e35911

Branch: refs/heads/master
Commit: 51e35911662e747c21e6992bb0dcdcb36a06ab34
Parents: b8322fa
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 16:29:58 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:51:19 2015 +0000

----------------------------------------------------------------------
 .../metamodel/facets/DomainEventHelper.java     | 24 ++++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/51e35911/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 bf1eb75..dcf655a 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,9 +69,6 @@ public class DomainEventHelper {
             if (existingEvent != null && phase.isExecuted()) {
                 // reuse existing event from the executing phase
                 event = existingEvent;
-
-                event.setEventPhase(phase);
-                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
             } else {
                 // all other phases, create a new event
                 final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
@@ -86,6 +83,9 @@ public class DomainEventHelper {
                 }
             }
 
+            event.setEventPhase(phase);
+            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+
             if(phase.isExecuted()) {
                 event.setReturnValue(ObjectAdapter.Util.unwrap(resultAdapter));
             }
@@ -164,17 +164,17 @@ public class DomainEventHelper {
             if(existingEvent != null && phase.isExecuted()) {
                 // reuse existing event from the executing phase
                 event = existingEvent;
-
-                event.setEventPhase(phase);
-                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
-
-                // just in case the actual new value held by the object is different from that applied
-                setEventNewValue(event, newValue);
             } else {
                 // all other phases, create a new event
                 event = newPropertyDomainEvent(eventType, identifier, source, oldValue, newValue);
             }
 
+            event.setEventPhase(phase);
+            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+
+            // just in case the actual new value held by the object is different from that applied
+            setEventNewValue(event, newValue);
+
             this.getEventBusService().post(event);
             return event;
         } catch (Exception e) {
@@ -238,9 +238,6 @@ public class DomainEventHelper {
             if (existingEvent != null && phase.isExecuted()) {
                 // reuse existing event from the executing phase
                 event = existingEvent;
-
-                event.setEventPhase(phase);
-                event.setPhase(AbstractInteractionEvent.Phase.from(phase));
             } else {
                 // all other phases, create a new event
                 final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
@@ -248,6 +245,9 @@ public class DomainEventHelper {
                 event = newCollectionDomainEvent(eventType, phase, identifier, source, of, reference);
             }
 
+            event.setEventPhase(phase);
+            event.setPhase(AbstractInteractionEvent.Phase.from(phase));
+
             getEventBusService().post(event);
             return event;
         } catch (Exception e) {


[5/8] isis git commit: ISIS-1113: fixing javadoc.

Posted by da...@apache.org.
ISIS-1113: fixing javadoc.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/95c6f178
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/95c6f178
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/95c6f178

Branch: refs/heads/master
Commit: 95c6f1788db1e1352d612ae4fb21937d255f5cb5
Parents: 8346a6b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 25 13:43:32 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 25 16:53:21 2015 +0000

----------------------------------------------------------------------
 .../apache/isis/applib/services/eventbus/AbstractDomainEvent.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/95c6f178/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
index 8ac07b7..1e74584 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
@@ -228,7 +228,7 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
      *
      * @param translatableReason - reason why the interaction is being invalidated (ignored if in {@link org.apache.isis.applib.services.eventbus.AbstractDomainEvent.Phase#HIDE hide} phase).
      *
-     * @see #veto(String)
+     * @see #veto(String, Object...)
      */
     @Programmatic
     public void veto(final TranslatableString translatableReason) {