You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/07/22 19:27:41 UTC

[isis] branch master updated: ISIS-2818: Add overrides for XxxDomainEvent for hide/disable/invalidate to evaluate a supplier

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new eafed8d  ISIS-2818: Add overrides for XxxDomainEvent for hide/disable/invalidate to evaluate a supplier
eafed8d is described below

commit eafed8d4b7874a5f81dfda0dbf7eeab9566137cb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jul 22 21:27:27 2021 +0200

    ISIS-2818: Add overrides for XxxDomainEvent for hide/disable/invalidate
    to evaluate a supplier
---
 .../applib/events/domain/AbstractDomainEvent.java  | 80 ++++++++++++++++++++--
 1 file changed, 76 insertions(+), 4 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
index da37c89..34fd001 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.events.domain;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
+import java.util.function.BooleanSupplier;
+import java.util.function.Supplier;
 
 import javax.annotation.Nullable;
 
@@ -32,6 +35,7 @@ import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import lombok.Getter;
+import lombok.NonNull;
 import lombok.val;
 
 /**
@@ -179,7 +183,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
     /**
      * Not API, set by the framework.
      */
-    public void setEventPhase(Phase phase) {
+    public void setEventPhase(final Phase phase) {
         this.eventPhase = phase;
     }
 
@@ -197,6 +201,8 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
         this.identifier = identifier;
     }
 
+    // -- HIDING
+
     /**
      * Used by the framework to determine if the member should be hidden (not
      * rendered).
@@ -214,6 +220,28 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
     }
 
     /**
+     * Same as ... {@code if(condition) hide(); }
+     * @see #hide()
+     */
+    public void hideIf(final boolean condition) {
+        if(condition) {
+            hide();
+        }
+    }
+
+    /**
+     * Same as ... {@code if(shouldHide.getAsBoolean()) hide(); }
+     * @see #hide()
+     */
+    public void hideIf(final @NonNull BooleanSupplier shouldHide) {
+        if(shouldHide.getAsBoolean()) {
+            hide();
+        }
+    }
+
+    // -- DISABLING
+
+    /**
      * If {@link #isDisabled() disabled}, then either this method returns
      * non-null or {@link #getDisabledReasonTranslatable()} will.
      */
@@ -230,7 +258,6 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
         return disabledReason != null || disabledReasonTranslatable != null;
     }
 
-
     /**
      * API for subscribers to disable the member, specifying the reason why.
      *
@@ -252,6 +279,27 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
         this.disabledReasonTranslatable = reason;
     }
 
+    /**
+     * Same as ... {@code if(reasonSupplier.get()!=null) disable(reasonSupplier.get()); }
+     * @see #disable(String)
+     */
+    public void disableIfReason(final @NonNull Supplier<String> reasonSupplier) {
+        Optional
+            .ofNullable(reasonSupplier.get())
+            .ifPresent(this::disable);
+    }
+
+    /**
+     * Same as ... {@code if(reasonSupplier.get()!=null) disable(reasonSupplier.get()); }
+     * @see #disable(TranslatableString)
+     */
+    public void disableIfTranslatableReason(final @NonNull Supplier<TranslatableString> reasonSupplier) {
+        Optional
+            .ofNullable(reasonSupplier.get())
+            .ifPresent(this::disable);
+    }
+
+    // -- INVALIDATING
 
     /**
      * Used by the framework to determine whether the interaction is invalid
@@ -304,6 +352,28 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
     }
 
     /**
+     * Same as ... {@code if(reasonSupplier.get()!=null) invalidate(reasonSupplier.get()); }
+     * @see #invalidate(String)
+     */
+    public void invalidateIfReason(final @NonNull Supplier<String> reasonSupplier) {
+        Optional
+            .ofNullable(reasonSupplier.get())
+            .ifPresent(this::invalidate);
+    }
+
+    /**
+     * Same as ... {@code if(reasonSupplier.get()!=null) invalidate(reasonSupplier.get()); }
+     * @see #disable(TranslatableString)
+     */
+    public void invalidateIfTranslatableReason(final @NonNull Supplier<TranslatableString> reasonSupplier) {
+        Optional
+            .ofNullable(reasonSupplier.get())
+            .ifPresent(this::invalidate);
+    }
+
+    // -- VETOING
+
+    /**
      * Use instead of {@link #hide()}, {@link #disable(String)} and
      * {@link #invalidate(String)}; just delegates to
      * appropriate vetoing method based upon the {@link #getEventPhase() phase}.
@@ -376,6 +446,8 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
         }
     }
 
+    // -- USER DATA
+
     /**
      * Provides a mechanism to pass data to the next {@link #getEventPhase() phase}.
      */
@@ -384,7 +456,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
     /**
      * Obtain user-data, as set by a previous {@link #getEventPhase() phase}.
      */
-    public Object get(Object key) {
+    public Object get(final Object key) {
         return userData.get(key);
     }
 
@@ -395,7 +467,7 @@ public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
      *
      * Set user-data, for the use of a subsequent {@link #getEventPhase() phase}.
      */
-    public void put(Object key, Object value) {
+    public void put(final Object key, final Object value) {
         userData.put(key, value);
     }