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/01/05 17:25:40 UTC

[isis] 02/02: ISIS-2253: minor simplifications

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

commit 61b7d6b860c6d08c270f6077ac3bc898fe9e07e2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jan 5 17:33:54 2020 +0100

    ISIS-2253: minor simplifications
---
 ...meterDefaultsFacetFromAssociatedCollection.java | 27 +++++-------
 .../isis/metamodel/spec/feature/ObjectAction.java  | 15 ++++---
 .../wicket/model/models/ActionPromptProvider.java  | 29 ++++++-------
 .../selector/CollectionSelectorProvider.java       | 29 ++++++-------
 .../CollectionContentsMultipleViewsPanel.java      |  4 +-
 .../components/scalars/ScalarPanelAbstract2.java   |  2 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java    | 50 ++++++++--------------
 .../wicket/ui/panels/PromptFormAbstract.java       |  2 +-
 8 files changed, 69 insertions(+), 89 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
index e599edd..e937d0f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
@@ -19,10 +19,7 @@
 
 package org.apache.isis.metamodel.postprocessors.param;
 
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.Callable;
+import java.util.function.Function;
 
 import org.apache.isis.applib.ApplicationException;
 import org.apache.isis.commons.collections.Can;
@@ -32,22 +29,20 @@ import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionParameterDefaultsFacetFromAssociatedCollection extends ActionParameterDefaultsFacetAbstract {
 
-    private static ThreadLocal<List<Object>> selectedPojos = new ThreadLocal<List<Object>>() {
-        @Override protected List<Object> initialValue() {
-            return Collections.emptyList();
-        }
-    };
-
-    public interface SerializableRunnable<T> extends Callable<T>, Serializable {}
+    private static ThreadLocal<Can<Object>> _selectedPojos = ThreadLocal.withInitial(Can::empty);
 
-    public static <T> T withSelected(final List<Object> objects, final SerializableRunnable<T> callable) {
+    public static <T, R> R applyWithSelected(
+            final Can<Object> selectedPojos, 
+            final Function<T, R> function,
+            final T argument) {
+        
         try {
-            selectedPojos.set(objects);
-            return callable.call();
+            _selectedPojos.set(selectedPojos);
+            return function.apply(argument);
         } catch (Exception e) {
             throw new ApplicationException(e);
         } finally {
-            selectedPojos.set(Collections.emptyList());
+            _selectedPojos.set(Can.empty());
         }
     }
 
@@ -61,7 +56,7 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
             final Can<ManagedObject> pendingArgs,
             final Integer paramNumUpdated) {
         
-        return selectedPojos.get();
+        return _selectedPojos.get();
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
index e4f9d6c..5a7b761 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
@@ -448,18 +448,23 @@ public interface ObjectAction extends ObjectMember {
 
             @Override
             public boolean test(final ObjectAction objectAction) {
-                final AssociatedWithFacet associatedWithFacet = objectAction.getFacet(AssociatedWithFacet.class);
+                val associatedWithFacet = objectAction.getFacet(AssociatedWithFacet.class);
                 if(associatedWithFacet == null) {
                     return false;
                 }
-                final String associatedMemberName = associatedWithFacet.value();
+                val associatedMemberName = associatedWithFacet.value();
                 if (associatedMemberName == null) {
                     return false;
                 }
-                final String memberOrderNameLowerCase = associatedMemberName.toLowerCase();
-                return memberName != null && Objects.equals(memberName.toLowerCase(), memberOrderNameLowerCase) ||
-                        memberId   != null && Objects.equals(memberId.toLowerCase(), memberOrderNameLowerCase);
+                val memberOrderNameLowerCase = associatedMemberName.toLowerCase();
+                return equalWhenLowerCase(memberName, memberOrderNameLowerCase) 
+                        || equalWhenLowerCase(memberId, memberOrderNameLowerCase);
             }
+            
+            private boolean equalWhenLowerCase(@Nullable String string, String lowerCaseString) {
+                return string != null && Objects.equals(string.toLowerCase(), lowerCaseString);
+            }
+            
         }
 
         public static class HasParameterMatching implements Predicate<ObjectAction> {
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
index 67a7d8f..b8b3d7c 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
@@ -27,24 +27,21 @@ import org.apache.isis.commons.internal.ioc.BeanSort;
 
 public interface ActionPromptProvider {
 
-
-    public static class Util{
-
-        public static ActionPromptProvider getFrom(Component component) {
-            final Page page = component.getPage();
-            if(page == null) {
-                throw new IllegalArgumentException("Programming error: component must be added to a page in order to locate the ActionPromptProvider");
-            }
-            return getFrom(page);
+    public static ActionPromptProvider getFrom(Component component) {
+        final Page page = component.getPage();
+        if(page == null) {
+            throw new IllegalArgumentException("Programming error: component must be added to a page in order to locate the ActionPromptProvider");
         }
-        public static ActionPromptProvider getFrom(Page page) {
-            if(page instanceof ActionPromptProvider) {
-                final ActionPromptProvider provider = (ActionPromptProvider) page;
-                return provider;
-            }
-            // else
-            throw new IllegalArgumentException("Programming error: all pages should inherit from PageAbstract, which serves as the ActionPromptProvider");
+        return getFrom(page);
+    }
+    
+    public static ActionPromptProvider getFrom(Page page) {
+        if(page instanceof ActionPromptProvider) {
+            final ActionPromptProvider provider = (ActionPromptProvider) page;
+            return provider;
         }
+        // else
+        throw new IllegalArgumentException("Programming error: all pages should inherit from PageAbstract, which serves as the ActionPromptProvider");
     }
 
     public ActionPrompt getActionPrompt(
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorProvider.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorProvider.java
index 340cad2..1930e11 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorProvider.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorProvider.java
@@ -23,24 +23,21 @@ import org.apache.wicket.Component;
 public interface CollectionSelectorProvider {
     CollectionSelectorPanel getSelectorDropdownPanel();
 
-    public static class Util {
-
-        /**
-         * Searches up the component hierarchy looking for a parent that implements
-         * {@link org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider}.
-         *
-         * @return the panel, or null (if there are no alternative views)
-         */
-        public static CollectionSelectorPanel getCollectionSelectorProvider(Component component) {
-            while(component != null) {
-                if(component instanceof CollectionSelectorProvider) {
-                    final CollectionSelectorPanel selectorDropdownPanelIfAny = ((CollectionSelectorProvider) component).getSelectorDropdownPanel();
-                    return selectorDropdownPanelIfAny;
-                }
-                component = component.getParent();
+    /**
+     * Searches up the component hierarchy looking for a parent that implements
+     * {@link org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider}.
+     *
+     * @return the panel, or null (if there are no alternative views)
+     */
+    public static CollectionSelectorPanel getCollectionSelectorProvider(Component component) {
+        while(component != null) {
+            if(component instanceof CollectionSelectorProvider) {
+                final CollectionSelectorPanel selectorDropdownPanelIfAny = ((CollectionSelectorProvider) component).getSelectorDropdownPanel();
+                return selectorDropdownPanelIfAny;
             }
-            throw new IllegalStateException("Could not locate parent that implements CollectionSelectorProvider");
+            component = component.getParent();
         }
+        throw new IllegalStateException("Could not locate parent that implements CollectionSelectorProvider");
     }
 
 }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java
index d5a6e18..945b6d8 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java
@@ -93,7 +93,7 @@ implements CollectionCountProvider {
         final List<ComponentFactory> componentFactories = selectorHelper.getComponentFactories();
 
         final CollectionSelectorPanel selectorDropdownPanelIfAny =
-                CollectionSelectorProvider.Util.getCollectionSelectorProvider(this);
+                CollectionSelectorProvider.getCollectionSelectorProvider(this);
         final String selected;
         if (selectorDropdownPanelIfAny != null) {
             selected = selectorHelper.honourViewHintElseDefault(selectorDropdownPanelIfAny);
@@ -147,7 +147,7 @@ implements CollectionCountProvider {
         if(selectorEvent == null) {
             return;
         }
-        final CollectionSelectorPanel selectorDropdownPanel = CollectionSelectorProvider.Util.getCollectionSelectorProvider(this);
+        final CollectionSelectorPanel selectorDropdownPanel = CollectionSelectorProvider.getCollectionSelectorProvider(this);
         if(selectorDropdownPanel == null) {
             // not expected, because this event shouldn't be called.
             // but no harm in simply returning...
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 5fd5c55..2e1c8f3 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -864,7 +864,7 @@ implements ScalarModelSubscriber2 {
                             .lookupServiceElseFail(MetaModelService.class);
                     final BeanSort sort = metaModelService.sortOf(specification.getCorrespondingClass(), MetaModelService.Mode.RELAXED);
 
-                    final ActionPrompt prompt = ActionPromptProvider.Util
+                    final ActionPrompt prompt = ActionPromptProvider
                             .getFrom(ScalarPanelAbstract2.this).getActionPrompt(promptStyle, sort);
 
                     PropertyEditPromptHeaderPanel titlePanel = new PropertyEditPromptHeaderPanel(prompt.getTitleId(),
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index ea1b807..9c92a41 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -17,8 +17,8 @@
 
 package org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel;
 
-import java.util.List;
-import java.util.stream.Collectors;
+import java.io.Serializable;
+import java.util.function.Function;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.MarkupContainer;
@@ -29,12 +29,9 @@ import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.cycle.RequestCycle;
 
-import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.layout.grid.Grid;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Grid;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.metamodel.postprocessors.param.ActionParameterDefaultsFacetFromAssociatedCollection;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -67,7 +64,6 @@ import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.FormExecutorDefault;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
-import org.apache.isis.webapp.context.memento.ObjectMemento;
 
 import lombok.val;
 
@@ -103,28 +99,18 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
 
                 if(toggledMementosProviderIfAny != null) {
 
-                    final Can<ObjectMemento> selectedMementos =
-                            toggledMementosProviderIfAny.getToggles();
-
-                    final List<Object> selectedPojos = selectedMementos.stream()
-                    .filter(_NullSafe::isPresent)
-                    .map(commonContext::reconstructObject)
-                    .filter(_NullSafe::isPresent)
-                    .map(ManagedObject::getPojo)
-                    .filter(_NullSafe::isPresent)
-                    .collect(Collectors.toList());
-
-                    final ActionPrompt actionPrompt = ActionParameterDefaultsFacetFromAssociatedCollection.withSelected(
-                            selectedPojos,
-                            new ActionParameterDefaultsFacetFromAssociatedCollection.SerializableRunnable<ActionPrompt>() {
-                                private static final long serialVersionUID = 1L;
-
-                                @Override
-                                public ActionPrompt call() {
-                                    return performOnClick(target);
-                                }
-                            }
-                            );
+                    val selectedMementos = toggledMementosProviderIfAny.getToggles();
+                    val selectedPojos = selectedMementos
+                            .map(commonContext::reconstructObject)
+                            .map(ManagedObject::getPojo);
+                    
+                    val actionPrompt = ActionParameterDefaultsFacetFromAssociatedCollection
+                            .applyWithSelected(
+                                    selectedPojos,
+                                    //TODO[2253] can we remove the Serializable cast? 
+                                    (Function<AjaxRequestTarget, ActionPrompt>&Serializable) this::performOnClick,
+                                    target);
+                    
                     if(actionPrompt != null) {
                         actionPrompt.setOnClose(new ActionPrompt.CloseHandler() {
                             private static final long serialVersionUID = 1L;
@@ -158,13 +144,13 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
             final ActionLink actionLink,
             final AjaxRequestTarget target) {
 
-        final ActionModel actionModel = actionLink.getActionModel();
+        val actionModel = actionLink.getActionModel();
 
-        InlinePromptContext inlinePromptContext = determineInlinePromptContext();
-        PromptStyle promptStyle = actionModel.getPromptStyle();
+        val inlinePromptContext = determineInlinePromptContext();
+        val promptStyle = actionModel.getPromptStyle();
 
         if(inlinePromptContext == null || promptStyle.isDialog()) {
-            final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(actionLink.getPage());
+            final ActionPromptProvider promptProvider = ActionPromptProvider.getFrom(actionLink.getPage());
             val spec = actionModel.getTargetAdapter().getSpecification();
 
             final ActionPrompt prompt = promptProvider.getActionPrompt(promptStyle, spec.getBeanSort());
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index b15dc67..eb848a6 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -195,7 +195,7 @@ implements ScalarModelSubscriber2 {
     protected void closePromptIfAny(final AjaxRequestTarget target) {
 
         try {
-            final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(parentPanel);
+            final ActionPromptProvider promptProvider = ActionPromptProvider.getFrom(parentPanel);
             if(promptProvider != null) {
                 promptProvider.closePrompt(target);
             }