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/12/10 12:36:01 UTC
[isis] branch master updated: ISIS-2915: remove ambiguities in Identifier.Type
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 60fd2aa ISIS-2915: remove ambiguities in Identifier.Type
60fd2aa is described below
commit 60fd2aac4c997356f4b4f067ae1436444ad545ea
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 10 13:35:47 2021 +0100
ISIS-2915: remove ambiguities in Identifier.Type
- source of quite some bugs lately
- fixes data-table associated action lookup when the element providing
Collection is a mixed-in one
---
.../java/org/apache/isis/applib/Identifier.java | 40 +++++++++++++++-------
.../interactions/managed/ActionInteraction.java | 4 +--
.../managed/nonscalar/DataTableModel.java | 11 +++---
.../specimpl/OneToManyAssociationMixedIn.java | 2 +-
.../specimpl/OneToOneAssociationMixedIn.java | 2 +-
.../specimpl/dflt/_PropertiesAsColumns.java | 14 +++++---
6 files changed, 48 insertions(+), 25 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
index 9b9cfda..d1d4bd7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
@@ -57,22 +57,29 @@ implements
/**
* What type of feature this identifies.
- * @apiNote <i>Action Parameters</i> (for historic reasons) have {@link Type#ACTION},
- * but other than <i>Actions</i>, have a non-negative {@link #parameterIndex}.
- * (Future work, might introduce a new Type: eg. PARAMETER)
*/
public static enum Type {
+ /**
+ * A <i>Value-type</i> or <i>Domain Object</i>.
+ */
CLASS,
- PROPERTY_OR_COLLECTION,
/**
- * Mixed in <i>Properties</i> and mixed in <i>Collections</i> are both categorized
- * as {@link #ACTION};
- * @apiNote future work might deal with this ambiguity
+ * <i>Action</i> either declared or mixed in.
*/
- ACTION;
- public boolean isAction() { return this == ACTION; }
- public boolean isPropertyOrCollection() { return this == PROPERTY_OR_COLLECTION; }
+ ACTION,
+ /**
+ * <i>Action Parameter</i>, also has a non-negative {@link #parameterIndex}.
+ */
+ ACTION_PARAMETER,
+ /**
+ * <i>Association</i> (of any cardinality), either declared or mixed in.
+ */
+ PROPERTY_OR_COLLECTION
+ ;
public boolean isClass() { return this == CLASS; }
+ public boolean isAction() { return this == ACTION; }
+ public boolean isActionParameter() { return this == ACTION_PARAMETER; }
+ public boolean isPropertyOrCollection() { return this == PROPERTY_OR_COLLECTION;}
}
// -- FACTORY METHODS
@@ -88,6 +95,13 @@ implements
Type.PROPERTY_OR_COLLECTION);
}
+ public static Identifier mixedInPropertyOrCollectionIdentifier(
+ final LogicalType typeIdentifier,
+ final String memberName,
+ final Can<String> singleParameterClassNames) {
+ return new Identifier(typeIdentifier, memberName, singleParameterClassNames, Type.PROPERTY_OR_COLLECTION);
+ }
+
/** for reporting orphaned methods */
public static Identifier methodIdentifier(
final LogicalType typeIdentifier,
@@ -182,10 +196,10 @@ implements
// -- WITHERS
public Identifier withParameterIndex(final int parameterIndex) {
- return new Identifier(logicalType, memberLogicalName, memberParameterClassNames, type, parameterIndex);
+ return new Identifier(
+ logicalType, memberLogicalName, memberParameterClassNames, Type.ACTION_PARAMETER, parameterIndex);
}
-
// -- LOGICAL ID
public String getLogicalIdentityString(final @NonNull String delimiter) {
@@ -305,5 +319,7 @@ implements
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index f1fc78b..0e30833 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -35,7 +35,8 @@ import lombok.NonNull;
import lombok.Value;
import lombok.val;
-public final class ActionInteraction extends MemberInteraction<ManagedAction, ActionInteraction> {
+public final class ActionInteraction
+extends MemberInteraction<ManagedAction, ActionInteraction> {
public static enum SemanticConstraint {
NONE,
@@ -54,7 +55,6 @@ public final class ActionInteraction extends MemberInteraction<ManagedAction, Ac
final @NonNull ManagedObject owner,
final @NonNull String memberId,
final @NonNull Where where) {
-
return startWithMultiselect(owner, memberId, where, Can::empty);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
index d937ef5..f1ee825 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
@@ -206,11 +206,12 @@ implements MultiselectChoices {
public ActionInteraction startAssociatedActionInteraction(final String actionId, final Where where) {
val featureId = managedMember.getIdentifier();
- if(featureId.getType().isAction()) {
- return ActionInteraction.empty(String.format("[no such associated action %s for collection %s "
- + "(which is not a collection)]",
- actionId,
- featureId));
+ if(!featureId.getType().isPropertyOrCollection()) {
+ return ActionInteraction.empty(String.format("[no such collection %s; instead got %s;"
+ + "(while searching for an associated action %s)]",
+ featureId,
+ featureId.getType(),
+ actionId));
}
return ActionInteraction.startWithMultiselect(managedMember.getOwner(), actionId, where, this);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index f800358..6475c45 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -90,7 +90,7 @@ implements MixedInMember {
final Class<?> mixinType,
final String mixinMethodName) {
- super(Identifier.actionIdentifier(
+ super(Identifier.mixedInPropertyOrCollectionIdentifier(
LogicalType.eager(
mixeeSpec.getCorrespondingClass(),
mixeeSpec.getLogicalTypeName()),
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index b68910b..01a758f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -73,7 +73,7 @@ implements MixedInMember {
final Class<?> mixinType,
final String mixinMethodName) {
- super(Identifier.actionIdentifier(
+ super(Identifier.mixedInPropertyOrCollectionIdentifier(
LogicalType.eager(
mixeeSpec.getCorrespondingClass(),
mixeeSpec.getLogicalTypeName()),
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/_PropertiesAsColumns.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/_PropertiesAsColumns.java
index 7598174..0df6665 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/_PropertiesAsColumns.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/_PropertiesAsColumns.java
@@ -68,9 +68,7 @@ class _PropertiesAsColumns implements HasMetaModelContext {
val parentSpecIfAny = parentObject.getSpecification();
- val whereContext = memberIdentifier.getType().isAction()
- ? Where.STANDALONE_TABLES
- : Where.PARENTED_TABLES;
+ val whereContext = whereContextFor(memberIdentifier);
val propertyById = _Maps.<String, OneToOneAssociation>newLinkedHashMap();
@@ -156,9 +154,11 @@ class _PropertiesAsColumns implements HasMetaModelContext {
return;
}
+ val whereContext = whereContextFor(memberIdentifier);
+
tableColumnOrderServices.stream()
.map(tableColumnOrderService->
- memberIdentifier.getType().isAction()
+ whereContext.inStandaloneTable()
? tableColumnOrderService.orderStandalone(
elementType,
propertyIdsInOrder)
@@ -197,4 +197,10 @@ class _PropertiesAsColumns implements HasMetaModelContext {
};
}
+ static Where whereContextFor(final Identifier memberIdentifier) {
+ return memberIdentifier.getType().isAction()
+ ? Where.STANDALONE_TABLES
+ : Where.PARENTED_TABLES;
+ }
+
}