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:50 UTC
[4/8] isis git commit: ISIS-1113: allowing vetoing subscribers to
provide translatable reasons
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();
}