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/10/21 06:30:50 UTC

[isis] branch master updated: ISIS-2881: bring in facets for max-scale and max-digits (JPA)

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 <ah...@apache.org>
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);
+    }
+
+
+}