You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/07/18 06:00:56 UTC
[isis] 07/09: ISIS-1632: adds meta-annotation support for Jdo
@Column and others
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 1d2170ef636f3d959e85d43bd3c7c6ab5fd4558b
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jul 18 07:58:30 2018 +0200
ISIS-1632: adds meta-annotation support for Jdo @Column and others
others being @Digits and @Nullable.
The @Column support was needed because otherwise the metamodel validator (MetaModelValidatorForConflictingOptionality) was throwing an incompatible nullability issue for SimpleObject#name (which is annotated using @Name that itself is annotated with @Column(allowsNull="false") ).
---
.../isis/core/metamodel/facets/Annotations.java | 8 ++++++--
.../action/ActionAnnotationFacetFactory.java | 7 ++++---
...yFromJavaxValidationDigitsAnnotationFactory.java | 4 +++-
.../property/PropertyAnnotationFacetFactory.java | 3 ++-
...lDerivedFromJdoColumnAnnotationFacetFactory.java | 5 +++--
...andatoryFromJdoColumnAnnotationFacetFactory.java | 21 +++++++++++----------
6 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 06311db..1e87972 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -36,6 +36,8 @@ import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.CollectionLayout;
import org.apache.isis.applib.annotation.MemberOrder;
@@ -47,8 +49,6 @@ import org.apache.isis.core.commons.reflection.Reflect;
import org.apache.isis.core.metamodel.exceptions.MetaModelException;
import org.apache.isis.core.metamodel.methodutils.MethodScope;
-import com.google.common.collect.Lists;
-
public final class Annotations {
private Annotations() {}
@@ -226,6 +226,10 @@ public final class Annotations {
/**
* Searches for annotation on provided method, and if not found for any
* inherited methods up from the superclass.
+ *
+ * <p>
+ * WARN: this method does NOT search for meta-annotations; use {@link #getAnnotations(Class, Class)} for that.
+ * </p>
*/
public static <T extends Annotation> T getAnnotation(
final Method method,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 3d6eb0a..00d6227 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -22,6 +22,8 @@ package org.apache.isis.core.metamodel.facets.actions.action;
import java.lang.reflect.Method;
import java.util.List;
+import com.google.common.base.Strings;
+
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.events.domain.ActionDomainEvent;
import org.apache.isis.applib.services.HasTransactionId;
@@ -58,8 +60,6 @@ import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrder
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.util.EventUtil;
-import com.google.common.base.Strings;
-
public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
@@ -291,7 +291,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
// check for @Action(associateWith=...)
- final Action action = Annotations.getAnnotation(method, Action.class);
+ final List<Action> actions = Annotations.getAnnotations(method, Action.class);
+ final Action action = actions.isEmpty() ? null : actions.get(0);
if (action != null) {
final String associateWith = action.associateWith();
if(!Strings.isNullOrEmpty(associateWith)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
index 8f1bb1a..4b392bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
import java.math.BigDecimal;
+import java.util.List;
import javax.validation.constraints.Digits;
@@ -42,7 +43,8 @@ public class BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory
return;
}
- final Digits annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Digits.class);
+ final List<Digits> annotations = Annotations.getAnnotations(processMethodContext.getMethod(), Digits.class);
+ final Digits annotation = annotations.isEmpty() ? null : annotations.get(0);
if (annotation == null) {
return;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index ae75861..bd23367 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -285,7 +285,8 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
final FacetHolder holder = processMethodContext.getFacetHolder();
// check for @Nullable
- final Nullable nullableAnnotation = Annotations.getAnnotation(method, Nullable.class);
+ final List<Nullable> nullableAnnotations = Annotations.getAnnotations(method, Nullable.class);
+ final Nullable nullableAnnotation = nullableAnnotations.isEmpty() ? null : nullableAnnotations.get(0);
final MandatoryFacet facet2 =
MandatoryFacetInvertedByNullableAnnotationOnProperty.create(nullableAnnotation, method, holder);
FacetUtil.addFacet(facet2);
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
index 64a674a..5adc667 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -63,9 +63,10 @@ public class BigDecimalDerivedFromJdoColumnAnnotationFacetFactory extends FacetF
final FacetedMethod holder = processMethodContext.getFacetHolder();
- BigDecimalValueFacet existingFacet = (BigDecimalValueFacet) holder.getFacet(BigDecimalValueFacet.class);
+ BigDecimalValueFacet existingFacet = holder.getFacet(BigDecimalValueFacet.class);
- final Column jdoColumnAnnotation = Annotations.getAnnotation(processMethodContext.getMethod(), Column.class);
+ final List<Column> jdoColumnAnnotations = Annotations.getAnnotations(processMethodContext.getMethod(), Column.class);
+ final Column jdoColumnAnnotation = jdoColumnAnnotations.isEmpty() ? null : jdoColumnAnnotations.get(0);
if (jdoColumnAnnotation == null) {
if(existingFacet != null && !existingFacet.isNoop()) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index 6432668..2e9519f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -63,7 +63,7 @@ public class MandatoryFromJdoColumnAnnotationFacetFactory extends FacetFactoryAb
return;
}
- final Column annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Column.class);
+ final List<Column> annotations = Annotations.getAnnotations(processMethodContext.getMethod(), Column.class);
final FacetedMethod holder = processMethodContext.getFacetHolder();
@@ -82,22 +82,23 @@ public class MandatoryFromJdoColumnAnnotationFacetFactory extends FacetFactoryAb
}
}
+ final Column annotation = annotations.isEmpty() ? null : annotations.get(0);
boolean required = whetherRequired(processMethodContext, annotation);
MandatoryFacet facet = annotation != null
? new MandatoryFacetDerivedFromJdoColumn(holder, required)
: new MandatoryFacetInferredFromAbsenceOfJdoColumn(holder, required);
- // as a side-effect, will chain any existing facets.
- // we'll exploit this fact for meta-model validation (see #refineMetaModelValidator(), below)
- FacetUtil.addFacet(facet);
+ // as a side-effect, will chain any existing facets.
+ // we'll exploit this fact for meta-model validation (see #refineMetaModelValidator(), below)
+ FacetUtil.addFacet(facet);
- // however, if a @Column was explicitly provided, and the underlying facet
- // was the simple MandatoryFacetDefault (from an absence of @Optional or @Mandatory),
- // then don't chain, simply replace.
- if(facet instanceof MandatoryFacetDerivedFromJdoColumn && facet.getUnderlyingFacet() instanceof MandatoryFacetDefault) {
- facet.setUnderlyingFacet(null);
- }
+ // however, if a @Column was explicitly provided, and the underlying facet
+ // was the simple MandatoryFacetDefault (from an absence of @Optional or @Mandatory),
+ // then don't chain, simply replace.
+ if(facet instanceof MandatoryFacetDerivedFromJdoColumn && facet.getUnderlyingFacet() instanceof MandatoryFacetDefault) {
+ facet.setUnderlyingFacet(null);
+ }
}
private static boolean whetherRequired(final ProcessMethodContext processMethodContext, final Column annotation) {