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 2022/09/15 13:47:26 UTC

[isis] branch master updated: ISIS-3198: move usability/visibility checks to common models

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 6c1be595e2 ISIS-3198: move usability/visibility checks to common models
6c1be595e2 is described below

commit 6c1be595e28a474f8cf4142303a64a7a7233d5ea
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 15 15:47:18 2022 +0200

    ISIS-3198: move usability/visibility checks to common models
---
 .../interactions/managed/ActionInteraction.java    |  6 ++---
 .../managed/CollectionInteraction.java             |  2 +-
 .../interactions/managed/InteractionVeto.java      |  2 ++
 .../interactions/managed/MemberInteraction.java    |  4 +--
 .../managed/ParameterNegotiationModel.java         |  1 -
 .../interactions/managed/PropertyInteraction.java  |  2 +-
 .../managed/PropertyNegotiationModel.java          | 20 ++++++++++++++-
 .../commons/model/scalar/HasUiParameter.java       | 10 ++++++++
 .../viewer/commons/model/scalar/HasUiProperty.java | 15 +++++++++++
 .../viewer/commons/model/scalar/UiParameter.java   | 10 ++++++++
 .../viewer/commons/model/scalar/UiProperty.java    | 15 +++++++++++
 .../isis/viewer/commons/model/scalar/UiScalar.java |  4 +--
 .../viewer/wicket/model/models/ScalarModel.java    |  4 ---
 .../wicket/model/models/ScalarParameterModel.java  | 10 --------
 .../wicket/model/models/ScalarPropertyModel.java   | 20 ---------------
 .../viewer/wicket/model/models/UiObjectWkt.java    |  8 ++----
 .../interaction/prop/PropertyInteractionWkt.java   |  4 ++-
 .../viewer/wicket/ui/components/scalars/_Util.java | 29 ----------------------
 18 files changed, 85 insertions(+), 81 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index 28f887bf89..8b92bc99af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -175,7 +175,7 @@ extends MemberInteraction<ManagedAction, ActionInteraction> {
      * was no interaction veto within the originating chain
      */
     public Optional<ManagedAction> getManagedAction() {
-        return super.getManagedMember();
+        return super.getManagedMember().getSuccess();
     }
 
     /**
@@ -264,11 +264,11 @@ extends MemberInteraction<ManagedAction, ActionInteraction> {
                 return ActionInteraction.wrap(managedAction);
             }
         }
-        
+
         //XXX[ISIS-3080] prior to this fix we returned... (which I'm not sure why - makes no sense to me)
         //val paramValue = parameterNegotiationModel.getParamValue(paramIndex);
         //return ActionInteraction.start(paramValue, memberId, where);
-        
+
         // else if not a composite value
         return ActionInteraction.start(actionOwner, memberId, where);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
index 8187649c88..a047905de8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
@@ -54,7 +54,7 @@ extends MemberInteraction<ManagedCollection, CollectionInteraction> {
      * was no interaction veto within the originating chain
      */
     public Optional<ManagedCollection> getManagedCollection() {
-        return super.getManagedMember();
+        return super.getManagedMember().getSuccess();
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/InteractionVeto.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/InteractionVeto.java
index ff3958ab16..30b185900c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/InteractionVeto.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/InteractionVeto.java
@@ -47,6 +47,8 @@ public class InteractionVeto implements Serializable {
         ACTION_NOT_SAFE,
         ACTION_NOT_IDEMPOTENT,
         ACTION_PARAM_INVALID,
+        ;
+        public boolean isHidden() { return this == HIDDEN;};
     }
 
     @NonNull private final VetoType vetoType;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
index d720f548b9..519679e02a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
@@ -84,8 +84,8 @@ public abstract class MemberInteraction<T extends ManagedMember, H extends Membe
      * @return optionally the ManagedMember based on whether there
      * was no interaction veto within the originating chain
      */
-    protected Optional<T> getManagedMember() {
-        return railway.getSuccess();
+    protected InteractionRailway<T> getManagedMember() {
+        return railway;
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index d3cbed33b8..b19f60ccf5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -424,5 +424,4 @@ public class ParameterNegotiationModel {
 
     }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyInteraction.java
index 272ba35eac..342c2ec08f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyInteraction.java
@@ -74,7 +74,7 @@ extends MemberInteraction<ManagedProperty, PropertyInteraction> {
      * was no interaction veto within the originating chain
      */
     public Optional<ManagedProperty> getManagedProperty() {
-        return super.getManagedMember();
+        return super.getManagedMember().getSuccess();
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
index 97e0d67b20..1bca4e4222 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.MmAssertionUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.val;
 
@@ -45,7 +46,7 @@ public class PropertyNegotiationModel implements ManagedValue {
     private final @NonNull LazyObservable<String> validation;
     private final @NonNull _BindableAbstract<String> searchArgument;
     private final @NonNull LazyObservable<Can<ManagedObject>> choices;
-    private final @NonNull ManagedProperty managedProperty;
+    @Getter private final @NonNull ManagedProperty managedProperty;
     private Observable<String> proposedValueAsTitle;
     private Observable<String> proposedValueAsHtml;
     private Bindable<String> proposedValueAsParsableText;
@@ -168,6 +169,23 @@ public class PropertyNegotiationModel implements ManagedValue {
         return choices;
     }
 
+    // -- VISIBILITY
+
+    public boolean whetherHidden() {
+        return managedProperty
+                .checkVisibility()
+                .isPresent();
+    }
+
+    // -- USABILITY
+
+    public String disableReasonIfAny() {
+        return managedProperty
+                .checkUsability()
+                .map(InteractionVeto::getReason)
+                .orElse(null);
+    }
+
     // -- VALIDATION
 
     @NonNull private final _BindableAbstract<Boolean> validationFeedbackActive;
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java
index 6e26b5cd74..8807aab6a5 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java
@@ -137,6 +137,16 @@ public interface HasUiParameter extends UiParameter {
         return getUiParameter().getIdentifier();
     }
 
+    @Override
+    default boolean whetherHidden() {
+        return getUiParameter().whetherHidden();
+    }
+
+    @Override
+    default String disableReasonIfAny() {
+        return getUiParameter().disableReasonIfAny();
+    }
+
     @Override
     default ActionInteractionHead getPendingParamHead() {
         return getMetaModel().getAction().interactionHead(getUiParameter().getOwner());
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
index 3f1ddecbd5..39987cfcff 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.viewer.commons.model.scalar;
 
+import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -42,5 +43,19 @@ public interface HasUiProperty extends UiProperty {
         return getUiProperty().getPendingPropertyModel();
     }
 
+    @Override
+    default ManagedProperty getManagedProperty() {
+        return getUiProperty().getManagedProperty();
+    }
+
+    @Override
+    default boolean whetherHidden() {
+        return getUiProperty().whetherHidden();
+    }
+
+    @Override
+    default String disableReasonIfAny() {
+        return getUiProperty().disableReasonIfAny();
+    }
 
 }
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
index d3bdf82005..e467f46685 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
@@ -47,6 +47,16 @@ public interface UiParameter extends UiScalar {
 
     ParameterNegotiationModel getParameterNegotiationModel();
 
+    @Override
+    default boolean whetherHidden() {
+        return getParameterNegotiationModel().getVisibilityConsent(getParameterIndex()).isVetoed();
+    }
+
+    @Override
+    default String disableReasonIfAny() {
+        return getParameterNegotiationModel().getUsabilityConsent(getParameterIndex()).getReason();
+    }
+
     @Override
     default int getAutoCompleteMinLength() {
         return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
index 2382c9a9e2..9aee0b6377 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.commons.model.scalar;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -34,6 +35,10 @@ public interface UiProperty extends UiScalar {
 
     PropertyNegotiationModel getPendingPropertyModel();
 
+    default ManagedProperty getManagedProperty() {
+        return getPendingPropertyModel().getManagedProperty();
+    }
+
     // -- SHORTCUTS
 
     @Override
@@ -76,4 +81,14 @@ public interface UiProperty extends UiScalar {
         return getMetaModel().getAutoComplete(getOwner(), searchArg, InteractionInitiatedBy.USER);
     }
 
+    @Override
+    default boolean whetherHidden() {
+        return getPendingPropertyModel().whetherHidden();
+    }
+
+    @Override
+    default String disableReasonIfAny() {
+        return getPendingPropertyModel().disableReasonIfAny();
+    }
+
 }
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
index 368d23644d..07da88cae5 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
@@ -43,9 +43,9 @@ public interface UiScalar extends UiModel, HasMetaModelContext {
     ManagedObject getOwner();
 
     String getIdentifier();
-
     String getCssClass();
-
+    boolean whetherHidden();
+    String disableReasonIfAny();
 
     /** feature name */
     default String getFriendlyName() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index cd43080b11..9e65db18cf 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -172,10 +172,6 @@ implements HasRenderingHints, UiScalar, LinksProvider, FormExecutorContext {
 
     public abstract ManagedValue proposedValue();
 
-    public abstract boolean whetherHidden();
-
-    public abstract String disableReasonIfAny();
-
     public abstract String validate(ManagedObject proposedAdapter);
 
     /**
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index e6984279fd..52698a4d7a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -54,16 +54,6 @@ implements HasUiParameter {
         this.uiParameter = uiParameter;
     }
 
-    @Override
-    public String disableReasonIfAny() {
-        return getParameterNegotiationModel().getUsabilityConsent(getParameterIndex()).getReason();
-    }
-
-    @Override
-    public boolean whetherHidden() {
-        return getParameterNegotiationModel().getVisibilityConsent(getParameterIndex()).isVetoed();
-    }
-
     @Override
     public String validate(final ManagedObject proposedValue) {
         return getParameterNegotiationModel().getObservableParamValidation(getParameterIndex()).getValue();
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index d85a70a4b5..f3a0069a89 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -21,7 +21,6 @@ package org.apache.isis.viewer.wicket.model.models;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.interactions.managed.InteractionVeto;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -69,25 +68,6 @@ implements HasUiProperty {
         return wrap(uiProperty, viewOrEdit, renderingHint);
     }
 
-    public ManagedProperty getManagedProperty() {
-        return uiProperty.propertyInteraction().getManagedProperty().get();
-    }
-
-    @Override
-    public boolean whetherHidden() {
-        return getManagedProperty()
-                .checkVisibility()
-                .isPresent();
-    }
-
-    @Override
-    public String disableReasonIfAny() {
-        return getManagedProperty()
-                .checkUsability()
-                .map(InteractionVeto::getReason)
-                .orElse(null);
-    }
-
     @Override
     public String validate(final ManagedObject proposedNewValue) {
         return getManagedProperty()
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
index 6b2200755d..dccdc792f4 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
@@ -232,17 +232,13 @@ implements
 
     @Override
     public UiObjectWkt toEditMode() {
-        setMode(ScalarRepresentation.EDITING);
-        propertyScalarModels().values()
-            .forEach(ScalarPropertyModel::toEditMode);
+        //noop for objects
         return this;
     }
 
     @Override
     public UiObjectWkt toViewMode() {
-        setMode(ScalarRepresentation.VIEWING);
-        propertyScalarModels().values()
-            .forEach(ScalarPropertyModel::toViewMode);
+        //noop for objects
         return this;
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
index 986df74997..ac0c57b293 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
@@ -80,7 +80,9 @@ extends HasBookmarkedOwnerAbstract<PropertyInteraction> {
                     val propIa = propertyInteraction();
                     val prop = propIa.getManagedProperty().orElseThrow();
                     ManagedObjects.refreshViewmodel(prop.getOwner(), /* bookmark provider*/ null);
-                    return propIa.startPropertyNegotiation();
+                    return propIa.startPropertyNegotiation()
+                            //.orElseThrow(()->_Exceptions.noSuchElement(memberId))
+                            ;
                 });
 
         return PropertyInteraction.wrap(
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
index b163bbba1a..e91a978662 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Util.java
@@ -162,33 +162,4 @@ class _Util {
                             prop.getManagedProperty()));
     }
 
-    // -- PROBABLY NO LONGER NEEDED
-
-//    private Optional<ManagedObject> recoverProposedValue2(
-//            final IValidatable<Object> validatable,
-//            final ScalarModel scalarModel){
-//        return mementoForProposedValue(validatable, scalarModel)
-//                .map(scalarModel.getMetaModelContext()::reconstructObject);
-//    }
-//
-//    private Optional<ObjectMemento> mementoForProposedValue(
-//            final IValidatable<Object> validatable,
-//            final ScalarModel scalarModel) {
-//        final Object proposedValueObj = validatable.getValue();
-//
-//        if (proposedValueObj instanceof List) {
-//            @SuppressWarnings("unchecked")
-//            val proposedValueObjAsList = (List<ObjectMemento>) proposedValueObj;
-//            if (proposedValueObjAsList.isEmpty()) {
-//                return Optional.empty();
-//            }
-//            val memento = proposedValueObjAsList.get(0);
-//            val logicalType = memento.getLogicalType();
-//            return Optional.of(ObjectMemento.pack(proposedValueObjAsList, logicalType));
-//        } else {
-//            return Optional.of((ObjectMemento) proposedValueObj);
-//        }
-//
-//    }
-
 }