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/02/19 15:29:39 UTC
[isis] branch master updated: ISIS-2498: remove
ActionParameterChoicesFacetFromParentedCollection's requirement for mixins
to hold their mixees
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 7674de9 ISIS-2498: remove ActionParameterChoicesFacetFromParentedCollection's requirement for mixins to hold their mixees
7674de9 is described below
commit 7674de9700c0ebacb048ae8d95f089690958a525
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Feb 19 16:29:24 2021 +0100
ISIS-2498: remove ActionParameterChoicesFacetFromParentedCollection's
requirement for mixins to hold their
mixees
---
.../metamodel/facets/object/mixin/MixinFacet.java | 7 ---
.../facets/object/mixin/MixinFacetAbstract.java | 68 +---------------------
.../mixin/MixinFacetForDomainObjectAnnotation.java | 8 +--
.../objectvalue/choices/ChoicesFacetAbstract.java | 4 +-
...arameterChoicesFacetFromParentedCollection.java | 19 +++---
.../object/mixin/MixinFacetAbstract_Test.java | 2 +-
6 files changed, 19 insertions(+), 89 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
index 2121dcc..727f910 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
@@ -27,7 +27,6 @@ import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.Property;
import org.apache.isis.core.metamodel.facets.SingleValueFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
/**
@@ -52,12 +51,6 @@ public interface MixinFacet extends SingleValueFacet<String> {
}
/**
- * Returns the (adapter of the) domain object that is the <i>holder</i> of the
- * given mix-in adapter.
- */
- ManagedObject mixedIn(ManagedObject mixinAdapter, Policy policy);
-
- /**
* Returns the mix-in around the provided domain object (<i>holder</i>)
*/
Object instantiate(Object holderPojo);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
index ccc3561..4bf3810 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@ -20,27 +20,18 @@
package org.apache.isis.core.metamodel.facets.object.mixin;
import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
-import java.util.Optional;
-import javax.annotation.Nullable;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.commons.functional.Result;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
import lombok.val;
-import lombok.extern.log4j.Log4j2;
-@Log4j2
+//@Log4j2
public abstract class MixinFacetAbstract
extends SingleValueFacetAbstract<String>
implements MixinFacet {
@@ -48,7 +39,6 @@ implements MixinFacet {
private final Class<?> mixinType;
private final Class<?> holderType;
private final Constructor<?> constructor;
- private final Field holderField; // XXX validators should check whether we found the field
public static Class<? extends Facet> type() {
return MixinFacet.class;
@@ -58,32 +48,13 @@ implements MixinFacet {
final Class<?> mixinType,
final String value,
final Constructor<?> constructor,
- final FacetHolder holder,
- final @Nullable MetaModelValidatorForMixinTypes mixinTypeValidator) { //nullable for testing
+ final FacetHolder holder) {
super(type(), value, holder);
this.mixinType = mixinType;
this.constructor = constructor;
// by mixin convention: first constructor argument is identified as the holder type
this.holderType = constructor.getParameterTypes()[0];
- // search the type hierarchy of the mixin type for any matching (public and non-public) fields
- this.holderField = _Reflect.streamAllFields(mixinType, true)
- .filter(mixinField->mixinField.getType().isAssignableFrom(holderType))
- .findFirst()
- .orElse(null);
-
- if(holderField==null) {
-
- val msg = String.format("Could not find the 'mixed-in' domain object within %s"
- + " (tried to guess by looking at all public and non-public fields "
- + "and matching one against the constructor parameter's type)",
- mixinType.getName());
- log.warn(msg);
-
- if(mixinTypeValidator!=null) {
- mixinTypeValidator.onFailure(holder, Identifier.classIdentifier(mixinType), msg);
- }
- }
}
@Override
@@ -132,15 +103,6 @@ implements MixinFacet {
.isAssignableFrom(constructor.getDeclaringClass());
}
- @Override @Deprecated
- public ManagedObject mixedIn(ManagedObject mixinAdapter, Policy policy) {
- val mixinPojo = mixinAdapter.getPojo();
- val holderPojo = holderPojoFor(mixinPojo, policy);
- return holderPojo!=null
- ? getObjectManager().adapt(holderPojo)
- : null;
- }
-
@Override
public void appendAttributesTo(final Map<String, Object> attributeMap) {
super.appendAttributesTo(attributeMap);
@@ -155,31 +117,5 @@ implements MixinFacet {
public String getMainMethodName() {
return super.value();
}
-
- // -- HELPER
- private Object holderPojoFor(Object mixinPojo, Policy policy) {
-
- val holderPojoGetterResult = Optional.ofNullable(holderField)
- .map(field->Result.of(()->_Reflect.getFieldOn(field, mixinPojo)))
- .orElseGet(()->Result.failure("no such field"));
-
- if(holderPojoGetterResult.isFailure()) {
-
- val msg = String.format(
- "Could not %s the \"mixed-in\" domain object within %s"
- + " (tried to guess by looking at all public and non-public fields "
- + "and matching one against the constructor parameter's type)",
- holderField==null ? "find" : "access",
- getTitleService().titleOf(mixinPojo));
-
- log.warn(msg);
-
- if(policy == Policy.FAIL_FAST) {
- throw _Exceptions.unrecoverable(msg);
- }
- }
-
- return holderPojoGetterResult.getValue().orElse(null);
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
index 37dc83b..cf30a76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
@@ -44,10 +44,9 @@ extends MixinFacetAbstract {
final Class<?> mixinType,
final String value,
final Constructor<?> constructorType,
- final FacetHolder holder,
- MetaModelValidatorForMixinTypes mixinTypeValidator) {
+ final FacetHolder holder) {
- super(mixinType, value, constructorType, holder, mixinTypeValidator);
+ super(mixinType, value, constructorType, holder);
}
public static MixinFacet create(
@@ -70,8 +69,7 @@ extends MixinFacetAbstract {
candidateMixinType,
domainObject.mixinMethod(),
constructor,
- facetHolder,
- mixinTypeValidator))
+ facetHolder))
.orElse(null);
})
.orElse(null);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacetAbstract.java
index 74eb0ae..a0c7603 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacetAbstract.java
@@ -23,7 +23,9 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-public abstract class ChoicesFacetAbstract extends FacetAbstract implements ChoicesFacet {
+public abstract class ChoicesFacetAbstract
+extends FacetAbstract
+implements ChoicesFacet {
public static Class<? extends Facet> type() {
return ChoicesFacet.class;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index f8e8d51..2738fad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.postprocessors.param;
import java.util.Map;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
@@ -33,7 +34,8 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import lombok.val;
-public class ActionParameterChoicesFacetFromParentedCollection extends ActionParameterChoicesFacetAbstract {
+public class ActionParameterChoicesFacetFromParentedCollection
+extends ActionParameterChoicesFacetAbstract {
private final OneToManyAssociation otma;
@@ -51,22 +53,21 @@ public class ActionParameterChoicesFacetFromParentedCollection extends ActionPar
final Can<ManagedObject> pendingArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
- val parentAdapter = determineParentAdapter(target);
- val objectAdapter = otma.get(parentAdapter, interactionInitiatedBy);
- return CollectionFacet.streamAdapters(objectAdapter).collect(Can.toCan());
+ guardAgainstMixin(target);
+ val collectionAdapter = otma.get(target, interactionInitiatedBy);
+ return CollectionFacet.streamAdapters(collectionAdapter).collect(Can.toCan());
}
/**
* in the case of a mixin action, the target passed to the facet is actually the mixin itself,
- * not the mixee.
+ * not the mixee
*/
- private ManagedObject determineParentAdapter(final ManagedObject target) {
+ private void guardAgainstMixin(final ManagedObject target) {
val mixinFacet = target.getSpecification().getFacet(MixinFacet.class);
- ManagedObject mixedInTarget = null;
if(mixinFacet != null) {
- mixedInTarget = mixinFacet.mixedIn(target, MixinFacet.Policy.FAIL_FAST);
+ _Exceptions.unrecoverable("internal error: choices facet invoked on mixin target, "
+ + "but should be a mixee target instead");
}
- return mixedInTarget != null ? mixedInTarget : target;
}
@Override
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
index c4282bf..d338ddc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
@@ -29,7 +29,7 @@ class MixinFacetAbstract_Test {
// given
val constructor = Collection_numberOfChildren.class.getConstructor(Object.class);
val facet = new MixinFacetAbstract(
- Collection_numberOfChildren.class, "prop", constructor, null, null) {};
+ Collection_numberOfChildren.class, "prop", constructor, null) {};
val propMethodInSubclass = SimpleObject_numberOfChildren.class.getMethod("prop");