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/03/09 22:56:03 UTC

[isis] branch master updated: ISIS-2877: fixes multi-select receiver false-positive on guard

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 3ca8244  ISIS-2877: fixes multi-select receiver false-positive on guard
3ca8244 is described below

commit 3ca824497e6ea30bb24035deb618713359010d28
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 9 23:55:51 2022 +0100

    ISIS-2877: fixes multi-select receiver false-positive on guard
---
 .../entity/icontitle/EntityIconAndTitlePanel.java  | 39 ++++++++++++----------
 .../scalars/reference/ReferencePanel.java          |  9 ++---
 .../valuechoices/ValueChoicesSelect2Panel.java     | 18 ++++++----
 3 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 5542624..4c54dea 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -34,13 +34,14 @@ import org.apache.isis.core.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
+import org.apache.isis.core.metamodel.spec.PackedManagedObject;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Wkt;
 import org.apache.isis.viewer.wicket.ui.util.WktComponents;
 import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
-import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 import lombok.val;
 
@@ -63,14 +64,7 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
             final String id,
             final ObjectAdapterModel objectAdapterModel) {
         super(id, objectAdapterModel);
-
-        val model = getModel();
-        val obj = model.getObject();
-
-        val isNonEmptyAbstract = isNonEmptyAbstract(obj);
-        // GUARD against non-empty abstract
-        _Assert.assertFalse(isNonEmptyAbstract,
-                ()->"model for EntityIconAndTitlePanel, when non-empty, must not represent abstract types");
+        guardAgainstNonEmptyAbstractScalar(objectAdapterModel);
     }
 
     protected ManagedObject getTargetAdapter() {
@@ -78,14 +72,6 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
         return targetAdapter;
     }
 
-    static boolean isNonEmptyAbstract(final ManagedObject obj) {
-        if(obj==null
-                || obj.getPojo()==null) {
-            return false;
-        }
-        return obj.getSpecification().isAbstract();
-    }
-
     @Override
     protected void onBeforeRender() {
         buildGui();
@@ -230,4 +216,23 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
         return maxLength <= 3 ? "" : str.substring(0, maxLength - 3) + "...";
     }
 
+    private static void guardAgainstNonEmptyAbstractScalar(final ObjectAdapterModel objectAdapterModel) {
+        val obj = objectAdapterModel.getObject();
+        _Assert.assertFalse(isNonEmptyAbstractScalar(obj),
+                ()->String.format("model for EntityIconAndTitlePanel, "
+                        + "when non-empty, must not represent abstract types; "
+                        + "however, got an abstract %s for object of type %s",
+                        obj.getSpecification(),
+                        obj.getPojo().getClass().getName()));
+    }
+
+    private static boolean isNonEmptyAbstractScalar(final ManagedObject obj) {
+        if(obj==null
+                || obj.getPojo()==null
+                || obj instanceof PackedManagedObject) {
+            return false;
+        }
+        return obj.getSpecification().isAbstract();
+    }
+
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index dd69a0e..fd55c06 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -20,7 +20,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
 
 import java.util.Optional;
 
-import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -109,8 +108,6 @@ public class ReferencePanel extends ScalarPanelSelectAbstract {
         this.select2 = createSelect2AndSemantics();
         entityLink.addOrReplace(select2.asComponent());
 
-        //syncWithInput();
-
         entityLink.setOutputMarkupId(true);
 
         FormComponent<?> formComponent = this.entityLink;
@@ -200,7 +197,7 @@ public class ReferencePanel extends ScalarPanelSelectAbstract {
         super.onNotEditable(disableReason, target);
         if(isOutputFormat) return;
         entityLink.setEnabled(false);
-        entityLink.add(new AttributeModifier("title", Model.of(disableReason)));
+        Wkt.attributeReplace(entityLink, "title", disableReason);
     }
 
     @Override
@@ -208,7 +205,7 @@ public class ReferencePanel extends ScalarPanelSelectAbstract {
         super.onEditable(target);
         if(isOutputFormat) return;
         entityLink.setEnabled(true);
-        entityLink.add(new AttributeModifier("title", Model.of("")));
+        Wkt.attributeReplace(entityLink, "title", "");
     }
 
     // called from onInitialize*
@@ -348,8 +345,6 @@ public class ReferencePanel extends ScalarPanelSelectAbstract {
         entityLink.setConvertedInput(pendingAdapter);
     }
 
-
-
     // //////////////////////////////////////
 
     @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 1f93910..f3c6712 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -33,8 +33,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelectAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForValueChoices;
-import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
+import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
 
 import lombok.val;
 
@@ -43,6 +43,8 @@ extends ScalarPanelSelectAbstract {
 
     private static final long serialVersionUID = 1L;
 
+    private boolean isOutputFormat = false;
+
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
@@ -51,20 +53,18 @@ extends ScalarPanelSelectAbstract {
 
     @Override
     protected Component createComponentForCompact() {
+        isOutputFormat = true;
         return Wkt.label(ID_SCALAR_IF_COMPACT, "placeholder");
     }
 
     @Override
     protected MarkupContainer createComponentForRegular() {
-
         if(select2 == null) {
             this.select2 = createSelect2(ID_SCALAR_VALUE);
         } else {
             select2.clearInput();
         }
-
         FormComponent<?> formComponent = select2.asComponent();
-
         return createFormGroup(formComponent);
     }
 
@@ -84,21 +84,25 @@ extends ScalarPanelSelectAbstract {
 
     @Override
     protected void onInitializeNotEditable() {
+        super.onInitializeNotEditable();
+        if(isOutputFormat) return;
         // View: Read only
         select2.setEnabled(false);
     }
 
     @Override
     protected void onInitializeEditable() {
+        super.onInitializeEditable();
+        if(isOutputFormat) return;
         // Edit: read/write
         select2.setEnabled(true);
-
         clearTitleAttribute();
     }
 
     @Override
     protected void onInitializeReadonly(final String disableReason) {
         super.onInitializeReadonly(disableReason);
+        if(isOutputFormat) return;
         setTitleAttribute(disableReason);
         select2.setEnabled(false);
     }
@@ -120,7 +124,7 @@ extends ScalarPanelSelectAbstract {
     @Override
     protected void onNotEditable(final String disableReason, final Optional<AjaxRequestTarget> target) {
         super.onNotEditable(disableReason, target);
-
+        if(isOutputFormat) return;
         setTitleAttribute(disableReason);
         select2.setEnabled(false);
     }
@@ -128,7 +132,7 @@ extends ScalarPanelSelectAbstract {
     @Override
     protected void onEditable(final Optional<AjaxRequestTarget> target) {
         super.onEditable(target);
-
+        if(isOutputFormat) return;
         setTitleAttribute("");
         select2.setEnabled(true);
     }