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 2020/05/13 07:58:10 UTC

[isis] branch master updated: ISIS-2364: fixes this issue, allows ActionParameterDefaultsFacetFromAssociatedCollection on first param only (paramNum==0)

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 dca197e  ISIS-2364: fixes this issue, allows ActionParameterDefaultsFacetFromAssociatedCollection on first param only (paramNum==0)
dca197e is described below

commit dca197eb8e29007a8881e2e73597ef4db4028b9c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 13 09:57:58 2020 +0200

    ISIS-2364: fixes this issue, allows
    ActionParameterDefaultsFacetFromAssociatedCollection on first param only
    (paramNum==0)
---
 .../ActionParameterDefaultsFacetAbstract.java         |  4 +++-
 .../load/ObjectLoader_builtinHandlers.java            |  4 ++--
 ...arameterDefaultsFacetFromAssociatedCollection.java | 19 ++++++++++---------
 .../param/DeriveFacetsPostProcessor.java              |  3 +++
 .../specimpl/ObjectActionParameterAbstract.java       |  6 +++---
 .../specimpl/ObjectSpecificationAbstract.java         | 18 +++++++-----------
 .../isisapplib/IsisBlobOrClobPanelAbstract.java       | 11 +++++++----
 .../linkandlabel/LinkAndLabelFactoryAbstract.java     |  6 ++----
 8 files changed, 37 insertions(+), 34 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java
index 8d8ccdf..9b841fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java
@@ -23,7 +23,9 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public abstract class ActionParameterDefaultsFacetAbstract extends FacetAbstract implements ActionParameterDefaultsFacet {
+public abstract class ActionParameterDefaultsFacetAbstract 
+extends FacetAbstract 
+implements ActionParameterDefaultsFacet {
 
     public static Class<? extends Facet> type() {
         return ActionParameterDefaultsFacet.class;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
index fe534ce..3b325be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
@@ -249,8 +249,8 @@ final class ObjectLoader_builtinHandlers {
             // unknown object load request
             
             throw _Exceptions.illegalArgument(
-                    "unknown object load request, loader: %s loading ObjectSpecification %s", 
-                        this.getClass().getName(), objectLoadRequest.getObjectSpecification());
+                    "unknown object load request, loader: %s loading %s", 
+                        this.getClass().getName(), objectLoadRequest);
 
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
index 40dc3d4..59e7427 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
@@ -33,6 +33,16 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
 
     private static ThreadLocal<Can<Object>> _selectedPojos = ThreadLocal.withInitial(Can::empty);
 
+    public ActionParameterDefaultsFacetFromAssociatedCollection(final FacetHolder holder) {
+        super(holder);
+    }
+
+    @Override
+    public Object getDefault(@NonNull PendingParameterModel pendingArgs) {
+        
+        return _selectedPojos.get();
+    }
+    
     public static <T, R> R applyWithSelected(
             final Can<Object> selectedPojos, 
             final Function<T, R> function,
@@ -48,14 +58,5 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
         }
     }
 
-    public ActionParameterDefaultsFacetFromAssociatedCollection(final FacetHolder holder) {
-        super(holder);
-    }
-
-    @Override
-    public Object getDefault(@NonNull PendingParameterModel pendingArgs) {
-        
-        return _selectedPojos.get();
-    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index 7073105..bd54628 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -612,6 +612,9 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
 
 
     private void addCollectionParamDefaultsFacetIfNoneAlready(final ObjectActionParameter collectionParam) {
+        if(collectionParam.getNumber()!=0) {
+            return; // with current programming model this can only be the first parameter of an action dialog 
+        }
         if(collectionParam.containsNonFallbackFacet(ActionParameterDefaultsFacet.class)) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 0c86e9f..612d777 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
-import static org.apache.isis.core.commons.internal.base._With.requires;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -60,6 +58,8 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
+import static org.apache.isis.core.commons.internal.base._With.requires;
+
 import lombok.NonNull;
 import lombok.val;
 
@@ -262,7 +262,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
         if (defaultsFacet != null && !defaultsFacet.isFallback()) {
             final Object paramValuePojo = defaultsFacet.getDefault(pendingArgs);
             return ManagedObject.of(paramSpec, paramValuePojo);    
-        }
+        }   
         return pendingArgs.getParamValue(getNumber());
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 742739e..f9a06d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -46,7 +46,6 @@ import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
 import org.apache.isis.core.config.beans.IsisBeanTypeRegistryHolder;
 import org.apache.isis.core.metamodel.commons.ClassExtensions;
-import org.apache.isis.core.metamodel.commons.ToString;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
@@ -95,8 +94,12 @@ import lombok.Getter;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
-@Log4j2 @EqualsAndHashCode(of = "correspondingClass", callSuper = false)
-public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implements ObjectSpecification {
+@EqualsAndHashCode(of = "correspondingClass", callSuper = false)
+@lombok.ToString(of = {"correspondingClass", "fullName", "managedObjectSort"})
+@Log4j2 
+public abstract class ObjectSpecificationAbstract 
+extends FacetHolderImpl 
+implements ObjectSpecification {
 
     private static class Subclasses {
         private final Set<ObjectSpecification> classes = _Sets.newConcurrentHashSet();
@@ -114,7 +117,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         }
     }
 
-//XXX drop-in for the above, 
+//XXX drop-in for the above, rather a question which performs better 
 //    private static class Subclasses {
 //        private final List<ObjectSpecification> classes = new ArrayList<>();
 //
@@ -913,13 +916,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         return containsFacet(ParentedCollectionFacet.class);
     }
 
-    @Override
-    public String toString() {
-        final ToString str = new ToString(this);
-        str.append("class", getFullIdentifier());
-        return str.toString();
-    }
-    
     // -- GUARDS
 
     private boolean contributeeAndMixedInAssociationsAdded;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index f2ce1f6..ea30761 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -56,7 +56,8 @@ import lombok.val;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.BootstrapFileInputField;
 
-public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> extends ScalarPanelAbstract2 {
+public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> 
+extends ScalarPanelAbstract2 {
 
 
     private static final long serialVersionUID = 1L;
@@ -271,10 +272,12 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         final MarkupContainer formComponent = (MarkupContainer) getComponentForRegular();
         sync(formComponent, visibility, editability, disabledReason, target);
 
+        // sonar-ignore-on (detects potential NPE, which is a false positive here) 
         final Component component = formComponent.get(ID_SCALAR_VALUE);
-        final InputFieldVisibility editingWidgetVisibility = editability == InputFieldEditability.EDITABLE ?
-                InputFieldVisibility.VISIBLE :
-                    InputFieldVisibility.NOT_VISIBLE;
+        // sonar-ignore-off
+        final InputFieldVisibility editingWidgetVisibility = editability == InputFieldEditability.EDITABLE 
+                ? InputFieldVisibility.VISIBLE
+                : InputFieldVisibility.NOT_VISIBLE;
         sync(component, editingWidgetVisibility, null, disabledReason, target);
 
         addAcceptFilterTo(component);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
index 999510d..c382f11 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
@@ -108,15 +108,13 @@ implements Serializable {
                 if(toggledMementosProviderIfAny != null) {
 
                     val selectedMementos = toggledMementosProviderIfAny.getToggles();
-                    val selectedPojos = selectedMementos
+                    val selectedPojosFromAssocCollection = selectedMementos
                             .map(super.getCommonContext()::reconstructObject)
                             .map(ManagedObject::getPojo);
                     
                     val actionPrompt = ActionParameterDefaultsFacetFromAssociatedCollection
                             .applyWithSelected(
-                                    selectedPojos,
-                                    // if this lambda still needs to be serializable uncomment the cast ... 
-                                    //(Function<AjaxRequestTarget, ActionPrompt>&Serializable) 
+                                    selectedPojosFromAssocCollection,
                                     this::performOnClick,
                                     target);