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);
+ }
+
+
+}