You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/09/20 12:55:41 UTC

[causeway] 02/02: CAUSEWAY-3593: adds refiner for MaxLengthJpaColumnAnnotationFacetFactory also

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch CAUSEWAY-3593
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 8993dbb1748bcb5bba7937a779dbe831ae302830
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Sep 20 13:55:35 2023 +0100

    CAUSEWAY-3593: adds refiner for MaxLengthJpaColumnAnnotationFacetFactory also
    
    and makes consistent other JDO/JPA classes from prev commit
---
 ...romXxxColumnAnnotationMetaModelRefinerUtil.java |  1 +
 ...romXxxColumnAnnotationMetaModelRefinerUtil.java |  1 +
 ...omXxxColumnAnnotationMetaModelRefinerUtil.java} | 16 +++++------
 ...DecimalFromJdoColumnAnnotationFacetFactory.java | 13 +++++----
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java | 13 ++++-----
 ...xLengthFromJdoColumnAnnotationFacetFactory.java | 33 +++++-----------------
 ...DecimalFromJpaColumnAnnotationFacetFactory.java |  5 ++--
 ...ndatoryFromJpaColumnAnnotationFacetFactory.java |  7 ++---
 ...xLengthFromJpaColumnAnnotationFacetFactory.java | 20 +++++++++----
 9 files changed, 48 insertions(+), 61 deletions(-)

diff --git a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil.java b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil.java
index ebb90f58d6..0e600923a7 100644
--- a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil.java
+++ b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil.java
@@ -9,6 +9,7 @@ import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure
 
 @UtilityClass
 public class BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil {
+
     public static void validateBigDecimalValueFacet(final ObjectAssociation association) {
 
         association.lookupFacet(MaxTotalDigitsFacet.class)
diff --git a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java
index 76da577ad8..312cd89fad 100644
--- a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java
+++ b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java
@@ -8,6 +8,7 @@ import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure
 
 @UtilityClass
 public class MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil {
+
     public static void validateMandatoryFacet(final ObjectAssociation association) {
 
         association.lookupFacet(MandatoryFacet.class)
diff --git a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil.java
similarity index 56%
copy from persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java
copy to persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil.java
index 76da577ad8..dfcf3251ac 100644
--- a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil.java
+++ b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/metamodel/facets/prop/column/MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil.java
@@ -2,26 +2,24 @@ package org.apache.causeway.persistence.commons.metamodel.facets.prop.column;
 
 import lombok.experimental.UtilityClass;
 
-import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
+import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
 
 @UtilityClass
-public class MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil {
-    public static void validateMandatoryFacet(final ObjectAssociation association) {
-
-        association.lookupFacet(MandatoryFacet.class)
-        .map(MandatoryFacet::getSharedFacetRankingElseFail)
+public class MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil {
+    public static void validateMaxLengthFacet(ObjectAssociation association) {
+        association.lookupFacet(MaxLengthFacet.class)
+        .map(MaxLengthFacet::getSharedFacetRankingElseFail)
         .ifPresent(facetRanking->facetRanking
-                .visitTopRankPairsSemanticDiffering(MandatoryFacet.class, (a, b)->{
+                .visitTopRankPairsSemanticDiffering(MaxLengthFacet.class, (a, b)->{
 
                     ValidationFailure.raiseFormatted(
                             association,
-                            "%s: inconsistent Mandatory/Optional semantics specified in %s and %s.",
+                            "%s: inconsistent MaxLength semantics specified in %s and %s.",
                             association.getFeatureIdentifier().toString(),
                             a.getClass().getSimpleName(),
                             b.getClass().getSimpleName());
                 }));
-
     }
 }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/BigDecimalFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/BigDecimalFromJdoColumnAnnotationFacetFactory.java
index 10882eddb2..e2ef62282a 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/BigDecimalFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/BigDecimalFromJdoColumnAnnotationFacetFactory.java
@@ -69,18 +69,19 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(final ProgrammingModel programmingModel) {
-        programmingModel.addValidatorSkipManagedBeans(spec->{
+        programmingModel.addValidatorSkipManagedBeans(objectSpec->{
 
             // only consider persistent entities
-            final JdoPersistenceCapableFacet pcFacet = spec.getFacet(JdoPersistenceCapableFacet.class);
+            final JdoPersistenceCapableFacet pcFacet = objectSpec.getFacet(JdoPersistenceCapableFacet.class);
             if(pcFacet==null || pcFacet.getIdentityType() == IdentityType.NONDURABLE) {
                 return;
             }
 
-            spec.streamProperties(MixedIn.EXCLUDED)
-            // skip checks if annotated with JDO @NotPersistent
-            .filter(association->!association.containsNonFallbackFacet(JdoNotPersistentFacet.class))
-            .forEach(BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil::validateBigDecimalValueFacet);
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
+                    // skip checks if annotated with JDO @NotPersistent
+                    .filter(association->!association.containsNonFallbackFacet(JdoNotPersistentFacet.class))
+                    .forEach(BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil::validateBigDecimalValueFacet);
 
         });
     }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index e48052e83b..127346607a 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -136,14 +136,11 @@ implements MetaModelRefiner {
                 return;
             }
 
-            final Stream<ObjectAssociation> associations = objectSpec
-                    .streamAssociations(MixedIn.EXCLUDED)
-                    .filter(ObjectAssociation.Predicates.PROPERTIES);
-
-            associations
-            // skip checks if annotated with JDO @NotPersistent
-            .filter(association->!association.containsNonFallbackFacet(JdoNotPersistentFacet.class))
-            .forEach(MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil::validateMandatoryFacet);
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
+                    // skip checks if annotated with JDO @NotPersistent
+                    .filter(association->!association.containsNonFallbackFacet(JdoNotPersistentFacet.class))
+                    .forEach(MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil::validateMandatoryFacet);
 
         });
     }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFromJdoColumnAnnotationFacetFactory.java
index c8fbd6ea96..4785fc487f 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFromJdoColumnAnnotationFacetFactory.java
@@ -29,11 +29,10 @@ import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
+import org.apache.causeway.persistence.commons.metamodel.facets.prop.column.MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil;
 import org.apache.causeway.persistence.jdo.provider.entities.JdoFacetContext;
 import org.apache.causeway.persistence.jdo.provider.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
 import org.apache.causeway.persistence.jdo.provider.metamodel.facets.prop.notpersistent.JdoNotPersistentFacet;
@@ -75,35 +74,17 @@ implements MetaModelRefiner {
     @Override
     public void refineProgrammingModel(final ProgrammingModel programmingModel) {
         programmingModel.addValidatorSkipManagedBeans(objectSpec->{
+
             final JdoPersistenceCapableFacet pcFacet = objectSpec.getFacet(JdoPersistenceCapableFacet.class);
             if(pcFacet==null || pcFacet.getIdentityType() == IdentityType.NONDURABLE) {
                 return;
             }
 
-            final Stream<ObjectAssociation> associations = objectSpec
-                    .streamAssociations(MixedIn.EXCLUDED)
-                    .filter(ObjectAssociation.Predicates.PROPERTIES);
-
-            associations.forEach(association->{
-                // skip checks if annotated with JDO @NotPersistent
-                if(association.containsNonFallbackFacet(JdoNotPersistentFacet.class)) {
-                    return;
-                }
-
-                association.lookupFacet(MaxLengthFacet.class)
-                .map(MaxLengthFacet::getSharedFacetRankingElseFail)
-                .ifPresent(facetRanking->facetRanking
-                        .visitTopRankPairsSemanticDiffering(MaxLengthFacet.class, (a, b)->{
-
-                            ValidationFailure.raiseFormatted(
-                                    association,
-                                    "%s: inconsistent MaxLength semantics specified in %s and %s.",
-                                    association.getFeatureIdentifier().toString(),
-                                    a.getClass().getSimpleName(),
-                                    b.getClass().getSimpleName());
-                        }));
-
-            });
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
+                    // skip checks if annotated with JDO @NotPersistent
+                    .filter(association->!association.containsNonFallbackFacet(JdoNotPersistentFacet.class))
+                    .forEach(MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil::validateMaxLengthFacet);
         });
     }
 
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java
index f79bda9c7d..bed0b2a311 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java
@@ -66,9 +66,10 @@ implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(final ProgrammingModel programmingModel) {
-        programmingModel.addValidatorSkipManagedBeans(spec->{
+        programmingModel.addValidatorSkipManagedBeans(objectSpec->{
 
-            spec.streamProperties(MixedIn.EXCLUDED)
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
                     .forEach(BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil::validateBigDecimalValueFacet);
 
         });
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java
index 94597ac206..0040f88d9a 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java
@@ -73,11 +73,8 @@ implements MetaModelRefiner {
     public void refineProgrammingModel(final ProgrammingModel programmingModel) {
         programmingModel.addValidatorSkipManagedBeans(objectSpec->{
 
-            final Stream<ObjectAssociation> associations = objectSpec
-                    .streamAssociations(MixedIn.EXCLUDED)
-                    .filter(ObjectAssociation.Predicates.PROPERTIES);
-
-            associations
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
                     .forEach(MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil::validateMandatoryFacet);
 
         });
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
index 5df9e0cf0d..3efa4ca5c6 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java
@@ -18,8 +18,6 @@
  */
 package org.apache.causeway.persistence.jpa.metamodel.facets.prop.column;
 
-import java.util.stream.Stream;
-
 import javax.persistence.Column;
 
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -27,16 +25,18 @@ import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
+import org.apache.causeway.persistence.commons.metamodel.facets.prop.column.MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil;
 
 import lombok.val;
 
+import java.util.stream.Stream;
+
 public class MaxLengthFromJpaColumnAnnotationFacetFactory
-extends FacetFactoryAbstract {
+extends FacetFactoryAbstract
+implements MetaModelRefiner {
 
     public MaxLengthFromJpaColumnAnnotationFacetFactory(final MetaModelContext mmc) {
         super(mmc, FeatureType.PROPERTIES_ONLY);
@@ -61,4 +61,14 @@ extends FacetFactoryAbstract {
                 .create(jdoColumnIfAny, facetHolder));
     }
 
+    @Override
+    public void refineProgrammingModel(final ProgrammingModel programmingModel) {
+        programmingModel.addValidatorSkipManagedBeans(objectSpec->{
+
+            objectSpec
+                    .streamProperties(MixedIn.EXCLUDED)
+                    .forEach(MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil::validateMaxLengthFacet);
+        });
+    }
+
 }