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/05/10 09:47:41 UTC

[isis] branch master updated: ISIS-2648: fixes inconsistent WhereValueFacet alias handling

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 0808de4  ISIS-2648: fixes inconsistent WhereValueFacet alias handling
0808de4 is described below

commit 0808de4e0715f9c1a0ae7ccfa00249c09e300c9f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon May 10 11:47:11 2021 +0200

    ISIS-2648: fixes inconsistent WhereValueFacet alias handling
    
    Where.EVERYWHERE and Where.ANYWHERE must be treated equally
---
 .../org/apache/isis/applib/annotation/Where.java   | 25 +++++++++++++++-------
 .../core/metamodel/facets/WhereValueFacet.java     | 23 ++++++++++++++++++++
 .../metamodel/facets/WhereValueFacetAbstract.java  | 13 ++++++-----
 .../metamodel/facets/all/hide/HiddenFacet.java     | 14 ++----------
 .../facets/members/disabled/DisabledFacet.java     |  8 +++++++
 .../ApplicationFeatureRepositoryDefault.java       |  6 +-----
 .../specloader/specimpl/ObjectMemberAbstract.java  |  9 ++++----
 .../specimpl/OneToManyAssociationMixedIn.java      |  3 +--
 .../specimpl/OneToOneAssociationMixedIn.java       |  3 +--
 .../components/entity/fieldset/PropertyGroup.java  |  5 +++--
 10 files changed, 68 insertions(+), 41 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Where.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
index cbd8085..3db35c9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
@@ -27,9 +27,9 @@ import org.apache.isis.applib.util.Enums;
  * Represents the location in the user interface where a class member is to be rendered.
  *
  * <p>
- * Used to control visibility (eg using the {@link Property#hidden()} annotation) and 
- * enablement (eg using the {@link Property#editing()} annotation) in different regions 
- * of the user interface. 
+ * Used to control visibility (eg using the {@link Property#hidden()} annotation) and
+ * enablement (eg using the {@link Property#editing()} annotation) in different regions
+ * of the user interface.
  *
  * <p>
  * The application programmer may use any of the values of this enum.  Some represent
@@ -39,9 +39,9 @@ import org.apache.isis.applib.util.Enums;
  * @see Action
  * @see Collection
  * @see Property
- * 
+ *
  * @since 1.x {@index}
- * 
+ *
  * @implNote This enum is also used internally within the framework. When rendering an element,
  * the framework developer should only use those values that represent concrete locations.
  */
@@ -184,12 +184,19 @@ public enum Where {
         return Enums.getFriendlyNameOf(this);
     }
 
+    public boolean isAlways() {
+        return this == EVERYWHERE
+                || this == ANYWHERE;
+    }
+
     public boolean inParentedTable() {
-        return this == PARENTED_TABLES || this == ALL_TABLES;
+        return this == PARENTED_TABLES
+                || this == ALL_TABLES;
     }
 
     public boolean inStandaloneTable() {
-        return this == STANDALONE_TABLES || this == ALL_TABLES;
+        return this == STANDALONE_TABLES
+                || this == ALL_TABLES;
     }
 
     /**
@@ -199,7 +206,9 @@ public enum Where {
      * For example, {@link #ALL_TABLES} includes {@link #STANDALONE_TABLES}; {@link #ANYWHERE} includes all others.
      */
     public boolean includes(Where context) {
-        return context == this;
+        return context == this
+                || (this.isAlways()
+                    && context.isAlways());
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacet.java
index 495ac99..2bd6eb4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacet.java
@@ -19,11 +19,34 @@
 
 package org.apache.isis.core.metamodel.facets;
 
+import java.util.Optional;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+import lombok.NonNull;
 
 public interface WhereValueFacet extends Facet {
 
     public Where where();
 
+    // -- UTILS
+
+    static Optional<Where> where(
+            final @NonNull FacetHolder facetHolder,
+            final @NonNull Class<? extends WhereValueFacet> facetType) {
+        return facetHolder.lookupFacet(facetType)
+                .map(WhereValueFacet::where);
+    }
+
+    // -- PREDICATES
+
+    static boolean isAlways(final @NonNull FacetHolder facetHolder,
+            final @NonNull Class<? extends WhereValueFacet> facetType) {
+        return WhereValueFacet.where(facetHolder, facetType)
+                .map(Where::isAlways)
+                .orElse(false);
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
index 62ab646..b508832 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
@@ -26,14 +26,17 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
+import lombok.NonNull;
+
 public abstract class WhereValueFacetAbstract extends FacetAbstract implements WhereValueFacet {
-    private final Where where;
+
+    private final @NonNull Where where;
 
     public WhereValueFacetAbstract(
-            final Class<? extends Facet> facetType,
-            final FacetHolder holder,
-            final Where where) {
-        
+            final @NonNull Class<? extends Facet> facetType,
+            final @NonNull FacetHolder holder,
+            final @NonNull Where where) {
+
         super(facetType, holder, Derivation.NOT_DERIVED);
         this.where = where;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/hide/HiddenFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/hide/HiddenFacet.java
index 7892ff4..bdd423a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/hide/HiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/hide/HiddenFacet.java
@@ -19,9 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.all.hide;
 
-import java.util.Optional;
-
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.WhereValueFacet;
 import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
@@ -33,17 +30,10 @@ import lombok.NonNull;
  */
 public interface HiddenFacet extends WhereValueFacet, HidingInteractionAdvisor {
 
-    // -- UTILS
+    // -- PREDICATES
 
     static boolean isAlwaysHidden(final @NonNull FacetHolder facetHolder) {
-        return hiddenWhere(facetHolder)
-                .map(Where.ANYWHERE::equals)
-                .orElse(false);
-    }
-
-    static Optional<Where> hiddenWhere(final @NonNull FacetHolder facetHolder) {
-        return facetHolder.lookupFacet(HiddenFacet.class)
-                .map(HiddenFacet::where);
+        return WhereValueFacet.isAlways(facetHolder, HiddenFacet.class);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
index 8d35665..c3321c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
@@ -25,6 +25,8 @@ import org.apache.isis.core.metamodel.facets.WhereValueFacet;
 import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
+import lombok.NonNull;
+
 /**
  * Disable a property, collection or action.
  *
@@ -51,4 +53,10 @@ public interface DisabledFacet extends WhereValueFacet, DisablingInteractionAdvi
      * attached is <i>not</i> mandatory.
      */
     public boolean isInvertedSemantics();
+
+    // -- PREDICATES
+
+    static boolean isAlwaysDisabled(final @NonNull FacetHolder facetHolder) {
+        return WhereValueFacet.isAlways(facetHolder, DisabledFacet.class);
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 50bc768..9cfa93b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -37,7 +37,6 @@ import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
@@ -352,10 +351,7 @@ implements ApplicationFeatureRepository {
     }
 
     protected boolean isHidden(final ObjectSpecification spec) {
-        final HiddenFacet facet = spec.getFacet(HiddenFacet.class);
-        return facet != null &&
-                !facet.isFallback() &&
-                (facet.where() == Where.EVERYWHERE || facet.where() == Where.ANYWHERE);
+        return HiddenFacet.isAlwaysHidden(spec);
     }
 
     protected boolean isBuiltIn(final ObjectSpecification spec) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index a067243..87021ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -165,11 +165,10 @@ implements ObjectMember, HasMetaModelContext, HasFacetHolder {
 
     @Override
     public boolean isAlwaysHidden() {
-        final HiddenFacet facet = getFacet(HiddenFacet.class);
-        return facet != null &&
-                !facet.isFallback() &&
-                (facet.where() == Where.EVERYWHERE || facet.where() == Where.ANYWHERE)
-                ;
+
+        return HiddenFacet.isAlwaysHidden(getFacetHolder());
+
+
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index 41770cc..bd9a09c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
@@ -139,7 +138,7 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
     private DisabledFacet disabledFacet() {
         final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class);
         if( originalFacet != null &&
-                originalFacet.where() == Where.ANYWHERE) {
+                originalFacet.where().isAlways()) {
             return originalFacet;
         }
         // ensure that the contributed association is always disabled
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 317983b..4289a76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
@@ -118,7 +117,7 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
     private DisabledFacet disabledFacet() {
         final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class);
         if( originalFacet != null &&
-                originalFacet.where() == Where.ANYWHERE) {
+                originalFacet.where().isAlways()) {
             return originalFacet;
         }
         // ensure that the contributed association is always disabled
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 49615b8..1c95aac 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -180,9 +180,10 @@ public class PropertyGroup extends PanelAbstract<ManagedObject, EntityModel> imp
                 .filter(_NullSafe::isPresent)
                 .filter(objectAssociation -> {
                     val hiddenFacet = objectAssociation.getFacet(HiddenFacet.class);
-                    if(hiddenFacet != null && !hiddenFacet.isFallback()) {
+                    if(hiddenFacet != null) {
                         // static invisible.
-                        if(hiddenFacet.where() == Where.EVERYWHERE || hiddenFacet.where() == Where.OBJECT_FORMS) {
+                        if(hiddenFacet.where().isAlways()
+                                || hiddenFacet.where() == Where.OBJECT_FORMS) {
                             return false;
                         }
                     }