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 2018/10/05 10:50:06 UTC
[isis] branch v2 updated: ISIS-1976: moving responsibility for
mixed in action lookup into ObjectSpecification API
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new 9f262ab ISIS-1976: moving responsibility for mixed in action lookup into ObjectSpecification API
9f262ab is described below
commit 9f262ab4f4c0281799a5f7e7091b344aecb2db58
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 5 12:49:43 2018 +0200
ISIS-1976: moving responsibility for mixed in action lookup into
ObjectSpecification API
Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
.../commons/internal/functions/_Predicates.java | 8 ++++++
...ctionInvocationFacetForDomainEventAbstract.java | 24 ++--------------
.../core/metamodel/spec/ObjectSpecification.java | 25 ++++++++++++----
.../core/metamodel/spec/feature/ObjectAction.java | 33 +++++++++++++---------
.../specimpl/dflt/ObjectSpecificationDefault.java | 2 +-
5 files changed, 50 insertions(+), 42 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
index 68bce34..1c84e8c 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
@@ -76,4 +76,12 @@ public final class _Predicates {
return null;
}
+ /**
+ * @param superClass
+ * @return a Predicate that tests for the operand to be an instance of {@code superClass}
+ */
+ public static Predicate<Object> instanceOf(Class<?> superClass) {
+ return obj->superClass.isAssignableFrom(obj.getClass());
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 2847107..e96e02e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -29,7 +29,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -81,9 +80,7 @@ import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal
import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember;
import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
public abstract class ActionInvocationFacetForDomainEventAbstract
@@ -338,26 +335,9 @@ implements ImperativeFacet {
return filteredIfRequired(returnedAdapter, interactionInitiatedBy);
}
- // TODO: could improve this, currently have to go searching for the mixin
private static String targetNameFor(ObjectAction owningAction, ObjectAdapter mixedInAdapter) {
- if(mixedInAdapter != null) {
- final ObjectSpecification onType = owningAction.getOnType();
- final ObjectSpecification mixedInSpec = mixedInAdapter.getSpecification();
- final Stream<ObjectAction> objectActions = mixedInSpec.streamObjectActions(Contributed.INCLUDED);
-
- final Optional<String> mixinName = objectActions
- .filter(action->action instanceof MixedInMember)
- .map(action->(MixedInMember) action)
- .filter(action->action.getMixinType() == onType)
- .findAny()
- .map(MixedInMember::getName);
-
- if(mixinName.isPresent()) {
- return mixinName.get();
- }
-
- }
- return CommandUtil.targetMemberNameFor(owningAction);
+ return ObjectAction.Util.targetNameFor(owningAction, mixedInAdapter)
+ .orElseGet(()->CommandUtil.targetMemberNameFor(owningAction));
}
private static String trim(String message, final int maxLen) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 733a2dd..97ef21e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -19,7 +19,10 @@
package org.apache.isis.core.metamodel.spec;
+import static org.apache.isis.commons.internal.functions._Predicates.instanceOf;
+
import java.util.Comparator;
+import java.util.Optional;
import java.util.function.Function;
import org.apache.isis.applib.annotation.DomainObject;
@@ -45,11 +48,13 @@ import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.interactions.InteractionContext;
import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationContainer;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
+import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember;
/**
* Represents an entity or value (cf {@link java.lang.Class}) within the
@@ -64,8 +69,6 @@ import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitut
public interface ObjectSpecification extends Specification, ObjectActionContainer,
ObjectAssociationContainer, Hierarchical, DefaultProvider {
- ObjectMember getMember(String memberId);
-
final class Comparators{
private Comparators(){}
@@ -84,6 +87,21 @@ ObjectAssociationContainer, Hierarchical, DefaultProvider {
public static final Function<ObjectSpecification, String> FULL_IDENTIFIER =
ObjectSpecification::getFullIdentifier;
}
+
+ ObjectMember getMember(String memberId);
+
+ /**
+ * @param onType
+ * @return
+ * @since 2.0.0-M2
+ */
+ public default Optional<MixedInMember> getMixedInMember(ObjectSpecification onType) {
+ return streamObjectActions(Contributed.INCLUDED)
+ .filter(instanceOf(MixedInMember.class))
+ .map(member->(MixedInMember) member)
+ .filter(member->member.getMixinType() == onType)
+ .findAny();
+ }
/**
* @return
@@ -347,9 +365,6 @@ ObjectAssociationContainer, Hierarchical, DefaultProvider {
boolean isPersistenceCapable();
boolean isPersistenceCapableOrViewModel();
-
-
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 1ae2f63..77c80de 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -23,10 +23,13 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;
+import javax.annotation.Nullable;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.PromptStyle;
@@ -53,6 +56,7 @@ import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember;
public interface ObjectAction extends ObjectMember {
@@ -190,17 +194,6 @@ public interface ObjectAction extends ObjectMember {
final InteractionInitiatedBy interactionInitiatedBy);
-
-// // -- setupBulkActionInvocationContext
-// /**
-// * internal API, called by {@link ActionInvocationFacet} if the action is actually executed (ie in the foreground).
-// */
-// void setupBulkActionInvocationContext(
-// final ObjectAdapter targetAdapter);
-//
-
-
-
// -- Util
public static final class Util {
@@ -306,7 +299,6 @@ public interface ObjectAction extends ObjectMember {
ObjectAction.Predicates.memberOrderNotAssociationOf(adapterSpec)
.and(ObjectAction.Predicates.dynamicallyVisible(adapter,
InteractionInitiatedBy.USER, Where.ANYWHERE))
-// .and(ObjectAction.Predicates.notBulkOnly())
.and(ObjectAction.Predicates.excludeWizardActions(adapterSpec));
final Stream<ObjectAction> userActions =
@@ -348,7 +340,6 @@ public interface ObjectAction extends ObjectMember {
Predicate<ObjectAction> predicate =
ObjectAction.Predicates.memberOrderOf(association)
-// .and(ObjectAction.Predicates.notBulkOnly())
.and(ObjectAction.Predicates.excludeWizardActions(objectSpecification));
final Stream<ObjectAction> userActions =
@@ -371,10 +362,24 @@ public interface ObjectAction extends ObjectMember {
}
return promptStyle;
}
+
+ public static Optional<String> targetNameFor(
+ final ObjectAction owningAction,
+ final @Nullable ObjectAdapter mixedInAdapter) {
+
+ if(mixedInAdapter != null) {
+ final ObjectSpecification onType = owningAction.getOnType();
+ final ObjectSpecification mixedInSpec = mixedInAdapter.getSpecification();
+ final Optional<String> mixinName = mixedInSpec.getMixedInMember(onType)
+ .map(MixedInMember::getName);
+
+ return mixinName;
+ }
+ return Optional.empty();
+ }
}
-
// -- Predicates
public static final class Predicates {
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 1583fa6..d562294 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
@@ -395,7 +395,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
});
});
}
-
+
// -- toString
@Override