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 b214120  ISIS-2881: bring in facets for max-scale and max-digits (JPA)
b214120 is described below

commit b21412085c886f6067bc9a167bd50d214879d791
Author: Andi Huber <[email protected]>
AuthorDate: Thu Oct 21 08:26:20 2021 +0200

    ISIS-2881: bring in facets for max-scale and max-digits (JPA)
    
    - also add fixed scale examples to the demo (both JDO and JPA)
---
 .../jdo/JavaMathBigDecimalJdo-description.adoc     |  1 +
 .../bigdecimals/jdo/JavaMathBigDecimalJdo.java     | 19 +++++--
 .../jpa/JavaMathBigDecimalJpa-description.adoc     |  1 +
 .../bigdecimals/jpa/JavaMathBigDecimalJpa.java     | 17 ++++--
 .../IsisModulePersistenceJpaIntegration.java       |  4 +-
 .../JpaEntityFacetFactory.java                     |  2 +-
 .../JpaEntityIntegration.java}                     |  4 +-
 .../IsisModulePersistenceJpaMetamodel.java         |  4 +-
 .../jpa/metamodel/JpaProgrammingModel.java         |  2 +
 ...nferredFromJpaColumnAnnotationFacetFactory.java | 61 ++++++++++++++++++++++
 ...FractionalDigitsFacetInferredFromJpaColumn.java | 49 +++++++++++++++++
 .../MaxTotalDigitsFacetInferredFromJpaColumn.java  | 49 +++++++++++++++++
 12 files changed, 195 insertions(+), 18 deletions(-)

diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo-description.adoc
index 65405046..56d82c2 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo-description.adoc
@@ -11,6 +11,7 @@ include::JavaMathBigDecimalJdo.java[tags=class]
 +
 Apache Isis assumes properties are mandatory, so no additional annotation is 
required.
 <.> directly editable property as defined to Apache Isis
+<.> `BigDecimal` with at most 2 digits to the right of the decimal point 
(`scale=2`)
 <.> optional property as defined to Apache Isis
 <.> optional property as defined to JDO/DataNucleus
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
index e3bdbbb..a1762cb 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
@@ -49,27 +49,34 @@ public class JavaMathBigDecimalJdo                          
                // <
         extends JavaMathBigDecimalEntity {
 
 //end::class[]
-    public JavaMathBigDecimalJdo(java.math.BigDecimal initialValue) {
+    public JavaMathBigDecimalJdo(final java.math.BigDecimal initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
+        this.withMaxScale = initialValue;
     }
 
 //tag::class[]
     @Title(prepend = "java.math.BigDecimalJDO entity: ")
     @PropertyLayout(fieldSetId = "read-only-properties", sequence = "1")
-    @Column(allowsNull = "false")                                              
 // <.>
+    @Column(allowsNull = "false")                                           // 
<.>
     @Getter @Setter
     private java.math.BigDecimal readOnlyProperty;
 
-    @Property(editing = Editing.ENABLED)                                       
 // <.>
+    @Property(editing = Editing.ENABLED)                                    // 
<.>
     @PropertyLayout(fieldSetId = "editable-properties", sequence = "1")
     @Column(allowsNull = "false")
     @Getter @Setter
     private java.math.BigDecimal readWriteProperty;
 
-    @Property(optionality = Optionality.OPTIONAL)                              
 // <.>
+    @Property(editing = Editing.ENABLED)
+    @PropertyLayout(fieldSetId = "editable-properties", sequence = "2")
+    @Column(allowsNull = "false", scale = 2)                                // 
<.>
+    @Getter @Setter
+    private java.math.BigDecimal withMaxScale;
+
+    @Property(optionality = Optionality.OPTIONAL)                           // 
<.>
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "1")
-    @Column(allowsNull = "true")                                               
 // <.>
+    @Column(allowsNull = "true")                                            // 
<.>
     @Getter @Setter
     private java.math.BigDecimal readOnlyOptionalProperty;
 
@@ -79,5 +86,7 @@ public class JavaMathBigDecimalJdo                            
              // <
     @Getter @Setter
     private java.math.BigDecimal readWriteOptionalProperty;
 
+
+
 }
 //end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa-description.adoc
index fe4dacc..f2315f6 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa-description.adoc
@@ -16,6 +16,7 @@ include::JavaMathBigDecimalJpa.java[tags=class]
 +
 Apache Isis assumes properties are mandatory, so no additional annotation is 
required.
 <.> directly editable property as defined to Apache Isis
+<.> `BigDecimal` with at most 2 digits to the right of the decimal point 
(`scale=2`)
 <.> optional property as defined to Apache Isis
 <.> optional property as defined to JDO/DataNucleus
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
index 8709a9e..8413351 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
@@ -53,13 +53,14 @@ import 
demoapp.dom.types.javamath.bigdecimals.persistence.JavaMathBigDecimalEnti
       logicalTypeName = "demo.JavaMathBigDecimalEntity"
 )
 @NoArgsConstructor
-public class JavaMathBigDecimalJpa
+public class JavaMathBigDecimalJpa                                           
// <.>
         extends JavaMathBigDecimalEntity {
 
 //end::class[]
     public JavaMathBigDecimalJpa(final java.math.BigDecimal initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
+        this.withMaxScale = initialValue;
     }
 
 //tag::class[]
@@ -69,19 +70,25 @@ public class JavaMathBigDecimalJpa
 
     @Title(prepend = "java.math.BigDecimalJpa entity: ")
     @PropertyLayout(fieldSetId = "read-only-properties", sequence = "1")
-    @Column(nullable = false)                                                  
 // <.>
+    @Column(nullable = false)                                               // 
<.>
     @Getter @Setter
     private java.math.BigDecimal readOnlyProperty;
 
-    @Property(editing = Editing.ENABLED)                                       
 // <.>
+    @Property(editing = Editing.ENABLED)                                    // 
<.>
     @PropertyLayout(fieldSetId = "editable-properties", sequence = "1")
     @Column(nullable = false)
     @Getter @Setter
     private java.math.BigDecimal readWriteProperty;
 
-    @Property(optionality = Optionality.OPTIONAL)                              
 // <.>
+    @Property(editing = Editing.ENABLED)
+    @PropertyLayout(fieldSetId = "editable-properties", sequence = "2")
+    @Column(nullable = false, scale = 2)                                    // 
<.>
+    @Getter @Setter
+    private java.math.BigDecimal withMaxScale;
+
+    @Property(optionality = Optionality.OPTIONAL)                           // 
<.>
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "1")
-    @Column(nullable = true)                                                   
 // <.>
+    @Column(nullable = true)                                                // 
<.>
     @Getter @Setter
     private java.math.BigDecimal readOnlyOptionalProperty;
 
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
index 34d193d..bde750a 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
 import 
org.apache.isis.persistence.jpa.integration.changetracking.PersistenceMetricsServiceJpa;
-import 
org.apache.isis.persistence.jpa.integration.metamodel.JpaProgrammingModel;
+import org.apache.isis.persistence.jpa.integration.entity.JpaEntityIntegration;
 import 
org.apache.isis.persistence.jpa.integration.services.JpaSupportServiceUsingSpring;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.JavaAwtBufferedImageByteArrayConverter;
 import 
org.apache.isis.persistence.jpa.metamodel.IsisModulePersistenceJpaMetamodel;
@@ -36,7 +36,7 @@ import 
org.apache.isis.persistence.jpa.metamodel.IsisModulePersistenceJpaMetamod
         IsisModulePersistenceJpaMetamodel.class,
 
         // @Component's
-        JpaProgrammingModel.class,
+        JpaEntityIntegration.class,
 
         // @Service's
         JpaSupportServiceUsingSpring.class,
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaEntityFacetFactory.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
similarity index 99%
rename from 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaEntityFacetFactory.java
rename to 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
index b2a1f21..f75144f 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaEntityFacetFactory.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.persistence.jpa.integration.metamodel;
+package org.apache.isis.persistence.jpa.integration.entity;
 
 import java.lang.reflect.Method;
 import java.util.Optional;
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaProgrammingModel.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityIntegration.java
similarity index 91%
rename from 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaProgrammingModel.java
rename to 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityIntegration.java
index cb52ec9..9879c67 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/metamodel/JpaProgrammingModel.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityIntegration.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.persistence.jpa.integration.metamodel;
+package org.apache.isis.persistence.jpa.integration.entity;
 
 import org.springframework.stereotype.Component;
 
@@ -27,7 +27,7 @@ import 
org.apache.isis.core.metamodel.progmodel.ProgrammingModel.Marker;
 import lombok.val;
 
 @Component
-public class JpaProgrammingModel implements MetaModelRefiner {
+public class JpaEntityIntegration implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(final ProgrammingModel pm) {
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
index 2e06999..5ba5b48 100644
--- 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java
@@ -30,10 +30,8 @@ import 
org.apache.isis.persistence.jpa.applib.IsisModulePersistenceJpaApplib;
     IsisModuleCoreRuntime.class,
     IsisModulePersistenceJpaApplib.class,
 
-        // TODO: to rationalise with the jpa integration module; 
JpaProgrammingModel defined in both.
     // @Component's
-    // JpaProgrammingModel.class,
-    //JpaMetamodelMenu.class,
+    JpaProgrammingModel.class,
 
     // @Service's
 
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/JpaProgrammingModel.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/JpaProgrammingModel.java
index 67aed2c..1dcda26 100644
--- 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/JpaProgrammingModel.java
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/JpaProgrammingModel.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel.Marker;
+import 
org.apache.isis.persistence.jpa.metamodel.facets.prop.column.BigDecimalInferredFromJpaColumnAnnotationFacetFactory;
 import 
org.apache.isis.persistence.jpa.metamodel.facets.prop.column.MandatoryFromJpaColumnAnnotationFacetFactory;
 import 
org.apache.isis.persistence.jpa.metamodel.facets.prop.transients.JpaTransientAnnotationFacetFactory;
 import 
org.apache.isis.persistence.jpa.metamodel.object.table.JpaTableAnnotationFacetFactory;
@@ -43,6 +44,7 @@ public class JpaProgrammingModel implements MetaModelRefiner {
         pm.addFactory(step, new JpaTableAnnotationFacetFactory(mmc), 
Marker.JPA);
         pm.addFactory(step, new JpaTransientAnnotationFacetFactory(mmc), 
Marker.JPA);
         pm.addFactory(step, new 
MandatoryFromJpaColumnAnnotationFacetFactory(mmc), Marker.JPA);
+        pm.addFactory(step, new 
BigDecimalInferredFromJpaColumnAnnotationFacetFactory(mmc), Marker.JPA);
 
     }
 
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/BigDecimalInferredFromJpaColumnAnnotationFacetFactory.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/BigDecimalInferredFromJpaColumnAnnotationFacetFactory.java
new file mode 100644
index 0000000..c0d3bfa
--- /dev/null
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/BigDecimalInferredFromJpaColumnAnnotationFacetFactory.java
@@ -0,0 +1,61 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.persistence.jpa.metamodel.facets.prop.column;
+
+import java.math.BigDecimal;
+
+import javax.inject.Inject;
+import javax.persistence.Column;
+
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+
+import lombok.val;
+
+public class BigDecimalInferredFromJpaColumnAnnotationFacetFactory
+extends FacetFactoryAbstract {
+
+    @Inject
+    public BigDecimalInferredFromJpaColumnAnnotationFacetFactory(final 
MetaModelContext mmc) {
+        super(mmc, FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        if(BigDecimal.class != 
processMethodContext.getMethod().getReturnType()) {
+            return;
+        }
+
+        final FacetedMethod holder = processMethodContext.getFacetHolder();
+
+        val jpaColumnIfAny = 
processMethodContext.synthesizeOnMethod(Column.class);
+
+        addFacetIfPresent(
+                MaxTotalDigitsFacetInferredFromJpaColumn
+                .create(jpaColumnIfAny, holder));
+
+        addFacetIfPresent(
+                MaxFractionalDigitsFacetInferredFromJpaColumn
+                .create(jpaColumnIfAny, holder));
+    }
+
+}
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJpaColumn.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJpaColumn.java
new file mode 100644
index 0000000..d7e0fb7
--- /dev/null
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJpaColumn.java
@@ -0,0 +1,49 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.persistence.jpa.metamodel.facets.prop.column;
+
+import java.util.Optional;
+
+import javax.persistence.Column;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+import 
org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+
+public class MaxFractionalDigitsFacetInferredFromJpaColumn
+extends MaxFractionalDigitsFacetAbstract {
+
+     public static Optional<MaxFractionalDigitsFacet> create(
+             final Optional<Column> jpaColumnIfAny,
+             final FacetHolder holder) {
+
+         return jpaColumnIfAny
+         .filter(jpaColumn->jpaColumn.scale()>=0)
+         .map(jdoColumn->{
+             return new MaxFractionalDigitsFacetInferredFromJpaColumn(
+                     jdoColumn.scale(), holder);
+         });
+    }
+
+    private MaxFractionalDigitsFacetInferredFromJpaColumn(
+            final int maxFractionalDigits, final FacetHolder holder) {
+        super(maxFractionalDigits, holder);
+    }
+
+}
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJpaColumn.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJpaColumn.java
new file mode 100644
index 0000000..5eb4fd5
--- /dev/null
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJpaColumn.java
@@ -0,0 +1,49 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.persistence.jpa.metamodel.facets.prop.column;
+
+import java.util.Optional;
+
+import javax.persistence.Column;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
+import 
org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacetAbstract;
+
+public class MaxTotalDigitsFacetInferredFromJpaColumn
+extends MaxTotalDigitsFacetAbstract {
+
+    public static Optional<MaxTotalDigitsFacet> create(
+            final Optional<Column> jpaColumnIfAny,
+            final FacetHolder holder) {
+
+        return jpaColumnIfAny
+        .filter(jpaColumn->jpaColumn.length()>=0)
+        .map(jdoColumn->
+            new MaxTotalDigitsFacetInferredFromJpaColumn(
+                    jdoColumn.length(), holder));
+    }
+
+    private MaxTotalDigitsFacetInferredFromJpaColumn(
+            final int maxTotalDigits, final FacetHolder holder) {
+        super(maxTotalDigits, holder);
+    }
+
+
+}

Reply via email to