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 08:59:02 UTC
[isis] branch master updated: ISIS-2492: simplify
ObjectActionContainer (2)
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 c866e86 ISIS-2492: simplify ObjectActionContainer (2)
c866e86 is described below
commit c866e86489b74ed77643bd7c4b7a0be675f27fbd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 23 09:58:45 2021 +0100
ISIS-2492: simplify ObjectActionContainer (2)
---
.../isis/commons/collections/ImmutableEnumSet.java | 6 ++--
.../isis/core/metamodel/spec/ActionType.java | 2 +-
.../spec/feature/ObjectActionContainer.java | 32 ++++++++++------------
.../specimpl/ObjectSpecificationAbstract.java | 22 +++++++++------
.../specimpl/dflt/ObjectSpecificationDefault.java | 4 +--
.../testspec/ObjectSpecificationStub.java | 9 +++---
.../common/model/mementos/ActionMemento.java | 2 +-
7 files changed, 41 insertions(+), 36 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java b/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
index 2f45e1a..211a2f2 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
@@ -20,6 +20,7 @@ package org.apache.isis.commons.collections;
import java.util.EnumSet;
import java.util.Iterator;
+import java.util.stream.Stream;
/**
* Immutable variant of {@link EnumSet}
@@ -82,7 +83,8 @@ implements Iterable<E>, java.io.Serializable {
return delegate.iterator();
}
-
-
+ public Stream<E> stream() {
+ return delegate.stream();
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
index 377585f..afbc238 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
@@ -39,5 +39,5 @@ public enum ActionType {
public static final ImmutableEnumSet<ActionType> USER_ONLY = ImmutableEnumSet.of(ActionType.USER);
public static final ImmutableEnumSet<ActionType> USER_AND_PROTOTYPE = ImmutableEnumSet.of(ActionType.USER, ActionType.PROTOTYPE);
- public static final ImmutableEnumSet<ActionType> ALL = ImmutableEnumSet.allOf(ActionType.class);
+ public static final ImmutableEnumSet<ActionType> ANY = ImmutableEnumSet.allOf(ActionType.class);
}
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 7f1be9b..7304092 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
@@ -27,13 +27,12 @@ import org.apache.isis.commons.collections.ImmutableEnumSet;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.spec.ActionType;
-import static org.apache.isis.commons.internal.base._NullSafe.stream;
-
public interface ObjectActionContainer {
+ // -- ACTION LOOKUP
+
/**
* Get the action object represented by the specified identity string.
- *
* <p>
* The identity string can be either fully specified with parameters (as per
* {@link Identifier#toNameParmsIdentityString()} or in abbreviated form (
@@ -41,18 +40,16 @@ public interface ObjectActionContainer {
*
* @see #getObjectAction(String)
*/
- Optional<ObjectAction> getObjectAction(ActionType type, String id);
+ Optional<ObjectAction> getObjectAction(String id, ActionType type);
- default ObjectAction getObjectActionElseFail(ActionType type, String id) {
- return getObjectAction(type, id)
- .orElseThrow(()->_Exceptions.noSuchElement("type=%s id=%s", type, id));
+ default ObjectAction getObjectActionElseFail(String id, ActionType type) {
+ return getObjectAction(id, type)
+ .orElseThrow(()->_Exceptions.noSuchElement("id=%s type=%s", id, type));
}
-
/**
* 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 (
@@ -67,20 +64,19 @@ public interface ObjectActionContainer {
.orElseThrow(()->_Exceptions.noSuchElement("id=%s", id));
}
- default Stream<ObjectAction> streamObjectActions(MixedIn contributed) {
- return streamObjectActions(ActionType.ALL, contributed);
- }
+ // -- ACTION STREAM
/**
* Returns an array of actions of the specified type, including or excluding
* contributed actions as required.
*/
- Stream<ObjectAction> streamObjectActions(ActionType type, MixedIn contributed);
+ Stream<ObjectAction> streamObjectActions(ImmutableEnumSet<ActionType> types, MixedIn contributed);
- default Stream<ObjectAction> streamObjectActions(ImmutableEnumSet<ActionType> types, MixedIn contributed) {
- return stream(types)
- .flatMap(type->streamObjectActions(type, contributed));
+ default Stream<ObjectAction> streamObjectActions(ActionType type, MixedIn contributed) {
+ return streamObjectActions(ImmutableEnumSet.of(type), contributed);
+ }
+
+ default Stream<ObjectAction> streamObjectActions(MixedIn contributed) {
+ return streamObjectActions(ActionType.ANY, contributed);
}
-
-
}
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 fd4707c..0767296 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
@@ -34,6 +34,7 @@ import javax.enterprise.inject.Vetoed;
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.base._NullSafe;
import org.apache.isis.commons.internal.base._Strings;
@@ -43,6 +44,7 @@ import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.collections._Streams;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.commons.internal.functions._Predicates;
import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
import org.apache.isis.core.metamodel.commons.ClassExtensions;
import org.apache.isis.core.metamodel.consent.Consent;
@@ -733,16 +735,20 @@ implements ObjectSpecification {
}
@Override
- public Stream<ObjectAction> streamObjectActions(final ActionType type, final MixedIn contributed) {
+ public Stream<ObjectAction> streamObjectActions(
+ final ImmutableEnumSet<ActionType> types,
+ final MixedIn contributed) {
introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
- if(contributed.isIncluded()) {
+ if(contributed.isIncluded()) { // conditional not strictly required, could instead always go this code path
createMixedInActions(); // only if not already
- return stream(objectActionsByType.get(type));
}
-
- return stream(objectActionsByType.get(type))
- .filter(MixedIn::isNotMixedIn);
+
+ return types.stream()
+ .flatMap(type->stream(objectActionsByType.get(type)))
+ .filter(contributed.isIncluded()
+ ? _Predicates.alwaysTrue()
+ : MixedIn::isNotMixedIn);
}
// -- mixin associations (properties and collections)
@@ -780,7 +786,7 @@ implements ObjectSpecification {
val mixinMethodName = mixinFacet.value();
final Stream<ObjectAction> mixinActions = specification
- .streamObjectActions(ActionType.ALL, MixedIn.INCLUDED);
+ .streamObjectActions(ActionType.ANY, MixedIn.INCLUDED);
mixinActions
.filter(Predicates::isMixedInAssociation)
@@ -835,7 +841,7 @@ implements ObjectSpecification {
val mixinMethodName = mixinFacet.value();
final Stream<ObjectAction> mixinsActions = mixinSpec
- .streamObjectActions(ActionType.ALL, MixedIn.INCLUDED);
+ .streamObjectActions(ActionType.ANY, MixedIn.INCLUDED);
mixinsActions
.filter(Predicates::isMixedInAction)
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 c816a85..38d7b43 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
@@ -268,7 +268,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
// -- getObjectAction
@Override
- public Optional<ObjectAction> getObjectAction(final ActionType type, final String id) {
+ public Optional<ObjectAction> getObjectAction(final String id, final ActionType type) {
introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
final Stream<ObjectAction> actions =
@@ -281,7 +281,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
final Stream<ObjectAction> actions =
- streamObjectActions(ActionType.ALL, MixedIn.INCLUDED);
+ streamObjectActions(ActionType.ANY, 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 7529639..e493979 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
@@ -29,6 +29,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.Can;
+import org.apache.isis.commons.collections.ImmutableEnumSet;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -167,7 +168,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public Optional<ObjectAction> getObjectAction(final ActionType type, final String id) {
+ public Optional<ObjectAction> getObjectAction(final String id, final ActionType type) {
final int openBracket = id.indexOf('(');
return getObjectAction(type, id.substring(0, openBracket), null);
}
@@ -175,7 +176,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
@Override
public Optional<ObjectAction> getObjectAction(final String nameParmsIdentityString) {
for (final ActionType type : ActionType.values()) {
- val action = getObjectAction(type, nameParmsIdentityString);
+ val action = getObjectAction(nameParmsIdentityString, type);
if (action.isPresent()) {
return action;
}
@@ -308,10 +309,10 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public Stream<ObjectAction> streamObjectActions(final ActionType type, final MixedIn contributed) {
+ public Stream<ObjectAction> streamObjectActions(ImmutableEnumSet<ActionType> types, MixedIn contributed) {
return null;
}
-
+
// /////////////////////////////////////////////////////////
// view models and wizards
// /////////////////////////////////////////////////////////
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
index d5d564b..3d72977 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
@@ -91,7 +91,7 @@ public class ActionMemento implements Serializable {
SpecificationLoader specificationLoader) {
val objectSpec = specificationLoader.lookupBySpecIdElseLoad(owningType);
- return objectSpec.getObjectActionElseFail(actionType, nameParmsId);
+ return objectSpec.getObjectActionElseFail(nameParmsId, actionType);
}
}