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/01/23 09:23:48 UTC

[isis] branch master updated: ISIS-2492: simplify ObjectActionContainer (3)

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 36362cd  ISIS-2492: simplify ObjectActionContainer (3)
36362cd is described below

commit 36362cd6125660581195ec633a5aa2e2d40b3780
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 23 10:23:31 2021 +0100

    ISIS-2492: simplify ObjectActionContainer (3)
---
 .../spec/feature/ObjectActionContainer.java        | 24 ++++++++---------
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 16 +++++-------
 .../testspec/ObjectSpecificationStub.java          | 30 +++++++++-------------
 3 files changed, 30 insertions(+), 40 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
index 7304092..20fb116 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
@@ -22,6 +22,8 @@ package org.apache.isis.core.metamodel.spec.feature;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -40,24 +42,22 @@ public interface ObjectActionContainer {
      *
      * @see #getObjectAction(String)
      */
-    Optional<ObjectAction> getObjectAction(String id, ActionType type);
+    Optional<ObjectAction> getObjectAction(String id, @Nullable ActionType type);
     
-    default ObjectAction getObjectActionElseFail(String id, ActionType type) {
+    default ObjectAction getObjectActionElseFail(String id, @Nullable ActionType type) {
         return getObjectAction(id, type)
-                .orElseThrow(()->_Exceptions.noSuchElement("id=%s type=%s", id, type));  
+                .orElseThrow(()->_Exceptions.noSuchElement("id=%s type=%s", 
+                        id, 
+                        type==null ? "any" : type.name()));  
     }
 
     /**
-     * Get the action object represented by the specified identity string,
-     * irrespective of {@link ActionType}.
-     * <p>
-     * The identity string can be either fully specified with parameters (as per
-     * {@link Identifier#toNameParmsIdentityString()} or in abbreviated form (
-     * {@link Identifier#toNameIdentityString()}).
-     *
-     * @see #getObjectAction(ActionType, String)
+     * Shortcut to {@link #getObjectAction(String, null)}, meaning where action type is <i>any</i>.
+     * @see #getObjectAction(String, ActionType)
      */
-    Optional<ObjectAction> getObjectAction(String id);
+    default Optional<ObjectAction> getObjectAction(String id) {
+        return getObjectAction(id, null);
+    }
     
     default ObjectAction getObjectActionElseFail(String id) {
         return getObjectAction(id)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 38d7b43..107a28d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -28,6 +28,7 @@ import java.util.stream.Stream;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.metamodel.BeanSort;
+import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
@@ -272,16 +273,11 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
 
         final Stream<ObjectAction> actions =
-                streamObjectActions(type, MixedIn.INCLUDED);
-        return firstAction(actions, id);
-    }
-
-    @Override
-    public Optional<ObjectAction> getObjectAction(final String id) {
-        introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
-
-        final Stream<ObjectAction> actions =
-                streamObjectActions(ActionType.ANY, MixedIn.INCLUDED);
+                streamObjectActions(
+                        type==null 
+                            ? ActionType.ANY 
+                            : ImmutableEnumSet.of(type), 
+                        MixedIn.INCLUDED);
         return firstAction(actions, id);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index e493979..f4d8cce 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.metamodel.BeanSort;
-import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.consent.Consent;
@@ -155,12 +154,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
         return null;
     }
 
-    //@Override
-    private Optional<ObjectAction> getObjectAction(
-            final ActionType type,
-            final String name, 
-            final Can<ObjectSpecification> parameters) {
-        
+    private Optional<ObjectAction> lookupObjectAction(final String name) {
         if (action != null && action.getId().equals(name)) {
             return Optional.of(action);
         }
@@ -169,19 +163,19 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
 
     @Override
     public Optional<ObjectAction> getObjectAction(final String id, final ActionType type) {
-        final int openBracket = id.indexOf('(');
-        return getObjectAction(type, id.substring(0, openBracket), null);
-    }
-
-    @Override
-    public Optional<ObjectAction> getObjectAction(final String nameParmsIdentityString) {
-        for (final ActionType type : ActionType.values()) {
-            val action = getObjectAction(nameParmsIdentityString, type);
-            if (action.isPresent()) {
-                return action;
-            }
+        val nameParmsIdentityString = id.substring(0, id.indexOf('('));
+        val action = lookupObjectAction(nameParmsIdentityString);
+        
+        if(type==null) {
+            return action;
+        }
+        
+        if (action.isPresent()
+                && action.get().getType() == type) {
+            return action;
         }
         return Optional.empty();
+        
     }
 
     @Override