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/11/04 08:08:24 UTC

[isis] branch master updated: ISIS-2741: init decimal format's MaximumFractionDigits to 16 per default

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 407dafe  ISIS-2741: init decimal format's MaximumFractionDigits to  16 per default
407dafe is described below

commit 407dafe3aa941356bfd21193527c2c2941b96b8e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Nov 4 09:08:17 2021 +0100

    ISIS-2741: init decimal format's MaximumFractionDigits to  16 per
    default
    
    - this is for parsable number representation, which we now distinguish
    from simple (rendered) representation
---
 .../isis/applib/adapters/ValueSemanticsAbstract.java    | 12 ++++++++++--
 ...tionDigitsFacet.java => MaxFractionDigitsFacet.java} |  8 ++++----
 ...bstract.java => MaxFractionDigitsFacetAbstract.java} | 14 +++++++-------
 ...OnParameterFromJavaxValidationAnnotationFactory.java |  2 +-
 ...OnParameterFromJavaxValidationDigitsAnnotation.java} | 14 +++++++-------
 ...pertyFromJavaxValidationDigitsAnnotationFactory.java |  2 +-
 ...tOnPropertyFromJavaxValidationDigitsAnnotation.java} | 14 +++++++-------
 .../valuesemantics/BigDecimalValueSemantics.java        |  7 +++----
 ...JavaxValidationDigitsAnnotationFacetFactoryTest.java | 12 ++++++------
 ...imalInferredFromJdoColumnAnnotationFacetFactory.java | 10 +++++-----
 ...=> MaxFractionDigitsFacetInferredFromJdoColumn.java} | 14 +++++++-------
 ...lDerivedFromJdoColumnAnnotationFacetFactoryTest.java |  8 ++++----
 ...imalInferredFromJpaColumnAnnotationFacetFactory.java |  2 +-
 ...=> MaxFractionDigitsFacetInferredFromJpaColumn.java} | 14 +++++++-------
 .../isis/viewer/common/model/feature/ScalarUiModel.java |  6 +++---
 .../domainobjects/ObjectPropertyReprRenderer.java       |  6 +++---
 .../ui/components/scalars/IsisConverterLocator.java     |  6 +++---
 .../scalars/jdkmath/BigDecimalConverter_roundtrip.java  | 17 ++++++++---------
 18 files changed, 87 insertions(+), 81 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
index 729cd121..d1f9f75 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsAbstract.java
@@ -86,9 +86,17 @@ implements
      * @param context - nullable in support of JUnit testing
      * @return {@link NumberFormat} the default from from given context's locale
      * or else system's default locale
+     *
+     * @implNote the format's MaximumFractionDigits are initialized to 16, as
+     * 64 bit IEEE 754 double has 15 decimal digits of precision;
+     * this is typically overruled later by implementations of
+     * {@link #configureDecimalFormat(org.apache.isis.applib.adapters.ValueSemanticsProvider.Context, DecimalFormat) configureDecimalFormat}
      */
     protected DecimalFormat getNumberFormat(final @Nullable ValueSemanticsProvider.Context context) {
-        return (DecimalFormat)NumberFormat.getNumberInstance(getLocale(context));
+        val format = (DecimalFormat)NumberFormat.getNumberInstance(getLocale(context));
+        // prime w/ 16 (64 bit IEEE 754 double has 15 decimal digits of precision)
+        format.setMaximumFractionDigits(16);
+        return format;
     }
 
     protected String render(final T value, final Function<T, String> toString) {
@@ -137,7 +145,7 @@ implements
             if(maxFractionDigits>-1
                     && number.scale()>format.getMaximumFractionDigits()) {
                 throw new TextEntryParseException(String.format(
-                        "No more than %d fraction digits can be entered, "
+                        "No more than %d digits can be entered after the decimal separator, "
                         + "got %d in '%s'.", maxFractionDigits, number.scale(), input));
             }
             return number;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaximumFractionDigitsFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacet.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaximumFractionDigitsFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacet.java
index 97a532a..df52ad6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaximumFractionDigitsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacet.java
@@ -29,12 +29,12 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  * <p>
  * For example:
  * <ul>
- * <li><tt>12345.789</tt> has 3 fractional digits</li>
- * <li><tt>12345</tt> has 0 fractional digits</li>
- * <li><tt>12345.0</tt> has 1 fractional digit</li>
+ * <li><tt>12345.789</tt> has 3 fraction digits</li>
+ * <li><tt>12345</tt> has 0 fraction digits</li>
+ * <li><tt>12345.0</tt> has 1 fraction digit</li>
  * </ul>
  */
-public interface MaximumFractionDigitsFacet
+public interface MaxFractionDigitsFacet
 extends Facet {
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacetAbstract.java
similarity index 85%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacetAbstract.java
index 8fa0963..ca05d52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionDigitsFacetAbstract.java
@@ -27,25 +27,25 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import lombok.Getter;
 import lombok.NonNull;
 
-public abstract class MaxFractionalDigitsFacetAbstract
+public abstract class MaxFractionDigitsFacetAbstract
 extends FacetAbstract
-implements MaximumFractionDigitsFacet {
+implements MaxFractionDigitsFacet {
 
     private static final Class<? extends Facet> type() {
-        return MaximumFractionDigitsFacet.class;
+        return MaxFractionDigitsFacet.class;
     }
 
     @Getter(onMethod_ = {@Override})
     private final int maximumFractionDigits;
 
-    protected MaxFractionalDigitsFacetAbstract(
+    protected MaxFractionDigitsFacetAbstract(
             final int maximumFractionDigits,
             final FacetHolder holder) {
         super(type(), holder);
         this.maximumFractionDigits = maximumFractionDigits;
     }
 
-    protected MaxFractionalDigitsFacetAbstract(
+    protected MaxFractionDigitsFacetAbstract(
             final int maximumFractionDigits,
             final FacetHolder holder,
             final Facet.Precedence precedence) {
@@ -55,10 +55,10 @@ implements MaximumFractionDigitsFacet {
 
     @Override
     public boolean semanticEquals(@NonNull final Facet other) {
-        return other instanceof MaximumFractionDigitsFacet
+        return other instanceof MaxFractionDigitsFacet
                 ? Integer.compare(
                         this.getMaximumFractionDigits(),
-                        ((MaximumFractionDigitsFacet)other).getMaximumFractionDigits()) == 0
+                        ((MaxFractionDigitsFacet)other).getMaximumFractionDigits()) == 0
                 : false;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.java
index 4a8970a..2972055 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.java
@@ -51,7 +51,7 @@ extends FacetFactoryAbstract {
                 .create(digitsIfAny, processParameterContext.getFacetHolder()));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+                MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
                 .create(digitsIfAny, processParameterContext.getFacetHolder()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
similarity index 77%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
index 9d43737..7086985 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
@@ -23,24 +23,24 @@ import java.util.Optional;
 import javax.validation.constraints.Digits;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
-extends MaxFractionalDigitsFacetAbstract {
+public class MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+extends MaxFractionDigitsFacetAbstract {
 
-     public static Optional<MaximumFractionDigitsFacet> create(
+     public static Optional<MaxFractionDigitsFacet> create(
              final Optional<Digits> digitsIfAny,
              final FacetHolder holder) {
 
          return digitsIfAny
          .map(digits->{
-             return new MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+             return new MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
                      digits.fraction(), holder);
          });
     }
 
-    private MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+    private MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
             final int maxFractionalDigits, final FacetHolder holder) {
         super(maxFractionalDigits, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
index 4edb66e..447f115 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
@@ -51,7 +51,7 @@ extends FacetFactoryAbstract {
                 .create(digitsIfAny, processMethodContext.getFacetHolder()));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+                MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
                 .create(digitsIfAny, processMethodContext.getFacetHolder()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
similarity index 77%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
index bcd80fc..ba4fcd0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
@@ -23,24 +23,24 @@ import java.util.Optional;
 import javax.validation.constraints.Digits;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-extends MaxFractionalDigitsFacetAbstract {
+public class MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+extends MaxFractionDigitsFacetAbstract {
 
-     public static Optional<MaximumFractionDigitsFacet> create(
+     public static Optional<MaxFractionDigitsFacet> create(
              final Optional<Digits> digitsIfAny,
              final FacetHolder holder) {
 
          return digitsIfAny
          .map(digits->{
-             return new MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+             return new MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
                      digits.fraction(), holder);
          });
     }
 
-    private MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+    private MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
             final int maxFractionalDigits, final FacetHolder holder) {
         super(maxFractionalDigits, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index 911a412..32b43c5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.adapters.Renderer;
 import org.apache.isis.applib.adapters.ValueSemanticsAbstract;
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.applib.exceptions.UnrecoverableException;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -124,10 +124,9 @@ implements
         }
 
         // evaluate any facets that provide the MaximumFractionDigits
-        feature.lookupFacet(MaximumFractionDigitsFacet.class).stream()
-        .mapToInt(MaximumFractionDigitsFacet::getMaximumFractionDigits)
+        feature.lookupFacet(MaxFractionDigitsFacet.class).stream()
+        .mapToInt(MaxFractionDigitsFacet::getMaximumFractionDigits)
         .filter(digits->digits>-1)
-        .peek(digits->System.err.printf("digits: %d%n", digits)) //FIXME[ISIS-2741] remove (debug)
         .forEach(digits-> // cardinality 0 or 1
             format.setMaximumFractionDigits(digits));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/decimal/JavaxValidationDigitsAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/decimal/JavaxValidationDigitsAnnotationFacetFactoryTest.java
index 6389d31..da69501 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/decimal/JavaxValidationDigitsAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/decimal/JavaxValidationDigitsAnnotationFacetFactoryTest.java
@@ -29,13 +29,13 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation;
+import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation;
 import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
+import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
 
 public class JavaxValidationDigitsAnnotationFacetFactoryTest
@@ -92,10 +92,10 @@ extends AbstractFacetFactoryTest {
         }
 
         if(maxFractionalDigits>=0) {
-            final MaximumFractionDigitsFacet facet = facetedMethod.getFacet(MaximumFractionDigitsFacet.class);
+            final MaxFractionDigitsFacet facet = facetedMethod.getFacet(MaxFractionDigitsFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-                    ||facet instanceof MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
+            assertTrue(facet instanceof MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+                    ||facet instanceof MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
             assertThat(facet.getMaximumFractionDigits(), is(maxFractionalDigits));
         }
     }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalInferredFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalInferredFromJdoColumnAnnotationFacetFactory.java
index 813fb69..e3b3044 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalInferredFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalInferredFromJdoColumnAnnotationFacetFactory.java
@@ -29,7 +29,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -65,7 +65,7 @@ implements MetaModelRefiner {
                 .create(jdoColumnIfAny, holder));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetInferredFromJdoColumn
+                MaxFractionDigitsFacetInferredFromJdoColumn
                 .create(jdoColumnIfAny, holder));
     }
 
@@ -104,10 +104,10 @@ implements MetaModelRefiner {
                             b.getClass().getSimpleName());
                 }));
 
-        association.lookupFacet(MaximumFractionDigitsFacet.class)
-        .map(MaximumFractionDigitsFacet::getSharedFacetRankingElseFail)
+        association.lookupFacet(MaxFractionDigitsFacet.class)
+        .map(MaxFractionDigitsFacet::getSharedFacetRankingElseFail)
         .ifPresent(facetRanking->facetRanking
-                .visitTopRankPairsSemanticDiffering(MaximumFractionDigitsFacet.class, (a, b)->{
+                .visitTopRankPairsSemanticDiffering(MaxFractionDigitsFacet.class, (a, b)->{
 
                     ValidationFailure.raiseFormatted(
                             association,
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionDigitsFacetInferredFromJdoColumn.java
similarity index 81%
rename from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java
rename to persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionDigitsFacetInferredFromJdoColumn.java
index a347c06..f89d85f 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionDigitsFacetInferredFromJdoColumn.java
@@ -23,25 +23,25 @@ import java.util.Optional;
 import javax.jdo.annotations.Column;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetInferredFromJdoColumn
-extends MaxFractionalDigitsFacetAbstract {
+public class MaxFractionDigitsFacetInferredFromJdoColumn
+extends MaxFractionDigitsFacetAbstract {
 
-     public static Optional<MaximumFractionDigitsFacet> create(
+     public static Optional<MaxFractionDigitsFacet> create(
              final Optional<Column> jdoColumnIfAny,
              final FacetHolder holder) {
 
          return jdoColumnIfAny
          .filter(jdoColumn->jdoColumn.scale()>=0)
          .map(jdoColumn->{
-             return new MaxFractionalDigitsFacetInferredFromJdoColumn(
+             return new MaxFractionDigitsFacetInferredFromJdoColumn(
                      jdoColumn.scale(), holder);
          });
     }
 
-    private MaxFractionalDigitsFacetInferredFromJdoColumn(
+    private MaxFractionDigitsFacetInferredFromJdoColumn(
             final int maxFractionalDigits, final FacetHolder holder) {
         super(maxFractionalDigits, holder);
     }
diff --git a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
index 5ee9509..e11bd13 100644
--- a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
+++ b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
 import org.apache.isis.persistence.jdo.metamodel.testing.AbstractFacetFactoryTest;
 
@@ -112,12 +112,12 @@ extends AbstractFacetFactoryTest {
         }
 
         if(maxFractionalDigits>=0) {
-            final MaximumFractionDigitsFacet facet = facetedMethod.getFacet(MaximumFractionDigitsFacet.class);
+            final MaxFractionDigitsFacet facet = facetedMethod.getFacet(MaxFractionDigitsFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof MaxFractionalDigitsFacetInferredFromJdoColumn);
+            assertTrue(facet instanceof MaxFractionDigitsFacetInferredFromJdoColumn);
             assertThat(facet.getMaximumFractionDigits(), is(maxFractionalDigits));
         } else {
-            assertNull(facetedMethod.getFacet(MaximumFractionDigitsFacet.class));
+            assertNull(facetedMethod.getFacet(MaxFractionDigitsFacet.class));
         }
     }
 
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
index c0d3bfa..8a2a033 100644
--- 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
@@ -54,7 +54,7 @@ extends FacetFactoryAbstract {
                 .create(jpaColumnIfAny, holder));
 
         addFacetIfPresent(
-                MaxFractionalDigitsFacetInferredFromJpaColumn
+                MaxFractionDigitsFacetInferredFromJpaColumn
                 .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/MaxFractionDigitsFacetInferredFromJpaColumn.java
similarity index 81%
rename from persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJpaColumn.java
rename to persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/facets/prop/column/MaxFractionDigitsFacetInferredFromJpaColumn.java
index 193f13b..b8226f5 100644
--- 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/MaxFractionDigitsFacetInferredFromJpaColumn.java
@@ -23,25 +23,25 @@ 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.MaximumFractionDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacetAbstract;
 
-public class MaxFractionalDigitsFacetInferredFromJpaColumn
-extends MaxFractionalDigitsFacetAbstract {
+public class MaxFractionDigitsFacetInferredFromJpaColumn
+extends MaxFractionDigitsFacetAbstract {
 
-     public static Optional<MaximumFractionDigitsFacet> create(
+     public static Optional<MaxFractionDigitsFacet> create(
              final Optional<Column> jpaColumnIfAny,
              final FacetHolder holder) {
 
          return jpaColumnIfAny
          .filter(jpaColumn->jpaColumn.scale()>=0)
          .map(jdoColumn->{
-             return new MaxFractionalDigitsFacetInferredFromJpaColumn(
+             return new MaxFractionDigitsFacetInferredFromJpaColumn(
                      jdoColumn.scale(), holder);
          });
     }
 
-    private MaxFractionalDigitsFacetInferredFromJpaColumn(
+    private MaxFractionDigitsFacetInferredFromJpaColumn(
             final int maxFractionalDigits, final FacetHolder holder) {
         super(maxFractionalDigits, holder);
     }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java
index 66ae575..5de5317 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -68,8 +68,8 @@ public interface ScalarUiModel {
      * @see #getScale()
      */
     default Integer getScale() {
-        return getMetaModel().lookupFacet(MaximumFractionDigitsFacet.class)
-                .map(MaximumFractionDigitsFacet::getMaximumFractionDigits)
+        return getMetaModel().lookupFacet(MaxFractionDigitsFacet.class)
+                .map(MaxFractionDigitsFacet::getMaximumFractionDigits)
                 .orElse(null);
     }
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index 09e1619..aaf6c62 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -107,8 +107,8 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
                         .map(MaxTotalDigitsFacet::maxTotalDigits)
                         .orElse(-1);
 
-                final int scale = lookupFacet(MaximumFractionDigitsFacet.class, facetHolders)
-                        .map(MaximumFractionDigitsFacet::getMaximumFractionDigits)
+                final int scale = lookupFacet(MaxFractionDigitsFacet.class, facetHolders)
+                        .map(MaxFractionDigitsFacet::getMaximumFractionDigits)
                         .orElse(-1);
 
                 format = String.format("big-decimal(%d,%d)", totalDigits, scale);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
index a7f00cf..f7b9905 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
@@ -26,7 +26,7 @@ import org.apache.wicket.util.convert.converter.BigIntegerConverter;
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaximumFractionDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -112,8 +112,8 @@ public class IsisConverterLocator {
         }
         if (java.math.BigDecimal.class == correspondingClass) {
             final int scale = objectSpecification
-                .lookupFacet(MaximumFractionDigitsFacet.class)
-                .map(MaximumFractionDigitsFacet::getMaximumFractionDigits)
+                .lookupFacet(MaxFractionDigitsFacet.class)
+                .map(MaxFractionDigitsFacet::getMaximumFractionDigits)
                 .orElse(-1);
             return _Casts.uncheckedCast(new BigDecimalConverterWithScale(scale).forViewMode());
         }
diff --git a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
index ffc6063..e39a5c3 100644
--- a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
+++ b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter_roundtrip.java
@@ -24,7 +24,6 @@ import java.util.Locale;
 import javax.validation.constraints.Digits;
 
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -95,20 +94,20 @@ class BigDecimalConverter_roundtrip {
         assertRoundtrip(CustomerScale2.class, bd_123_45_scale2, "123.45", "123.45", Locale.ENGLISH);
     }
 
-    @Test @Disabled //FIXME[ISIS-2741] scale not picked up yet
+    @Test
     void scale4_english() {
-        assertRoundtrip(CustomerScale4.class, bd_123_45_scale4, "123.4500", "123.4500", Locale.ENGLISH);
+        assertRoundtrip(CustomerScale4.class, bd_123_45_scale4, "123.4500", "123.45", Locale.ENGLISH);
     }
 
-    @Test @Disabled //FIXME[ISIS-2741] scale not picked up yet
+    @Test
     void scaleNull_english() {
-        assertRoundtrip(Customer.class, bd_123_45_scale2, "123.45", "123.45", Locale.ENGLISH);
-        assertRoundtrip(Customer.class, bd_123_45_scale4, "123.4500", "123.4500", Locale.ENGLISH);
+        assertRoundtrip(CustomerScaleNone.class, bd_123_45_scale2, "123.45", "123.45", Locale.ENGLISH);
+        assertRoundtrip(CustomerScaleNone.class, bd_123_45_scale4, "123.4500", "123.45", Locale.ENGLISH);
     }
 
     @Test
     void scale2_italian() {
-        assertRoundtrip(Customer.class, bd_123_45_scale2, "123,45", "123,45", Locale.ITALIAN);
+        assertRoundtrip(CustomerScaleNone.class, bd_123_45_scale2, "123,45", "123,45", Locale.ITALIAN);
     }
 
     @Test
@@ -124,7 +123,7 @@ class BigDecimalConverter_roundtrip {
     @Test
     void scale2_english_tooLargeScale() {
         assertParseError(CustomerScale2.class, "123.454", Locale.ENGLISH,
-                "No more than 2 fraction digits can be entered, got 3 in '123.454'.");
+                "No more than 2 digits can be entered after the decimal separator, got 3 in '123.454'.");
     }
 
     // -- HELPER
@@ -169,7 +168,7 @@ class BigDecimalConverter_roundtrip {
     // -- SCENARIOS
 
     @DomainObject
-    static class Customer {
+    static class CustomerScaleNone {
         @Property @Getter @Setter
         private BigDecimal value;
     }