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/07 11:20:11 UTC

[isis] branch master updated: ISIS-2871: introduces concrete digits related facets

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 5cefd61  ISIS-2871: introduces concrete digits related facets
5cefd61 is described below

commit 5cefd61089fb90fcdf5086aa8da6d2fdc0a78226
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Nov 7 12:20:01 2021 +0100

    ISIS-2871: introduces concrete digits related facets
---
 ...ameterFromJavaxValidationAnnotationFactory.java | 58 ----------------------
 ...FromJavaxValidationDigitsAnnotationFactory.java | 58 ----------------------
 ...alDigitsFacetFromValueSemanticsAnnotation.java} | 27 +++++-----
 ...ameterFromJavaxValidationDigitsAnnotation.java} |  8 +--
 ...opertyFromJavaxValidationDigitsAnnotation.java} |  8 +--
 ...alDigitsFacetFromValueSemanticsAnnotation.java} | 15 +++---
 ...rameterFromJavaxValidationDigitsAnnotation.java |  2 +-
 ...ropertyFromJavaxValidationDigitsAnnotation.java |  2 +-
 ...alDigitsFacetFromValueSemanticsAnnotation.java} | 28 +++++------
 ...erDigitsFacetFromValueSemanticsAnnotation.java} | 28 +++++------
 .../ValueSemanticsAnnotationFacetFactory.java      | 53 +++++++++++++++++---
 .../dflt/ProgrammingModelFacetsJava11.java         |  5 --
 .../facets/param/name/ParameterNameFacetTest.java  |  2 +-
 .../ValueSemanticsAnnotationFacetFactoryTest.java} | 42 ++++------------
 14 files changed, 112 insertions(+), 224 deletions(-)

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
deleted file mode 100644
index 2972055..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  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.core.metamodel.facets.param.bigdecimal.javaxvaldigits;
-
-import java.math.BigDecimal;
-
-import javax.inject.Inject;
-import javax.validation.constraints.Digits;
-
-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 lombok.val;
-
-public class BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory
-extends FacetFactoryAbstract {
-
-    @Inject
-    public BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory(final MetaModelContext mmc) {
-        super(mmc, FeatureType.PARAMETERS_ONLY);
-    }
-
-    @Override
-    public void processParams(final ProcessParameterContext processParameterContext) {
-
-        if(BigDecimal.class != processParameterContext.getParameterType()) {
-            return;
-        }
-
-        val digitsIfAny = processParameterContext.synthesizeOnParameter(Digits.class);
-
-        addFacetIfPresent(
-                MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
-                .create(digitsIfAny, processParameterContext.getFacetHolder()));
-
-        addFacetIfPresent(
-                MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
-                .create(digitsIfAny, processParameterContext.getFacetHolder()));
-    }
-
-}
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
deleted file mode 100644
index 447f115..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
-
-import java.math.BigDecimal;
-
-import javax.inject.Inject;
-import javax.validation.constraints.Digits;
-
-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 lombok.val;
-
-public class BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory
-extends FacetFactoryAbstract {
-
-    @Inject
-    public BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory(final MetaModelContext mmc) {
-        super(mmc, FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-
-        if (BigDecimal.class != processMethodContext.getMethod().getReturnType()) {
-            return;
-        }
-
-        val digitsIfAny = processMethodContext.synthesizeOnMethod(Digits.class);
-
-        addFacetIfPresent(
-                MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-                .create(digitsIfAny, processMethodContext.getFacetHolder()));
-
-        addFacetIfPresent(
-                MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-                .create(digitsIfAny, processMethodContext.getFacetHolder()));
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java
similarity index 62%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java
index f9f13f1..455ce61 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java
@@ -16,33 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
-import javax.validation.constraints.Digits;
-
+import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
 
-public class MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-extends MaxTotalDigitsFacetAbstract {
+public class MaxFractionalDigitsFacetFromValueSemanticsAnnotation
+extends MaxFractionalDigitsFacetAbstract {
 
-    public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Digits> digitsIfAny,
+    public static Optional<MaxFractionalDigitsFacet> create(
+            final Optional<ValueSemantics> digitsIfAny,
             final FacetHolder holder) {
 
         return digitsIfAny
         .map(digits->{
-            return new MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
-                    digits.integer() + digits.fraction(), holder);
+            return new MaxFractionalDigitsFacetFromValueSemanticsAnnotation(
+                    digits.maxFractionalDigits(), holder);
         });
    }
 
-   private MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
-           final int maxTotalDigits, final FacetHolder holder) {
-       super(maxTotalDigits, holder);
+   private MaxFractionalDigitsFacetFromValueSemanticsAnnotation(
+           final int maxFractionalDigits, final FacetHolder holder) {
+       super(maxFractionalDigits, holder);
    }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
similarity index 82%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
index 56e5a12..a7ac711 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
 
-public class MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+public class MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
 extends MaxFractionalDigitsFacetAbstract {
 
      public static Optional<MaxFractionalDigitsFacet> create(
@@ -35,12 +35,12 @@ extends MaxFractionalDigitsFacetAbstract {
 
          return digitsIfAny
          .map(digits->{
-             return new MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+             return new MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
                      digits.fraction(), holder);
          });
     }
 
-    private MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+    private MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
             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/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
similarity index 82%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
index 95a2a47..352c2dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
 
-public class MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+public class MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
 extends MaxFractionalDigitsFacetAbstract {
 
      public static Optional<MaxFractionalDigitsFacet> create(
@@ -35,12 +35,12 @@ extends MaxFractionalDigitsFacetAbstract {
 
          return digitsIfAny
          .map(digits->{
-             return new MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+             return new MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
                      digits.fraction(), holder);
          });
     }
 
-    private MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+    private MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
             final int maxFractionalDigits, final FacetHolder holder) {
         super(maxFractionalDigits, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
similarity index 74%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
index 739f401..9f57863 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java
@@ -16,31 +16,30 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
-import javax.validation.constraints.Digits;
-
+import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
 
-public class MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+public class MaxTotalDigitsFacetFromValueSemanticsAnnotation
 extends MaxTotalDigitsFacetAbstract {
 
     public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Digits> digitsIfAny,
+            final Optional<ValueSemantics> digitsIfAny,
             final FacetHolder holder) {
 
         return digitsIfAny
         .map(digits->{
-            return new MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
-                    digits.integer() + digits.fraction(), holder);
+            return new MaxTotalDigitsFacetFromValueSemanticsAnnotation(
+                    digits.maxTotalDigits(), holder);
         });
    }
 
-   private MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+   private MaxTotalDigitsFacetFromValueSemanticsAnnotation(
            final int maxTotalDigits, final FacetHolder holder) {
        super(maxTotalDigits, holder);
    }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
similarity index 95%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
index 739f401..5c18a67 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
similarity index 95%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
index f9f13f1..d3b7ec4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java
similarity index 61%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java
index f9f13f1..f2aeb5b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java
@@ -16,34 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
-import javax.validation.constraints.Digits;
-
+import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
 
-public class MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-extends MaxTotalDigitsFacetAbstract {
+public class MinFractionalDigitsFacetFromValueSemanticsAnnotation
+extends MinFractionalDigitsFacetAbstract {
 
-    public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Digits> digitsIfAny,
+    public static Optional<MinFractionalDigitsFacet> create(
+            final Optional<ValueSemantics> digitsIfAny,
             final FacetHolder holder) {
 
         return digitsIfAny
         .map(digits->{
-            return new MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
-                    digits.integer() + digits.fraction(), holder);
+            return new MinFractionalDigitsFacetFromValueSemanticsAnnotation(
+                    digits.minFractionalDigits(), holder);
         });
    }
 
-   private MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
-           final int maxTotalDigits, final FacetHolder holder) {
-       super(maxTotalDigits, holder);
+   private MinFractionalDigitsFacetFromValueSemanticsAnnotation(
+           final int minFractionalDigits, final FacetHolder holder) {
+       super(minFractionalDigits, holder);
    }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java
similarity index 61%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java
index 739f401..e63d60a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java
@@ -16,34 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.util.Optional;
 
-import javax.validation.constraints.Digits;
-
+import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinIntegerDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinIntegerDigitsFacetAbstract;
 
-public class MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
-extends MaxTotalDigitsFacetAbstract {
+public class MinIntegerDigitsFacetFromValueSemanticsAnnotation
+extends MinIntegerDigitsFacetAbstract {
 
-    public static Optional<MaxTotalDigitsFacet> create(
-            final Optional<Digits> digitsIfAny,
+    public static Optional<MinIntegerDigitsFacet> create(
+            final Optional<ValueSemantics> digitsIfAny,
             final FacetHolder holder) {
 
         return digitsIfAny
         .map(digits->{
-            return new MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
-                    digits.integer() + digits.fraction(), holder);
+            return new MinIntegerDigitsFacetFromValueSemanticsAnnotation(
+                    digits.minIntegerDigits(), holder);
         });
    }
 
-   private MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
-           final int maxTotalDigits, final FacetHolder holder) {
-       super(maxTotalDigits, holder);
+   private MinIntegerDigitsFacetFromValueSemanticsAnnotation(
+           final int minIntegerDigits, final FacetHolder holder) {
+       super(minIntegerDigits, holder);
    }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index 5aec743..3bc035f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
 import java.util.Optional;
 
 import javax.inject.Inject;
+import javax.validation.constraints.Digits;
 
 import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -47,23 +48,45 @@ extends FacetFactoryAbstract {
                         ValueSemantics.class,
                         () -> MetaModelValidatorForAmbiguousMixinAnnotations
                             .addValidationFailure(processMethodContext.getFacetHolder(), ValueSemantics.class));
-        processProvider(processMethodContext.getFacetHolder(), valueSemanticsIfAny);
+
+        // support for @javax.validataion.Digits
+        val digitsIfAny = BigDecimal.class == processMethodContext.getMethod().getReturnType()
+                ? processMethodContext
+                    .synthesizeOnMethodOrMixinType(
+                            Digits.class,
+                            () -> MetaModelValidatorForAmbiguousMixinAnnotations
+                                .addValidationFailure(processMethodContext.getFacetHolder(), Digits.class))
+                : Optional.<Digits>empty();
+
+        processAll(processMethodContext.getFacetHolder(), valueSemanticsIfAny, digitsIfAny);
     }
 
     @Override
     public void processParams(final ProcessParameterContext processParameterContext) {
-        if(BigDecimal.class != processParameterContext.getParameterType()) {
-            return;
-        }
         val valueSemanticsIfAny = processParameterContext.synthesizeOnParameter(ValueSemantics.class);
-        processProvider(processParameterContext.getFacetHolder(), valueSemanticsIfAny);
+
+        // support for @javax.validataion.Digits
+        val digitsIfAny = BigDecimal.class == processParameterContext.getParameterType()
+                ? processParameterContext.synthesizeOnParameter(Digits.class)
+                : Optional.<Digits>empty();
+
+        processAll(processParameterContext.getFacetHolder(), valueSemanticsIfAny, digitsIfAny);
     }
 
     // -- HELPER
 
-    void processProvider(
+    private void processAll(
             final TypedHolderAbstract facetHolder,
-            final Optional<ValueSemantics> valueSemanticsIfAny) {
+            final Optional<ValueSemantics> valueSemanticsIfAny,
+            final Optional<Digits> digitsIfAny) {
+        processProvider(facetHolder, valueSemanticsIfAny, digitsIfAny);
+        processDigits(facetHolder, valueSemanticsIfAny, digitsIfAny);
+    }
+
+    private void processProvider(
+            final TypedHolderAbstract facetHolder,
+            final Optional<ValueSemantics> valueSemanticsIfAny,
+            final Optional<Digits> digitsIfAny) {
 
         // check for @ValueSemantics(provider=...)
         addFacetIfPresent(
@@ -71,4 +94,20 @@ extends FacetFactoryAbstract {
                 .create(valueSemanticsIfAny, facetHolder));
     }
 
+    private void processDigits(
+            final TypedHolderAbstract facetHolder,
+            final Optional<ValueSemantics> valueSemanticsIfAny,
+            final Optional<Digits> digitsIfAny){
+
+        addFacetIfPresent(
+                MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+                .create(digitsIfAny, facetHolder));
+
+        addFacetIfPresent(
+                MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+                .create(digitsIfAny, facetHolder));
+
+        //FIXME[ISIS-2871] actually process @ValueSemantics(min/max...) and merge with the above
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 18888b0..5cdd658 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -61,7 +61,6 @@ import org.apache.isis.core.metamodel.facets.object.support.ObjectSupportFacetFa
 import org.apache.isis.core.metamodel.facets.object.title.annotation.TitleAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.method.ActionParameterAutoCompleteFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.param.disable.method.ActionParameterDisabledFacetViaMethodFactory;
@@ -73,7 +72,6 @@ import org.apache.isis.core.metamodel.facets.param.parameter.ParameterAnnotation
 import org.apache.isis.core.metamodel.facets.param.validate.method.ActionParameterValidationFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessorFactory;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethodFactory;
-import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.properties.choices.method.PropertyChoicesFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.properties.defaults.method.PropertyDefaultFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.properties.disabled.inferred.DisabledFacetOnPropertyInferredFactory;
@@ -184,9 +182,6 @@ extends ProgrammingModelAbstract {
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BookmarkPolicyFacetFallbackFactory(mmc));
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new HomePageFacetAnnotationFactory(mmc));
 
-        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory(mmc));
-        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory(mmc));
-
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new NotInServiceMenuFacetFromDomainServiceFacetFactory(mmc));
 
         // must come after CssClassFacetOnMemberFactory
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index b10185d..c24dc76 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -67,7 +67,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     @Test
     public void verifyProgrammingModelNumberOfFactories() {
-        assertEquals(64, programmingModel.streamFactories().count());
+        assertEquals(62, programmingModel.streamFactories().count());
     }
 
     @Test //verify we have the javac -parameter flag set when compiling this class
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/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
similarity index 53%
rename from core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/decimal/JavaxValidationDigitsAnnotationFacetFactoryTest.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
index aacfe56..8a11e1c 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/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
@@ -1,22 +1,4 @@
-/*
- *  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.core.metamodel.facets.propparam.decimal;
+package org.apache.isis.core.metamodel.facets.value.semantics;
 
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
@@ -31,19 +13,13 @@ 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.digits.MaxFractionalDigitsFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
-import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory;
-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.MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
-
-public class JavaxValidationDigitsAnnotationFacetFactoryTest
+
+public class ValueSemanticsAnnotationFacetFactoryTest
 extends AbstractFacetFactoryTest {
 
     public void testAnnotationPickedUpOnProperty() {
-        final BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory facetFactory =
-                new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory(metaModelContext);
+        final ValueSemanticsAnnotationFacetFactory facetFactory =
+                new ValueSemanticsAnnotationFacetFactory(metaModelContext);
 
         class Order {
             @javax.validation.constraints.Digits(integer=14, fraction=4)
@@ -60,8 +36,8 @@ extends AbstractFacetFactoryTest {
     }
 
     public void testAnnotationPickedUpOnActionParameter() {
-        final BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory facetFactory =
-                new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory(metaModelContext);
+        final ValueSemanticsAnnotationFacetFactory facetFactory =
+                new ValueSemanticsAnnotationFacetFactory(metaModelContext);
 
         class Order {
             @SuppressWarnings("unused")
@@ -94,8 +70,8 @@ extends AbstractFacetFactoryTest {
         if(maxFractionalDigits>=0) {
             final MaxFractionalDigitsFacet facet = facetedMethod.getFacet(MaxFractionalDigitsFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof MaxFractionDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
-                    ||facet instanceof MaxFractionDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
+            assertTrue(facet instanceof MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+                    ||facet instanceof MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
             assertThat(facet.getMaxFractionalDigits(), is(maxFractionalDigits));
         }
     }