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 17:01:21 UTC

[causeway] branch CAUSEWAY-3592 created (now 53ee8315cd)

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

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


      at 53ee8315cd CAUSEWAY-3592: only install MAxLength facet from JDO column

This branch includes the following new commits:

     new 9df5fa6254 CAUSEWAY-3592: adds support to derive MinFractionalDigitsFacet
     new 53ee8315cd CAUSEWAY-3592: only install MAxLength facet from JDO column

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[causeway] 01/02: CAUSEWAY-3592: adds support to derive MinFractionalDigitsFacet

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9df5fa6254642cba0fd75c127819a85657c97208
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Sep 20 16:57:38 2023 +0100

    CAUSEWAY-3592: adds support to derive MinFractionalDigitsFacet
    
    ... from @Digits#fraction, or JDO/JPA @Column#scale, if configured
---
 .../core/config/CausewayConfiguration.java         | 24 +++++++++++++++++++++-
 .../digits/MinFractionalDigitsFacetAbstract.java   | 18 ++++++++++++++++
 ...tsFacetFromJavaxValidationDigitsAnnotation.java |  9 +++-----
 ...sFacetFromJavaxValidationDigitsAnnotation.java} | 19 ++++++++---------
 .../ValueSemanticsAnnotationFacetFactory.java      | 13 +++++++++---
 ...DecimalFromJdoColumnAnnotationFacetFactory.java | 11 ++++++----
 ...actionalDigitsFacetFromJdoColumnAnnotation.java | 11 ++++------
 ...ctionalDigitsFacetFromJdoColumnAnnotation.java} | 21 +++++++++----------
 ...DecimalFromJpaColumnAnnotationFacetFactory.java | 11 ++++++----
 ...actionalDigitsFacetFromJpaColumnAnnotation.java |  9 ++++----
 ...ctionalDigitsFacetFromJpaColumnAnnotation.java} | 19 +++++++++--------
 11 files changed, 105 insertions(+), 60 deletions(-)

diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 8d0fe79af9..38c80b5927 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -43,11 +43,13 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import javax.activation.DataSource;
 import javax.inject.Named;
+import javax.persistence.Column;
 import javax.validation.Constraint;
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import javax.validation.Payload;
 import javax.validation.Valid;
+import javax.validation.constraints.Digits;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotEmpty;
@@ -1444,6 +1446,27 @@ public class CausewayConfiguration {
                  * have been indicated as deprecated will simply be ignored/excluded from the metamodel.
                  */
                 private boolean ignoreDeprecated = false;
+
+
+                /**
+                 * If set, then {@link Digits#fraction()}, the JDO <code>@Column#scale</code> and the JPA {@link Column#scale()}
+                 * should be used for the <code>MinFractionalFacet</code> as well as the <code>MaxFractionalFacet</code>.
+                 *
+                 * <p>
+                 *     What this means in practice is that a numeric values will be rendered to the same number of fractional digits,
+                 *     irrespective of whether they are whole numbers.  For example, with a scale of 2, then
+                 *     &quot;123.45&quot; and also &quot;123.00&quot;.
+                 * </p>
+                 *
+                 * <p>
+                 *     If set to <code>false</code>, then these values would be rendered as &quot;123.45&quot;,
+                 *     but for the whole integer instead just &quot;123&quot; (that is, the shortest textual
+                 *     representation).
+                 * </p>
+                 */
+                private boolean useScaleForMinFractionalFacet = true;
+
+                private boolean maximise
             }
 
             private final Introspector introspector = new Introspector();
@@ -1611,7 +1634,6 @@ public class CausewayConfiguration {
                      */
                     private boolean variablesClause = true;
                 }
-
             }
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacetAbstract.java
index 394eeb267b..496603acb4 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacetAbstract.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.core.metamodel.facets.objectvalue.digits;
 
+import java.util.Optional;
 import java.util.function.BiConsumer;
 
 import org.apache.causeway.core.metamodel.facetapi.Facet;
@@ -68,4 +69,21 @@ implements MinFractionalDigitsFacet {
         visitor.accept("minFractionalDigits", String.valueOf(minFractionalDigits));
     }
 
+    /**
+     * If equal, first argument wins over second.
+     */
+    public static Optional<MinFractionalDigitsFacet> minimum(
+            final Optional<MinFractionalDigitsFacet> a,
+            final Optional<MinFractionalDigitsFacet> b) {
+        if(b.isEmpty()) {
+            return a;
+        }
+        if(a.isEmpty()) {
+            return b;
+        }
+        return a.get().getMinFractionalDigits() <= b.get().getMinFractionalDigits()
+                ? a
+                : b;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
index aacb9b483a..abd4b269bb 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
@@ -34,15 +34,12 @@ extends MaxFractionalDigitsFacetAbstract {
              final FacetHolder holder) {
 
          return digitsIfAny
-         .map(digits->{
-             return new MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(
-                     digits.fraction(), holder);
-         });
+         .map(digits-> new MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(digits.fraction(), holder));
     }
 
     private MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(
-            final int maxFractionalDigits, final FacetHolder holder) {
-        super(maxFractionalDigits, holder);
+            final int fraction, final FacetHolder holder) {
+        super(fraction, holder);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
similarity index 68%
copy from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
index aacb9b483a..f889030c80 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation.java
@@ -25,24 +25,23 @@ import javax.validation.constraints.Digits;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation
-extends MaxFractionalDigitsFacetAbstract {
+public class MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation
+extends MinFractionalDigitsFacetAbstract {
 
-     public static Optional<MaxFractionalDigitsFacet> create(
+     public static Optional<MinFractionalDigitsFacet> create(
              final Optional<Digits> digitsIfAny,
              final FacetHolder holder) {
 
          return digitsIfAny
-         .map(digits->{
-             return new MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(
-                     digits.fraction(), holder);
-         });
+         .map(digits-> new MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(digits.fraction(), holder));
     }
 
-    private MaxFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(
-            final int maxFractionalDigits, final FacetHolder holder) {
-        super(maxFractionalDigits, holder);
+    private MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation(
+            final int fraction, final FacetHolder holder) {
+        super(fraction, holder);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index 04dcfaedfd..4b713db47a 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -30,6 +30,7 @@ import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.causeway.core.metamodel.facets.TypedHolderAbstract;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
 import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailureUtils;
 
 import lombok.val;
@@ -119,9 +120,15 @@ extends FacetFactoryAbstract {
                         ));
 
         addFacetIfPresent(
-                MinFractionalDigitsFacetFromValueSemanticsAnnotation
-                .create(valueSemanticsIfAny, facetHolder));
-
+                MinFractionalDigitsFacetAbstract.minimum(
+                        MinFractionalDigitsFacetFromValueSemanticsAnnotation
+                                .create(valueSemanticsIfAny, facetHolder),
+                        // support for @javax.validation.constraints.Digits (if supported)
+                        getConfiguration().getCore().getMetaModel().getProgrammingModel().isUseScaleForMinFractionalFacet()
+                                ? MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation
+                                            .create(digitsIfAny, facetHolder)
+                                : Optional.empty()
+                ));
     }
 
     private void processTemporalFormat(
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 7b861766aa..4ddd40090c 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
@@ -58,12 +58,15 @@ implements MetaModelRefiner {
         val jdoColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class);
 
         addFacetIfPresent(
-                MaxTotalDigitsFacetFromJdoColumnAnnotation
-                .create(jdoColumnIfAny, holder));
+                MaxTotalDigitsFacetFromJdoColumnAnnotation.create(jdoColumnIfAny, holder));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetFromJdoColumnAnnotation
-                .create(jdoColumnIfAny, holder));
+                MaxFractionalDigitsFacetFromJdoColumnAnnotation.create(jdoColumnIfAny, holder));
+
+        if (getConfiguration().getCore().getMetaModel().getProgrammingModel().isUseScaleForMinFractionalFacet()) {
+            addFacetIfPresent(
+                    MinFractionalDigitsFacetFromJdoColumnAnnotation.create(jdoColumnIfAny, holder));
+        }
 
     }
 
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java
index a20e3eb613..5c27d8f4e9 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java
@@ -30,15 +30,12 @@ public class MaxFractionalDigitsFacetFromJdoColumnAnnotation
 extends MaxFractionalDigitsFacetAbstract {
 
     public static Optional<MaxFractionalDigitsFacet> create(
-            final Optional<Column> jdoColumnIfAny,
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jdoColumnIfAny
-                .filter(jdoColumn->jdoColumn.scale()>=0)
-                .map(jdoColumn->{
-                    return new MaxFractionalDigitsFacetFromJdoColumnAnnotation(
-                            jdoColumn.scale(), holder);
-                });
+        return columnIfAny
+                .filter(column->column.scale()>=0)
+                .map(column-> new MaxFractionalDigitsFacetFromJdoColumnAnnotation(column.scale(), holder));
     }
 
     private MaxFractionalDigitsFacetFromJdoColumnAnnotation(
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJdoColumnAnnotation.java
similarity index 67%
copy from persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java
copy to persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJdoColumnAnnotation.java
index a20e3eb613..69ba7cdf51 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJdoColumnAnnotation.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJdoColumnAnnotation.java
@@ -25,23 +25,22 @@ import javax.jdo.annotations.Column;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetFromJdoColumnAnnotation
-extends MaxFractionalDigitsFacetAbstract {
+public class MinFractionalDigitsFacetFromJdoColumnAnnotation
+extends MinFractionalDigitsFacetAbstract {
 
-    public static Optional<MaxFractionalDigitsFacet> create(
-            final Optional<Column> jdoColumnIfAny,
+    public static Optional<MinFractionalDigitsFacet> create(
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jdoColumnIfAny
-                .filter(jdoColumn->jdoColumn.scale()>=0)
-                .map(jdoColumn->{
-                    return new MaxFractionalDigitsFacetFromJdoColumnAnnotation(
-                            jdoColumn.scale(), holder);
-                });
+        return columnIfAny
+                .filter(column->column.scale()>=0)
+                .map(column-> new MinFractionalDigitsFacetFromJdoColumnAnnotation(column.scale(), holder));
     }
 
-    private MaxFractionalDigitsFacetFromJdoColumnAnnotation(
+    private MinFractionalDigitsFacetFromJdoColumnAnnotation(
             final int scale, final FacetHolder holder) {
         super(scale, holder);
     }
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 bed0b2a311..09bd6a69cb 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
@@ -55,12 +55,15 @@ implements MetaModelRefiner {
         val jpaColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class);
 
         addFacetIfPresent(
-                MaxTotalDigitsFacetFromJpaColumnAnnotation
-                .create(jpaColumnIfAny, holder));
+                MaxTotalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, holder));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetFromJpaColumnAnnotation
-                .create(jpaColumnIfAny, holder));
+                MaxFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, holder));
+
+        if (getConfiguration().getCore().getMetaModel().getProgrammingModel().isUseScaleForMinFractionalFacet()) {
+            addFacetIfPresent(
+                    MinFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, holder));
+        }
 
     }
 
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
index 38a994625b..4c9bb04a27 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
@@ -30,13 +30,12 @@ public class MaxFractionalDigitsFacetFromJpaColumnAnnotation
 extends MaxFractionalDigitsFacetAbstract {
 
      public static Optional<MaxFractionalDigitsFacet> create(
-             final Optional<Column> jpaColumnIfAny,
+             final Optional<Column> columnIfAny,
              final FacetHolder holder) {
 
-         return jpaColumnIfAny
-         .filter(jpaColumn->jpaColumn.scale()>=0)
-         .map(jdoColumn-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(
-                 jdoColumn.scale(), holder));
+         return columnIfAny
+         .filter(column->column.scale()>=0)
+         .map(column-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
     }
 
     private MaxFractionalDigitsFacetFromJpaColumnAnnotation(
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
similarity index 67%
copy from persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
copy to persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
index 38a994625b..4d3b0df004 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
@@ -25,21 +25,22 @@ import javax.persistence.Column;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
+import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetFromJpaColumnAnnotation
-extends MaxFractionalDigitsFacetAbstract {
+public class MinFractionalDigitsFacetFromJpaColumnAnnotation
+extends MinFractionalDigitsFacetAbstract {
 
-     public static Optional<MaxFractionalDigitsFacet> create(
-             final Optional<Column> jpaColumnIfAny,
+     public static Optional<MinFractionalDigitsFacet> create(
+             final Optional<Column> columnIfAny,
              final FacetHolder holder) {
 
-         return jpaColumnIfAny
-         .filter(jpaColumn->jpaColumn.scale()>=0)
-         .map(jdoColumn-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(
-                 jdoColumn.scale(), holder));
+         return columnIfAny
+         .filter(column->column.scale()>=0)
+         .map(column-> new MinFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
     }
 
-    private MaxFractionalDigitsFacetFromJpaColumnAnnotation(
+    private MinFractionalDigitsFacetFromJpaColumnAnnotation(
             final int scale, final FacetHolder holder) {
         super(scale, holder);
     }


[causeway] 02/02: CAUSEWAY-3592: only install MAxLength facet from JDO column

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 53ee8315cd1b244daacd010df546fa245198f976
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Sep 20 18:01:17 2023 +0100

    CAUSEWAY-3592: only install MAxLength facet from JDO column
    
    if explicitly set (ignore if set to default of -1).
    
    Also polishes
---
 .../core/config/CausewayConfiguration.java         |  2 --
 .../MaxLengthFacetFromJdoColumnAnnotation.java     | 11 ++++----
 ...MaxTotalDigitsFacetFromJdoColumnAnnotation.java | 10 +++----
 ...actionalDigitsFacetFromJpaColumnAnnotation.java |  4 +--
 .../MaxLengthFacetFromJpaColumnAnnotation.java     | 11 ++++----
 ...MaxTotalDigitsFacetFromJpaColumnAnnotation.java | 12 ++++----
 ...actionalDigitsFacetFromJpaColumnAnnotation.java |  4 +--
 .../viewers/jdo/wkt/InteractionTestJdoWkt.java     | 33 ++++++++++++++++++++--
 8 files changed, 58 insertions(+), 29 deletions(-)

diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 38c80b5927..60e9622b8e 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -1465,8 +1465,6 @@ public class CausewayConfiguration {
                  * </p>
                  */
                 private boolean useScaleForMinFractionalFacet = true;
-
-                private boolean maximise
             }
 
             private final Introspector introspector = new Introspector();
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetFromJdoColumnAnnotation.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetFromJdoColumnAnnotation.java
index bbbe93bead..65cbfa9c7d 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetFromJdoColumnAnnotation.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetFromJdoColumnAnnotation.java
@@ -30,13 +30,14 @@ public class MaxLengthFacetFromJdoColumnAnnotation
 extends MaxLengthFacetAbstract {
 
     public static Optional<MaxLengthFacet> create(
-            final Optional<Column> jdoColumnIfAny,
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jdoColumnIfAny
-        .map(jdoColumn->
-            new MaxLengthFacetFromJdoColumnAnnotation(
-                    jdoColumn.length(), holder));
+        return columnIfAny
+                .filter(column -> column.length() > 0)
+                .map(column->
+                    new MaxLengthFacetFromJdoColumnAnnotation(
+                            column.length(), holder));
     }
 
     private MaxLengthFacetFromJdoColumnAnnotation(
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJdoColumnAnnotation.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJdoColumnAnnotation.java
index c38907d0aa..2115aea0eb 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJdoColumnAnnotation.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJdoColumnAnnotation.java
@@ -30,14 +30,14 @@ public class MaxTotalDigitsFacetFromJdoColumnAnnotation
 extends MaxTotalDigitsFacetAbstract {
 
     public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Column> jdoColumnIfAny,
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jdoColumnIfAny
-                .filter(jdoColumn->jdoColumn.length()>=0)
-                .map(jdoColumn->
+        return columnIfAny
+                .filter(column->column.length()>=0)
+                .map(column->
                 new MaxTotalDigitsFacetFromJdoColumnAnnotation(
-                        jdoColumn.length(), holder));
+                        column.length(), holder));
     }
 
     private MaxTotalDigitsFacetFromJdoColumnAnnotation(
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
index 4c9bb04a27..98d8b4572e 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java
@@ -34,8 +34,8 @@ extends MaxFractionalDigitsFacetAbstract {
              final FacetHolder holder) {
 
          return columnIfAny
-         .filter(column->column.scale()>=0)
-         .map(column-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
+                 .filter(column->column.scale()>=0)
+                 .map(column-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
     }
 
     private MaxFractionalDigitsFacetFromJpaColumnAnnotation(
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFacetFromJpaColumnAnnotation.java
index 028fb62a71..19aaf5270f 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFacetFromJpaColumnAnnotation.java
@@ -30,13 +30,14 @@ public class MaxLengthFacetFromJpaColumnAnnotation
 extends MaxLengthFacetAbstract {
 
     public static Optional<MaxLengthFacet> create(
-            final Optional<Column> jpaColumnIfAny,
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jpaColumnIfAny
-        .map(jdoColumn->
-            new MaxLengthFacetFromJpaColumnAnnotation(
-                    jdoColumn.length(), holder));
+        return columnIfAny
+                .filter(column -> column.length() > 0)
+                .map(column->
+                    new MaxLengthFacetFromJpaColumnAnnotation(
+                            column.length(), holder));
     }
 
     private MaxLengthFacetFromJpaColumnAnnotation(
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java
index a72a8ad85b..80a0483af0 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java
@@ -30,14 +30,14 @@ public class MaxTotalDigitsFacetFromJpaColumnAnnotation
 extends MaxTotalDigitsFacetAbstract {
 
     public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Column> jpaColumnIfAny,
+            final Optional<Column> columnIfAny,
             final FacetHolder holder) {
 
-        return jpaColumnIfAny
-        .filter(jpaColumn->jpaColumn.length()>=0)
-        .map(jdoColumn->
-            new MaxTotalDigitsFacetFromJpaColumnAnnotation(
-                    jdoColumn.length(), holder));
+        return columnIfAny
+                .filter(column->column.length()>=0)
+                .map(column->
+                    new MaxTotalDigitsFacetFromJpaColumnAnnotation(
+                            column.length(), holder));
     }
 
     private MaxTotalDigitsFacetFromJpaColumnAnnotation(
diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
index 4d3b0df004..4fe3ade78f 100644
--- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
+++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java
@@ -36,8 +36,8 @@ extends MinFractionalDigitsFacetAbstract {
              final FacetHolder holder) {
 
          return columnIfAny
-         .filter(column->column.scale()>=0)
-         .map(column-> new MinFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
+                 .filter(column->column.scale()>=0)
+                 .map(column-> new MinFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder));
     }
 
     private MinFractionalDigitsFacetFromJpaColumnAnnotation(
diff --git a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/causeway/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/causeway/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
index f5bb8f9989..54c5b59a32 100644
--- a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/causeway/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
+++ b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/causeway/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
@@ -20,6 +20,9 @@ package org.apache.causeway.testdomain.viewers.jdo.wkt;
 
 import javax.inject.Inject;
 
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.testdomain.jpa.entities.JpaBook;
+
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
 import org.apache.wicket.markup.html.basic.Label;
@@ -55,6 +58,8 @@ import static org.apache.causeway.testdomain.conf.Configuration_usingWicket.Enti
 import static org.apache.causeway.testdomain.conf.Configuration_usingWicket.EntityPageTester.OPEN_SAMPLE_ACTION_TITLE;
 import static org.apache.causeway.testdomain.conf.Configuration_usingWicket.EntityPageTester.STANDALONE_COLLECTION_LABEL;
 
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 import lombok.val;
 
 @SpringBootTest(
@@ -109,11 +114,12 @@ class InteractionTestJdoWkt extends RegressionTestWithJdoFixtures {
         run(()->{
             wktTester.startEntityPage(pageParameters);
 
+            //XXX activate for test troubleshooting
+            // wktTester.dumpComponentTree(comp->true);
+
             wktTester.assertHeaderBrandText("Smoke Tests");
             wktTester.assertPageTitle("JdoInventoryJaxbVm; Bookstore; 3 products");
 
-            //wktTester.dumpComponentTree(comp->true);
-
             wktTester.assertFavoriteBookIs(BookDto.sample());
 
         });
@@ -187,6 +193,8 @@ class InteractionTestJdoWkt extends RegressionTestWithJdoFixtures {
 
     }
 
+    private ManagedObject bookAdapter;
+
     @Test
     void loadBookPage_Dune_then_change_Isbn() {
         val pageParameters = call(()->{
@@ -196,11 +204,17 @@ class InteractionTestJdoWkt extends RegressionTestWithJdoFixtures {
             .findFirst()
             .orElseThrow();
 
+            System.err.printf("--- adapt %n");
+            bookAdapter = super.objectManager.adapt(jdoBook);
+
             return wktTester.createPageParameters(jdoBook);
         });
 
         //System.err.printf("pageParameters %s%n", pageParameters);
 
+        assertEquals(ManagedObject.Specialization.ENTITY, bookAdapter.getSpecialization());
+        assertTrue(bookAdapter.isBookmarkMemoized(), "bookAdapter should be bookmarked");
+
         // open Dune page
         run(()->{
             wktTester.startEntityPage(pageParameters);
@@ -225,12 +239,27 @@ class InteractionTestJdoWkt extends RegressionTestWithJdoFixtures {
             val form = wktTester.newFormTester(bookIsbn.editInlinePromptForm());
             form.setValue(bookIsbn.scalarField(), "ISBN-XXXX");
             form.submit();
+
+            val jpaBook = (JdoBook)bookAdapter.getPojo();
+            assertEquals("ISBN-A", jpaBook.getIsbn());
         });
 
         // simulate click on form OK button -> expected to trigger the framework's property change execution
         run(()->{
             wktTester.assertComponent(bookIsbn.editInlinePromptFormOk(), IndicatingAjaxButton.class);
+
+            wktTester.dumpComponentTree(comp->true);
+            System.out.println(
+                wktTester.getLastResponseAsString()
+            );
+
             wktTester.executeAjaxEvent(bookIsbn.editInlinePromptFormOk(), "click");
+
+            System.err.printf("bookAdapter state %s%n", bookAdapter.getEntityState());
+
+            System.err.printf("--- verify %n");
+            val jpaBook = (JdoBook)bookAdapter.getPojo();
+            assertEquals("ISBN-XXXX", jpaBook.getIsbn());
         });
 
         // ... should yield a new Title containing 'Dune [ISBN-XXXX]'