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/09/15 13:26:26 UTC
[isis] branch master updated: ISIS-2871: UUID and BigDecimal
ValueSemantics rewritten from scratch
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 211b0b3 ISIS-2871: UUID and BigDecimal ValueSemantics rewritten from scratch
211b0b3 is described below
commit 211b0b36939fe0f0dcaf4780cbf7abc49f4c5697
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 15 15:26:12 2021 +0200
ISIS-2871: UUID and BigDecimal ValueSemantics rewritten from scratch
so can be reused stand-alone, also supporting inheritance
more to come
---
.../adapters/AbstractValueSemanticsProvider.java | 29 ++++++
.../isis/commons/internal/base/_Strings.java | 15 +++
...ingValueFacetUsingSemanticsProviderFactory.java | 2 +-
.../ValueFacetUsingSemanticsProviderFactory.java | 11 +-
.../value/vsp/ValueSemanticsFacetAbstract.java | 71 +++++++++++++
.../maxlen/MaxFractionalDigitsFacet.java | 31 ++++--
.../maxlen/MaxFractionalDigitsFacetAbstract.java} | 46 +++++----
.../objectvalue/maxlen/MaxLengthFacetAbstract.java | 4 +-
.../maxlen/MaxTotalDigitsFacet.java} | 26 +++--
.../maxlen/MaxTotalDigitsFacetAbstract.java} | 46 +++++----
...ameterFromJavaxValidationAnnotationFactory.java | 5 +-
...ameterFromJavaxValidationDigitsAnnotation.java} | 23 ++---
...ameterFromJavaxValidationDigitsAnnotation.java} | 44 ++++----
...FromJavaxValidationDigitsAnnotationFactory.java | 8 +-
...opertyFromJavaxValidationDigitsAnnotation.java} | 25 ++---
...opertyFromJavaxValidationDigitsAnnotation.java} | 35 +++----
...DtoValueFacetUsingSemanticsProviderFactory.java | 2 +-
...DtoValueFacetUsingSemanticsProviderFactory.java | 2 +-
...DtoValueFacetUsingSemanticsProviderFactory.java | 2 +-
.../value/bigdecimal/BigDecimalValueFacet.java | 51 ---------
...malValueFacetUsingSemanticsProviderFactory.java | 3 +-
.../value/bigdecimal/BigDecimalValueSemantics.java | 110 ++++++++++++++++++++
.../BigDecimalValueSemanticsProvider.java | 115 ---------------------
...gerValueFacetUsingSemanticsProviderFactory.java | 2 +-
...lobValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...lobValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ateValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ateValueFacetUsingSemanticsProviderFactory.java | 2 +-
...imeValueFacetUsingSemanticsProviderFactory.java | 2 +-
...imeValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ateValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ageValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...athValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...kupValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ordValueFacetUsingSemanticsProviderFactory.java | 2 +-
...iveValueFacetUsingSemanticsProviderFactory.java | 2 +-
...perValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ingValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ralValueFacetUsingSemanticsProviderFactory.java | 2 +-
...imeValueFacetUsingSemanticsProviderFactory.java | 2 +-
...ampValueFacetUsingSemanticsProviderFactory.java | 2 +-
...odeValueFacetUsingSemanticsProviderFactory.java | 2 +-
...URLValueFacetUsingSemanticsProviderFactory.java | 2 +-
.../value/url/URLValueSemanticsProvider.java | 2 +-
...UIDValueFacetUsingSemanticsProviderFactory.java | 2 +-
.../facets/value/uuid/UUIDValueSemantics.java | 76 ++++++++++++++
.../value/uuid/UUIDValueSemanticsProvider.java | 91 ----------------
...ValidationDigitsAnnotationFacetFactoryTest.java | 52 ++++++----
.../BigDecimalValueSemanticsProviderTest.java | 12 +--
.../ValueSemanticsProviderAbstractTestCase.java | 41 ++++++--
.../ui/components/number/NumberFieldFactory.java | 17 +--
...nferredFromJdoColumnAnnotationFacetFactory.java | 77 +++++---------
...ractionalDigitsFacetInferredFromJdoColumn.java} | 26 ++++-
...DerivedFromJdoColumnAnnotationFacetFactory.java | 20 +---
.../column/MaxLengthFacetDerivedFromJdoColumn.java | 23 ++++-
... MaxTotalDigitsFacetInferredFromJdoColumn.java} | 32 ++++--
...vedFromJdoColumnAnnotationFacetFactoryTest.java | 56 +++++-----
.../common/model/binding/BindingConverter.java | 8 +-
.../binding/NumberConverterForStringComponent.java | 48 +++------
.../viewer/common/model/feature/ScalarUiModel.java | 13 ++-
.../rendering/domainobjects/JsonValueEncoder.java | 4 -
.../domainobjects/ObjectAndActionInvocation.java | 19 ++--
.../domainobjects/ObjectPropertyReprRenderer.java | 57 +++++-----
.../domainobjects/ScalarValueReprRenderer.java | 3 +-
.../CollectionContentsAsSummaryFactory.java | 11 +-
.../components/scalars/IsisConverterLocator.java | 11 +-
.../jdkmath/BigDecimalConverterWithScale.java | 13 ++-
.../viewer/wicket/ui/pages/entity/EntityPage.java | 23 +++--
82 files changed, 826 insertions(+), 685 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
index f576fc8..6cdd9fb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
@@ -18,6 +18,16 @@
*/
package org.apache.isis.applib.adapters;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.Optional;
+
+import org.springframework.lang.Nullable;
+
+import org.apache.isis.applib.adapters.Parser.Context;
+import org.apache.isis.applib.services.iactnlayer.InteractionContext;
+
/**
* @since 1.x {@index}
*/
@@ -42,5 +52,24 @@ implements ValueSemanticsProvider<T> {
return (DefaultsProvider<T>) (this instanceof DefaultsProvider ? this : null);
}
+ /**
+ * @param context - nullable in support of JUnit testing
+ * @return {@link Locale} from given context or else system's default
+ */
+ protected Locale getLocale(final @Nullable Context context) {
+ return Optional.ofNullable(context)
+ .map(Context::getInteractionContext)
+ .map(InteractionContext::getLocale)
+ .orElseGet(Locale::getDefault);
+ }
+
+ /**
+ * @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
+ */
+ protected DecimalFormat getNumberFormat(final @Nullable Context context) {
+ return (DecimalFormat)NumberFormat.getNumberInstance(getLocale(context));
+ }
}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java b/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
index 547d4a8..40e9bd4 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
@@ -218,6 +218,19 @@ public final class _Strings {
/**
* @param input
+ * @return null if the {@code input} is null or blank, the trimmed {@code input} otherwise
+ */
+ public static @Nullable String blankToNullOrTrim(final @Nullable String input) {
+ if(isEmpty(input)) {
+ return null;
+ }
+ return input.isBlank()
+ ? null
+ : input.trim();
+ }
+
+ /**
+ * @param input
* @return the empty string if the {@code input} is null, the {@code input} otherwise
*/
public static String nullToEmpty(final @Nullable String input) {
@@ -757,4 +770,6 @@ public final class _Strings {
StringBuilder::toString);
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumFacetUsingValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumFacetUsingValueFacetUsingSemanticsProviderFactory.java
index d8c5287..f9772d9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumFacetUsingValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumFacetUsingValueFacetUsingSemanticsProviderFactory.java
@@ -43,7 +43,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Enum<?>> {
return;
}
- addFacets(_Casts.uncheckedCast(
+ addValueFacet(_Casts.uncheckedCast(
new EnumValueSemanticsProvider<>(
processClassContext.getIntrospectionPolicy(),
facetHolder,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index 6331427..624b5d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -18,7 +18,9 @@
*/
package org.apache.isis.core.metamodel.facets.object.value.vsp;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -30,9 +32,16 @@ extends FacetFactoryAbstract {
super(mmc, FeatureType.OBJECTS_ONLY);
}
- protected void addFacets(final ValueSemanticsProviderAndFacetAbstract<T> adapter) {
+ protected final void addValueFacet(final ValueSemanticsProviderAndFacetAbstract<T> adapter) {
FacetUtil.addFacet(
new ValueFacetUsingSemanticsProvider(adapter, adapter.getFacetHolder()));
}
+ protected final void addAllFacetsForValueSemantics(
+ final ValueSemanticsProvider<?> valueSemantics,
+ final FacetHolder holder) {
+ FacetUtil.addFacet(
+ new ValueFacetUsingSemanticsProvider(valueSemantics, holder));
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsFacetAbstract.java
new file mode 100644
index 0000000..c61b21e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsFacetAbstract.java
@@ -0,0 +1,71 @@
+/*
+ * 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.object.value.vsp;
+
+import org.apache.isis.applib.adapters.DefaultsProvider;
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+import lombok.Getter;
+import lombok.NonNull;
+
+public abstract class ValueSemanticsFacetAbstract<T>
+extends FacetAbstract
+implements ValueSemanticsProvider<T> {
+
+ @Getter
+ final @NonNull ValueSemanticsProvider<T> valueSemantics;
+
+ protected ValueSemanticsFacetAbstract(
+ final Class<? extends Facet> facetType,
+ final ValueSemanticsProvider<T> valueSemantics,
+ final FacetHolder facetHolder) {
+ super(facetType, facetHolder);
+ this.valueSemantics = valueSemantics;
+ }
+
+ protected ValueSemanticsFacetAbstract(
+ final Class<? extends Facet> facetType,
+ final ValueSemanticsProvider<T> valueSemantics,
+ final FacetHolder facetHolder,
+ final Precedence precedence) {
+ super(facetType, facetHolder, precedence);
+ this.valueSemantics = valueSemantics;
+ }
+
+ @Override
+ public final Parser<T> getParser() {
+ return valueSemantics.getParser();
+ }
+
+ @Override
+ public final EncoderDecoder<T> getEncoderDecoder() {
+ return valueSemantics.getEncoderDecoder();
+ }
+
+ @Override
+ public final DefaultsProvider<T> getDefaultsProvider() {
+ return valueSemantics.getDefaultsProvider();
+ }
+
+}
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetInferredFromJdoColumn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacet.java
similarity index 56%
rename from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetInferredFromJdoColumn.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacet.java
index 03b703f..c0ead20 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetInferredFromJdoColumn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacet.java
@@ -16,17 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.persistence.jdo.metamodel.facets.prop.column;
+package org.apache.isis.core.metamodel.facets.objectvalue.maxlen;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
+import javax.validation.constraints.Digits;
-public class BigDecimalFacetInferredFromJdoColumn
-extends BigDecimalValueFacetAbstract {
+import org.apache.isis.core.metamodel.facetapi.Facet;
- public BigDecimalFacetInferredFromJdoColumn(
- final FacetHolder holder, final int precision, final int scale) {
- super(precision, scale, holder, Precedence.INFERRED);
- }
+/**
+ * The number of digits to the right of the decimal place (fractional part)
+ * for this decimal.
+ *
+ * <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>
+ * </ul>
+ */
+public interface MaxFractionalDigitsFacet
+extends Facet {
+
+ /**
+ * eg. as provided by {@link Digits#fraction()}
+ */
+ int maxFractionalDigits();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java
similarity index 53%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java
index 51743c4..6e0aa27 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxFractionalDigitsFacetAbstract.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.bigdecimal;
+package org.apache.isis.core.metamodel.facets.objectvalue.maxlen;
import java.util.function.BiConsumer;
@@ -25,42 +25,50 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import lombok.Getter;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
-public abstract class BigDecimalValueFacetAbstract
+public abstract class MaxFractionalDigitsFacetAbstract
extends FacetAbstract
-implements BigDecimalValueFacet {
+implements MaxFractionalDigitsFacet {
private static final Class<? extends Facet> type() {
- return BigDecimalValueFacet.class;
+ return MaxFractionalDigitsFacet.class;
}
- @Getter(onMethod_ = {@Override}) private final int precision;
- @Getter(onMethod_ = {@Override}) private final int scale;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final int maxFractionalDigits;
- public BigDecimalValueFacetAbstract(
- final int precision,
- final int scale,
+ protected MaxFractionalDigitsFacetAbstract(
+ final int maxFractionalDigits,
final FacetHolder holder) {
super(type(), holder);
- this.precision = precision;
- this.scale = scale;
+ this.maxFractionalDigits= maxFractionalDigits;
}
- public BigDecimalValueFacetAbstract(
- final int precision,
- final int scale,
+ protected MaxFractionalDigitsFacetAbstract(
+ final int maxFractionalDigits,
final FacetHolder holder,
final Facet.Precedence precedence) {
super(type(), holder, precedence);
- this.precision = precision;
- this.scale = scale;
+ this.maxFractionalDigits= maxFractionalDigits;
}
@Override
- public final void visitAttributes(final BiConsumer<String, Object> visitor) {
+ public boolean semanticEquals(@NonNull final Facet other) {
+ return other instanceof MaxFractionalDigitsFacet
+ ? Integer.compare(
+ this.maxFractionalDigits(),
+ ((MaxFractionalDigitsFacet)other).maxFractionalDigits()) == 0
+ : false;
+ }
+
+ @Override
+ public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("precision", precision);
- visitor.accept("scale", scale);
+ visitor.accept("maxFractionalDigits", maxFractionalDigits <0
+ ? "unlimited"
+ : String.valueOf(maxFractionalDigits));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxLengthFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxLengthFacetAbstract.java
index 7c920fb..6dc9b33 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxLengthFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxLengthFacetAbstract.java
@@ -38,13 +38,13 @@ implements MaxLengthFacet {
return MaxLengthFacet.class;
}
- public MaxLengthFacetAbstract(
+ protected MaxLengthFacetAbstract(
final int maxLength,
final FacetHolder holder) {
super(type(), holder, maxLength);
}
- public MaxLengthFacetAbstract(
+ protected MaxLengthFacetAbstract(
final int maxLength,
final FacetHolder holder,
final Facet.Precedence precedence) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacet.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacet.java
index f2f558c..d3920ac 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacet.java
@@ -16,17 +16,29 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.uuid;
+package org.apache.isis.core.metamodel.facets.objectvalue.maxlen;
-import java.util.UUID;
+import javax.validation.constraints.Digits;
import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-public interface UUIDValueFacet extends Facet {
-
- UUID uuidValue(ManagedObject object);
+/**
+ * Maximum length of digits for this decimal.
+ *
+ * <p>
+ * For example:
+ * <ul>
+ * <li><tt>12345.789</tt> has a total of 8</li>
+ * <li><tt>12345</tt> has a total of 5</li>
+ * <li><tt>12345.0</tt> has a total of 6</li>
+ * </ul>
+ */
+public interface MaxTotalDigitsFacet
+extends Facet {
- ManagedObject createValue(UUID value);
+ /**
+ * eg. as provided by {@link Digits#fraction()}
+ */
+ int maxTotalDigits();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacetAbstract.java
similarity index 55%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacetAbstract.java
index 51743c4..184d57d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/maxlen/MaxTotalDigitsFacetAbstract.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.bigdecimal;
+package org.apache.isis.core.metamodel.facets.objectvalue.maxlen;
import java.util.function.BiConsumer;
@@ -25,42 +25,50 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import lombok.Getter;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
-public abstract class BigDecimalValueFacetAbstract
+public abstract class MaxTotalDigitsFacetAbstract
extends FacetAbstract
-implements BigDecimalValueFacet {
+implements MaxTotalDigitsFacet {
private static final Class<? extends Facet> type() {
- return BigDecimalValueFacet.class;
+ return MaxTotalDigitsFacet.class;
}
- @Getter(onMethod_ = {@Override}) private final int precision;
- @Getter(onMethod_ = {@Override}) private final int scale;
+ @Getter(onMethod_ = {@Override}) @Accessors(fluent = true)
+ private final int maxTotalDigits;
- public BigDecimalValueFacetAbstract(
- final int precision,
- final int scale,
+ protected MaxTotalDigitsFacetAbstract(
+ final int maxTotalDigits,
final FacetHolder holder) {
super(type(), holder);
- this.precision = precision;
- this.scale = scale;
+ this.maxTotalDigits = maxTotalDigits;
}
- public BigDecimalValueFacetAbstract(
- final int precision,
- final int scale,
+ protected MaxTotalDigitsFacetAbstract(
+ final int maxTotalDigits,
final FacetHolder holder,
final Facet.Precedence precedence) {
super(type(), holder, precedence);
- this.precision = precision;
- this.scale = scale;
+ this.maxTotalDigits = maxTotalDigits;
}
@Override
- public final void visitAttributes(final BiConsumer<String, Object> visitor) {
+ public boolean semanticEquals(@NonNull final Facet other) {
+ return other instanceof MaxTotalDigitsFacet
+ ? Integer.compare(
+ this.maxTotalDigits(),
+ ((MaxTotalDigitsFacet)other).maxTotalDigits()) == 0
+ : false;
+ }
+
+ @Override
+ public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("precision", precision);
- visitor.accept("scale", scale);
+ visitor.accept("maxTotalDigits", maxTotalDigits <0
+ ? "unlimited"
+ : String.valueOf(maxTotalDigits));
}
}
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 f3e6110..4a8970a 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
@@ -47,9 +47,12 @@ extends FacetFactoryAbstract {
val digitsIfAny = processParameterContext.synthesizeOnParameter(Digits.class);
addFacetIfPresent(
- BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation
+ MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
.create(digitsIfAny, processParameterContext.getFacetHolder()));
+ addFacetIfPresent(
+ MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+ .create(digitsIfAny, processParameterContext.getFacetHolder()));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
similarity index 61%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
index 65499d3..ea6aedf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
@@ -23,29 +23,26 @@ import java.util.Optional;
import javax.validation.constraints.Digits;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
-public class BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation
-extends BigDecimalValueFacetAbstract {
+public class MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+extends MaxFractionalDigitsFacetAbstract {
- public static Optional<BigDecimalValueFacet> create(
+ public static Optional<MaxFractionalDigitsFacet> create(
final Optional<Digits> digitsIfAny,
final FacetHolder holder) {
return digitsIfAny
.map(digits->{
- final int length = digits.integer() + digits.fraction();
- final int scale = digits.fraction();
- return new BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(holder, length, scale);
+ return new MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+ digits.fraction(), holder);
});
}
- private BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(
- final FacetHolder holder, final int precision, final int scale) {
- super(precision, scale, holder);
+ 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/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
similarity index 52%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
index 65499d3..1025f9c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation.java
@@ -23,29 +23,27 @@ import java.util.Optional;
import javax.validation.constraints.Digits;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
-
-public class BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation
-extends BigDecimalValueFacetAbstract {
-
- public static Optional<BigDecimalValueFacet> create(
- final Optional<Digits> digitsIfAny,
- final FacetHolder holder) {
-
- return digitsIfAny
- .map(digits->{
- final int length = digits.integer() + digits.fraction();
- final int scale = digits.fraction();
- return new BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(holder, length, scale);
- });
- }
-
- private BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(
- final FacetHolder holder, final int precision, final int scale) {
- super(precision, scale, holder);
- }
-
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacetAbstract;
+
+public class MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation
+extends MaxTotalDigitsFacetAbstract {
+
+ public static Optional<MaxTotalDigitsFacet> create(
+ final Optional<Digits> digitsIfAny,
+ final FacetHolder holder) {
+
+ return digitsIfAny
+ .map(digits->{
+ return new MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+ digits.integer() + digits.fraction(), holder);
+ });
+ }
+
+ private MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation(
+ final int maxTotalDigits, final FacetHolder holder) {
+ super(maxTotalDigits, 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 28a5d2f..4edb66e 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
@@ -47,8 +47,12 @@ extends FacetFactoryAbstract {
val digitsIfAny = processMethodContext.synthesizeOnMethod(Digits.class);
addFacetIfPresent(
- BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation
- .create(processMethodContext.getFacetHolder(), digitsIfAny));
+ MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+ .create(digitsIfAny, processMethodContext.getFacetHolder()));
+
+ addFacetIfPresent(
+ MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+ .create(digitsIfAny, processMethodContext.getFacetHolder()));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
similarity index 57%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
index 65499d3..a2d4124 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/bigdecimal/javaxvaldigits/BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
@@ -16,36 +16,33 @@
* 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.properties.bigdecimal.javaxvaldigits;
import java.util.Optional;
import javax.validation.constraints.Digits;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
-public class BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation
-extends BigDecimalValueFacetAbstract {
+public class MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+extends MaxFractionalDigitsFacetAbstract {
- public static Optional<BigDecimalValueFacet> create(
+ public static Optional<MaxFractionalDigitsFacet> create(
final Optional<Digits> digitsIfAny,
final FacetHolder holder) {
return digitsIfAny
.map(digits->{
- final int length = digits.integer() + digits.fraction();
- final int scale = digits.fraction();
- return new BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(holder, length, scale);
+ return new MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+ digits.fraction(), holder);
});
}
- private BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation(
- final FacetHolder holder, final int precision, final int scale) {
- super(precision, scale, holder);
+ 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/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
similarity index 55%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
index 2cb8f57..a628418 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/bigdecimal/javaxvaldigits/MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation.java
@@ -23,30 +23,27 @@ import java.util.Optional;
import javax.validation.constraints.Digits;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacetAbstract;
+public class MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+extends MaxTotalDigitsFacetAbstract {
-public class BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation
-extends BigDecimalValueFacetAbstract {
-
- public static Optional<BigDecimalValueFacet> create(
- final FacetHolder facetHolder,
- final Optional<Digits> digitsIfAny) {
+ public static Optional<MaxTotalDigitsFacet> create(
+ final Optional<Digits> digitsIfAny,
+ final FacetHolder holder) {
return digitsIfAny
.map(digits->{
- final int length = digits.integer() + digits.fraction();
- final int scale = digits.fraction();
- return new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation(facetHolder, length, scale);
+ return new MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+ digits.integer() + digits.fraction(), holder);
});
- }
-
- private BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation(
- final FacetHolder holder,
- final int precision,
- final int scale) {
- super(precision, scale, holder);
- }
+ }
+
+ private MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation(
+ final int maxTotalDigits, final FacetHolder holder) {
+ super(maxTotalDigits, holder);
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueFacetUsingSemanticsProviderFactory.java
index 5c08a99..42f9b2a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueFacetUsingSemanticsProviderFactory.java
@@ -44,6 +44,6 @@ extends ValueFacetUsingSemanticsProviderFactory<ChangesDto> {
return;
}
val provider = new ChangesDtoValueSemanticsProvider(holder);
- addFacets(provider);
+ addValueFacet(provider);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueFacetUsingSemanticsProviderFactory.java
index 21b98d7..f108e69 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueFacetUsingSemanticsProviderFactory.java
@@ -44,6 +44,6 @@ extends ValueFacetUsingSemanticsProviderFactory<CommandDto> {
return;
}
val provider = new CommandDtoValueSemanticsProvider(holder);
- addFacets(provider);
+ addValueFacet(provider);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueFacetUsingSemanticsProviderFactory.java
index 6bfbe26..b752191 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueFacetUsingSemanticsProviderFactory.java
@@ -44,6 +44,6 @@ extends ValueFacetUsingSemanticsProviderFactory<InteractionDto> {
return;
}
val provider = new InteractionDtoValueSemanticsProvider(holder);
- addFacets(provider);
+ addValueFacet(provider);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacet.java
deleted file mode 100644
index 97b9fa9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacet.java
+++ /dev/null
@@ -1,51 +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.value.bigdecimal;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-
-public interface BigDecimalValueFacet extends Facet {
-
- /**
- * Maximum length of digits for this decimal (in other words, its precision).
- *
- * <p>
- * For example:
- * <ul>
- * <li><tt>12345.789</tt> has a length of 8 (and a {@link #getScale() scale} of 3)</li>
- * <li><tt>12345</tt> has a length of 5 (and {@link #getScale() scale} of 0)</li>
- * <li><tt>12345.0</tt> has a length of 6 (and {@link #getScale() scale} of 1)</li>
- * </ul>
- */
- int getPrecision();
-
- /**
- * The number of digits to the right of the decimal place (fractional part) for this decimal.
- *
- * <p>
- * For example:
- * <ul>
- * <li><tt>12345.789</tt> has scale of 3 (and a {@link #getPrecision() precision} of 8)</li>
- * <li><tt>12345</tt> has a scale of 0 (and a {@link #getPrecision() precision} of 5)</li>
- * <li><tt>12345.0</tt> has a scale of 1 (and a {@link #getPrecision() precision} of 6)</li>
- * </ul>
- */
- int getScale();
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetUsingSemanticsProviderFactory.java
index 9be17a0..e9ce3c88 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueFacetUsingSemanticsProviderFactory.java
@@ -41,8 +41,7 @@ extends ValueFacetUsingSemanticsProviderFactory<BigDecimal> {
if (type != BigDecimal.class) {
return;
}
- addFacets(new BigDecimalValueSemanticsProvider(holder));
- return;
+ addAllFacetsForValueSemantics(new BigDecimalValueSemantics(), holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemantics.java
new file mode 100644
index 0000000..158590d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemantics.java
@@ -0,0 +1,110 @@
+/*
+ * 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.value.bigdecimal;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.ParsePosition;
+
+import org.apache.isis.applib.adapters.AbstractValueSemanticsProvider;
+import org.apache.isis.applib.adapters.DefaultsProvider;
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.exceptions.UnrecoverableException;
+import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
+import org.apache.isis.commons.internal.base._Strings;
+
+public class BigDecimalValueSemantics
+extends AbstractValueSemanticsProvider<BigDecimal>
+implements
+ DefaultsProvider<BigDecimal>,
+ EncoderDecoder<BigDecimal>,
+ Parser<BigDecimal> {
+
+ public static final int DEFAULT_LENGTH = 18;
+ public static final int DEFAULT_SCALE = 2;
+
+ @Override
+ public BigDecimal getDefaultValue() {
+ return BigDecimal.ZERO;
+ }
+
+ // -- ENCODER DECODER
+
+ @Override
+ public String toEncodedString(final BigDecimal value) {
+ try {
+ return value.toPlainString();
+ } catch (final Exception e) {
+ throw new UnrecoverableException(e);
+ }
+ }
+
+ @Override
+ public BigDecimal fromEncodedString(final String data) {
+ return new BigDecimal(data);
+ }
+
+ // -- PARSER
+
+ @Override
+ public String presentationValue(final Context context, final BigDecimal value) {
+ return value==null
+ ? ""
+ : getNumberFormat(context)
+ .format(value);
+ }
+
+ @Override
+ public String parseableTextRepresentation(final Context context, final BigDecimal value) {
+ return value==null
+ ? null
+ : getNumberFormat(context)
+ .format(value);
+ }
+
+ @Override
+ public BigDecimal parseTextRepresentation(final Context context, final String text) {
+ final var input = _Strings.blankToNullOrTrim(text);
+ if(input==null) {
+ return null;
+ }
+ final var format = getNumberFormat(context);
+ format.setParseBigDecimal(true);
+ final var position = new ParsePosition(0);
+
+ try {
+ final var number = (BigDecimal)format.parse(input, position);
+ if (position.getErrorIndex() != -1) {
+ throw new ParseException("could not parse input='" + input + "'", position.getErrorIndex());
+ } else if (position.getIndex() < input.length()) {
+ throw new ParseException("input='" + input + "' wasnt processed completely", position.getIndex());
+ }
+ return number;
+ } catch (final NumberFormatException | ParseException e) {
+ throw new TextEntryParseException("Not a decimal " + input, e);
+ }
+ }
+
+ @Override
+ public int typicalLength() {
+ return 10;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
deleted file mode 100644
index e4c23a1..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
+++ /dev/null
@@ -1,115 +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.value.bigdecimal;
-
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Locale;
-import java.util.function.BiConsumer;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.exceptions.UnrecoverableException;
-import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
-import org.apache.isis.core.metamodel.commons.LocaleUtil;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-
-public class BigDecimalValueSemanticsProvider
-extends ValueSemanticsProviderAndFacetAbstract<BigDecimal>
-implements BigDecimalValueFacet {
-
- private static Class<? extends Facet> type() {
- return BigDecimalValueFacet.class;
- }
-
- private static final int TYPICAL_LENGTH = 10;
- private static final BigDecimal DEFAULT_VALUE = new BigDecimal(0);
-
- public static final int DEFAULT_LENGTH = 18;
- public static final int DEFAULT_SCALE = 2;
-
- private final NumberFormat format;
-
- public BigDecimalValueSemanticsProvider(final FacetHolder holder) {
- super(type(), holder, BigDecimal.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
- final String formatRequired = getConfiguration().getValueTypes().getJavaMath().getBigDecimal().getFormat();
-
- if (formatRequired != null) {
- format = new DecimalFormat(formatRequired);
- } else {
- final Locale inLocale = getConfiguration().getCore().getRuntime().getLocale().map(LocaleUtil::findLocale).orElse(Locale.getDefault());
- format = NumberFormat.getNumberInstance(inLocale);
- }
- }
-
- // -- SCALE, PRECISION
-
- @Override
- public int getPrecision() {
- return DEFAULT_LENGTH;
- }
-
- @Override
- public int getScale() {
- return DEFAULT_SCALE;
- }
-
- // -- PARSER
-
- @Override
- protected BigDecimal doParse(final Parser.Context context, final String entry) {
- try {
- return new BigDecimal(entry);
- } catch (final NumberFormatException e) {
- throw new TextEntryParseException("Not a decimal " + entry, e);
- }
- }
-
- // -- TITLE
-
- @Override
- public String titleString(final Object object) {
- return titleString(format, object);
- }
-
- // -- ENCODER DECODER
-
- @Override
- public String toEncodedString(final BigDecimal object) {
- try {
- return object.toPlainString();
- } catch (final Exception e) {
- throw new UnrecoverableException(e);
- }
- }
-
- @Override
- public BigDecimal fromEncodedString(final String data) {
- return new BigDecimal(data);
- }
-
- @Override
- public void visitAttributes(final BiConsumer<String, Object> visitor) {
- super.visitAttributes(visitor);
- visitor.accept("format", format);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacetUsingSemanticsProviderFactory.java
index 5bc4711..efeef09 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacetUsingSemanticsProviderFactory.java
@@ -41,7 +41,7 @@ extends ValueFacetUsingSemanticsProviderFactory<BigInteger> {
if (type != BigInteger.class) {
return;
}
- addFacets(new BigIntegerValueSemanticsProvider(holder));
+ addValueFacet(new BigIntegerValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueFacetUsingSemanticsProviderFactory.java
index d10f5a8..df0f848 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Blob> {
if (type != Blob.class) {
return;
}
- addFacets(new BlobValueSemanticsProvider(holder));
+ addValueFacet(new BlobValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueFacetUsingSemanticsProviderFactory.java
index a7261a2..6bdd6ae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Boolean> {
if (type != boolean.class) {
return;
}
- addFacets(new BooleanPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new BooleanPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueFacetUsingSemanticsProviderFactory.java
index 4a3d08c..62bf86b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Boolean> {
if (type != Boolean.class) {
return;
}
- addFacets(new BooleanWrapperValueSemanticsProvider(holder));
+ addValueFacet(new BooleanWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/BytePrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/BytePrimitiveValueFacetUsingSemanticsProviderFactory.java
index bfbcbb3..de44ad6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/BytePrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/BytePrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Byte> {
if (type != byte.class) {
return;
}
- addFacets(new BytePrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new BytePrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteWrapperValueFacetUsingSemanticsProviderFactory.java
index 5b33210..5505d99 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Byte> {
if (type != Byte.class) {
return;
}
- addFacets(new ByteWrapperValueSemanticsProvider(holder));
+ addValueFacet(new ByteWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharPrimitiveValueFacetUsingSemanticsProviderFactory.java
index ca756b5..b066fbb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Character> {
if (type != char.class) {
return;
}
- addFacets(new CharPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new CharPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharWrapperValueFacetUsingSemanticsProviderFactory.java
index 72bae20..b22a705 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Character> {
if (type != Character.class) {
return;
}
- addFacets(new CharWrapperValueSemanticsProvider(holder));
+ addValueFacet(new CharWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueFacetUsingSemanticsProviderFactory.java
index 9a3d7f9..5b445d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Clob> {
if (type != Clob.class) {
return;
}
- addFacets(new ClobValueSemanticsProvider(holder));
+ addValueFacet(new ClobValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueFacetUsingSemanticsProviderFactory.java
index 77f3768..b71e7ca 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueFacetUsingSemanticsProviderFactory.java
@@ -43,7 +43,7 @@ extends ValueFacetUsingSemanticsProviderFactory<LocalDate> {
if (type != LocalDate.class) {
return;
}
- addFacets(new JodaLocalDateValueSemanticsProvider(holder));
+ addValueFacet(new JodaLocalDateValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueFacetUsingSemanticsProviderFactory.java
index 1e778b4..4073a6c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueFacetUsingSemanticsProviderFactory.java
@@ -43,7 +43,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Date> {
if (type != Date.class) {
return;
}
- addFacets(new JavaSqlDateValueSemanticsProvider(holder));
+ addValueFacet(new JavaSqlDateValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueFacetUsingSemanticsProviderFactory.java
index cb4f16c..268bae3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueFacetUsingSemanticsProviderFactory.java
@@ -43,7 +43,7 @@ extends ValueFacetUsingSemanticsProviderFactory<DateTime> {
if (type != DateTime.class) {
return;
}
- addFacets(new JodaDateTimeValueSemanticsProvider(holder));
+ addValueFacet(new JodaDateTimeValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory.java
index c3d0d41..422f236 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory.java
@@ -43,7 +43,7 @@ extends ValueFacetUsingSemanticsProviderFactory<LocalDateTime> {
if (type != LocalDateTime.class) {
return;
}
- addFacets(new JodaLocalDateTimeValueSemanticsProvider(holder));
+ addValueFacet(new JodaLocalDateTimeValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/dateutil/JavaUtilDateValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/dateutil/JavaUtilDateValueFacetUsingSemanticsProviderFactory.java
index 9dbb61a..f41f980 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/dateutil/JavaUtilDateValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/dateutil/JavaUtilDateValueFacetUsingSemanticsProviderFactory.java
@@ -44,7 +44,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Date> {
if (type != Date.class) {
return;
}
- addFacets(new JavaUtilDateValueSemanticsProvider(holder));
+ addValueFacet(new JavaUtilDateValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoublePrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoublePrimitiveValueFacetUsingSemanticsProviderFactory.java
index b8e8e6a..8eaefdf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoublePrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoublePrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Double> {
if (type != double.class) {
return;
}
- addFacets(new DoublePrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new DoublePrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleWrapperValueFacetUsingSemanticsProviderFactory.java
index 318af40..bd8263c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Double> {
if (type != Double.class) {
return;
}
- addFacets(new DoubleWrapperValueSemanticsProvider(holder));
+ addValueFacet(new DoubleWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatPrimitiveValueFacetUsingSemanticsProviderFactory.java
index d5ee117..287eff8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Float> {
if (type != float.class) {
return;
}
- addFacets(new FloatPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new FloatPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatWrapperValueFacetUsingSemanticsProviderFactory.java
index 4ad32c2..11a7fbf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Float> {
if (type != Float.class) {
return;
}
- addFacets(new FloatWrapperValueSemanticsProvider(holder));
+ addValueFacet(new FloatWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueFacetUsingSemanticsProviderFactory.java
index 22d79e1..bf9a055 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueFacetUsingSemanticsProviderFactory.java
@@ -42,7 +42,7 @@ extends ValueFacetUsingSemanticsProviderFactory<BufferedImage> {
if (!BufferedImage.class.isAssignableFrom(type)) {
return;
}
- addFacets(new JavaAwtImageValueSemanticsProvider(holder));
+ addValueFacet(new JavaAwtImageValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntPrimitiveValueFacetUsingSemanticsProviderFactory.java
index a446921..6593a57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Integer> {
if (type != int.class) {
return;
}
- addFacets(new IntPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new IntPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntWrapperValueFacetUsingSemanticsProviderFactory.java
index d5c8bb5..6411911 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Integer> {
if (type != Integer.class) {
return;
}
- addFacets(new IntWrapperValueSemanticsProvider(holder));
+ addValueFacet(new IntWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java
index e44fac9..8adf44e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java
@@ -41,7 +41,7 @@ extends ValueFacetUsingSemanticsProviderFactory<LocalResourcePath> {
if (type != LocalResourcePath.class) {
return;
}
- addFacets(new LocalResourcePathValueSemanticsProvider(holder));
+ addValueFacet(new LocalResourcePathValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongPrimitiveValueFacetUsingSemanticsProviderFactory.java
index db3d584..1800338 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Long> {
if (type != long.class) {
return;
}
- addFacets(new LongPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new LongPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongWrapperValueFacetUsingSemanticsProviderFactory.java
index 0d369d7..153a599 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Long> {
if (type != Long.class) {
return;
}
- addFacets(new LongWrapperValueSemanticsProvider(holder));
+ addValueFacet(new LongWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueFacetUsingSemanticsProviderFactory.java
index 3c47310..1a945fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueFacetUsingSemanticsProviderFactory.java
@@ -41,6 +41,6 @@ extends ValueFacetUsingSemanticsProviderFactory<Markup> {
if (!(Markup.class.isAssignableFrom(type))) {
return;
}
- addFacets(new MarkupValueSemanticsProvider(holder));
+ addValueFacet(new MarkupValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueFacetUsingSemanticsProviderFactory.java
index ef6e09a..c166448 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueFacetUsingSemanticsProviderFactory.java
@@ -41,7 +41,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Password> {
if (type != org.apache.isis.applib.value.Password.class) {
return;
}
- addFacets(new PasswordValueSemanticsProvider(holder));
+ addValueFacet(new PasswordValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortPrimitiveValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortPrimitiveValueFacetUsingSemanticsProviderFactory.java
index 8955be2..1f1d5fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortPrimitiveValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortPrimitiveValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Short> {
if (type != short.class) {
return;
}
- addFacets(new ShortPrimitiveValueSemanticsProvider(holder));
+ addValueFacet(new ShortPrimitiveValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortWrapperValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortWrapperValueFacetUsingSemanticsProviderFactory.java
index cb10822..897c0b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortWrapperValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortWrapperValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Short> {
if (type != Short.class) {
return;
}
- addFacets(new ShortWrapperValueSemanticsProvider(holder));
+ addValueFacet(new ShortWrapperValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueFacetUsingSemanticsProviderFactory.java
index fa6ff82..18a927e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueFacetUsingSemanticsProviderFactory.java
@@ -40,7 +40,7 @@ extends ValueFacetUsingSemanticsProviderFactory<String> {
if (type != String.class) {
return;
}
- addFacets(new StringValueSemanticsProvider(holder));
+ addValueFacet(new StringValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java
index a192c3c..fe64762 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java
@@ -58,7 +58,7 @@ extends ValueFacetUsingSemanticsProviderFactory<T> {
return;
}
val facetHolder = processClassContext.getFacetHolder();
- addFacets(facetFactory.apply(facetHolder));
+ addValueFacet(facetFactory.apply(facetHolder));
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timesql/JavaSqlTimeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timesql/JavaSqlTimeValueFacetUsingSemanticsProviderFactory.java
index 4930d1e..c2f8cc6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timesql/JavaSqlTimeValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timesql/JavaSqlTimeValueFacetUsingSemanticsProviderFactory.java
@@ -44,7 +44,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Time> {
if (type != java.sql.Time.class) {
return;
}
- addFacets(new JavaSqlTimeValueSemanticsProvider(holder));
+ addValueFacet(new JavaSqlTimeValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
index d120892..6fefc64 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
@@ -44,7 +44,7 @@ extends ValueFacetUsingSemanticsProviderFactory<Timestamp> {
if (type != java.sql.Timestamp.class) {
return;
}
- addFacets(new JavaSqlTimeStampValueSemanticsProvider(holder));
+ addValueFacet(new JavaSqlTimeStampValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
index 86717ce..115c97b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
@@ -42,6 +42,6 @@ extends ValueFacetUsingSemanticsProviderFactory<TreeNode> {
if (!TreeNode.class.isAssignableFrom(type)) {
return;
}
- addFacets(new TreeNodeValueSemanticsProvider(holder));
+ addValueFacet(new TreeNodeValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueFacetUsingSemanticsProviderFactory.java
index 48192f5..ccd9268 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueFacetUsingSemanticsProviderFactory.java
@@ -42,7 +42,7 @@ extends ValueFacetUsingSemanticsProviderFactory<URL> {
if (type != java.net.URL.class) {
return;
}
- addFacets(new URLValueSemanticsProvider(holder));
+ addValueFacet(new URLValueSemanticsProvider(holder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
index bf833e4..171ba03 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
@@ -57,7 +57,7 @@ implements URLValueFacet {
try {
return new java.net.URL(entry);
} catch (final MalformedURLException ex) {
- throw new IllegalArgumentException("Not parseable as a URL ('" + entry + "')", ex);
+ throw new IllegalArgumentException("Not parseable as an URL ('" + entry + "')", ex);
}
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacetUsingSemanticsProviderFactory.java
index 2fa239d..ef77897 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueFacetUsingSemanticsProviderFactory.java
@@ -42,7 +42,7 @@ extends ValueFacetUsingSemanticsProviderFactory<UUID> {
if (type != UUID.class) {
return;
}
- addFacets(new UUIDValueSemanticsProvider(holder));
+ addAllFacetsForValueSemantics(new UUIDValueSemantics(), holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemantics.java
new file mode 100644
index 0000000..393f89f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemantics.java
@@ -0,0 +1,76 @@
+/*
+ * 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.value.uuid;
+
+import java.util.UUID;
+
+import org.apache.isis.applib.adapters.AbstractValueSemanticsProvider;
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.commons.internal.base._Strings;
+
+public class UUIDValueSemantics
+extends AbstractValueSemanticsProvider<UUID>
+implements
+ EncoderDecoder<UUID>,
+ Parser<UUID> {
+
+ // -- ENCODER DECODER
+
+ @Override
+ public String toEncodedString(final UUID object) {
+ return object.toString();
+ }
+
+ @Override
+ public UUID fromEncodedString(final String data) {
+ return UUID.fromString(data);
+ }
+
+ // -- PARSER
+
+ @Override
+ public String presentationValue(final Context context, final UUID value) {
+ return value == null ? "" : value.toString();
+ }
+
+ @Override
+ public String parseableTextRepresentation(final Context context, final UUID value) {
+ return value == null ? null : value.toString();
+ }
+
+ @Override
+ public UUID parseTextRepresentation(final Context context, final String text) {
+ final var input = _Strings.blankToNullOrTrim(text);
+ return input!=null
+ ? UUID.fromString(input)
+ : null;
+ }
+
+ @Override
+ public int typicalLength() {
+ return maxLength();
+ }
+
+ @Override
+ public int maxLength() {
+ return 36;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
deleted file mode 100644
index dcdd966..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
+++ /dev/null
@@ -1,91 +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.value.uuid;
-
-import java.util.UUID;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public class UUIDValueSemanticsProvider
-extends ValueSemanticsProviderAndFacetAbstract<UUID>
-implements UUIDValueFacet {
-
- private static final Class<? extends Facet> type() {
- return UUIDValueFacet.class;
- }
-
- public static final int MAX_LENGTH = 36;
- public static final int TYPICAL_LENGTH = MAX_LENGTH;
- private static final UUID DEFAULT_VALUE = null; // no default
-
- public UUIDValueSemanticsProvider(final FacetHolder holder) {
- super(type(), holder, UUID.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
- }
-
- // //////////////////////////////////////////////////////////////////
- // Parser
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected UUID doParse(final Parser.Context context, final String entry) {
- if (entry.trim().equals("")) {
- return null;
- } else {
- return UUID.fromString(entry);
- }
- }
-
- @Override
- public String titleString(final Object object) {
- return object == null ? "" : object.toString();
- }
-
- // //////////////////////////////////////////////////////////////////
- // EncoderDecoder
- // //////////////////////////////////////////////////////////////////
-
- @Override
- public String toEncodedString(final UUID object) {
- return object.toString();
- }
-
- @Override
- public UUID fromEncodedString(final String data) {
- return UUID.fromString(data);
- }
-
- // //////////////////////////////////////////////////////////////////
- // UuidValueFacet
- // //////////////////////////////////////////////////////////////////
-
- @Override
- public UUID uuidValue(final ManagedObject object) {
- return object == null ? null : (UUID) object.getPojo();
- }
-
- @Override
- public ManagedObject createValue(final UUID value) {
- return getObjectManager().adapt(value);
- }
-
-}
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 00d6260..944b0d3 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
@@ -21,16 +21,22 @@ package org.apache.isis.core.metamodel.facets.propparam.decimal;
import java.lang.reflect.Method;
import java.math.BigDecimal;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
+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.MaxFractionalDigitsFacet;
+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.BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation;
+import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation;
+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.value.bigdecimal.BigDecimalValueFacet;
+import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
+import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation;
public class JavaxValidationDigitsAnnotationFacetFactoryTest
extends AbstractFacetFactoryTest {
@@ -50,12 +56,7 @@ extends AbstractFacetFactoryTest {
facetFactory.process(ProcessMethodContext
.forTesting(Order.class, null, method, methodRemover, facetedMethod));
- final Facet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation);
- final BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation annotation = (BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotation) facet;
- assertEquals(18, annotation.getPrecision());
- assertEquals(4, annotation.getScale());
+ assertBigDecimalSemantics(facetedMethod, 18, 4);
}
public void testAnnotationPickedUpOnActionParameter() {
@@ -71,17 +72,32 @@ extends AbstractFacetFactoryTest {
}
final Method method = findMethod(Order.class, "updateCost", new Class[] { BigDecimal.class });
-
-
facetFactory.processParams(new FacetFactory
.ProcessParameterContext(Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, 0, null, facetedMethodParameter));
- final Facet facet = facetedMethodParameter.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation);
- final BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation annotation = (BigDecimalFacetOnParameterFromJavaxValidationDigitsAnnotation) facet;
- assertEquals(18, annotation.getPrecision());
- assertEquals(4, annotation.getScale());
+ assertBigDecimalSemantics(facetedMethodParameter, 18, 4);
+
+ }
+
+ // -- HELPER
+
+ private void assertBigDecimalSemantics(
+ final FacetHolder facetedMethod, final int maxTotalDigits, final int maxFractionalDigits) {
+ if(maxTotalDigits>=0) {
+ final MaxTotalDigitsFacet facet = facetedMethod.getFacet(MaxTotalDigitsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof MaxTotalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+ ||facet instanceof MaxTotalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
+ assertThat(facet.maxTotalDigits(), is(maxTotalDigits));
+ }
+
+ if(maxFractionalDigits>=0) {
+ final MaxFractionalDigitsFacet facet = facetedMethod.getFacet(MaxFractionalDigitsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof MaxFractionalDigitsFacetOnPropertyFromJavaxValidationDigitsAnnotation
+ ||facet instanceof MaxFractionalDigitsFacetOnParameterFromJavaxValidationDigitsAnnotation);
+ assertThat(facet.maxFractionalDigits(), is(maxFractionalDigits));
+ }
}
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
index deac09a..9f00a88 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
@@ -27,14 +27,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemanticsProvider;
+import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemantics;
-public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
+public class BigDecimalValueSemanticsProviderTest
+extends ValueSemanticsProviderAbstractTestCase {
- private BigDecimalValueSemanticsProvider value;
+ private BigDecimalValueSemantics value;
private BigDecimal bigDecimal;
- private FacetHolderAbstract holder;
@Override
@Before
@@ -43,9 +42,8 @@ public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProvider
bigDecimal = new BigDecimal("34132.199");
allowMockAdapterToReturn(bigDecimal);
- holder = FacetHolderAbstract.forTesting(metaModelContext);
- setValue(value = new BigDecimalValueSemanticsProvider(holder));
+ setSemanitcs(value = new BigDecimalValueSemantics());
}
@Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 37b149f..9c459e0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -35,6 +35,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import org.apache.isis.applib.adapters.AbstractValueSemanticsProvider;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.applib.services.iactn.InteractionProvider;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
@@ -60,7 +62,8 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
protected MetaModelContext metaModelContext;
- private ValueSemanticsProviderAndFacetAbstract<?> valueSemanticsProvider;
+ //private ValueSemanticsProviderAndFacetAbstract<?> valueSemanticsProvider;
+ private ValueSemanticsProvider<?> valueSemanticsProvider;
private EncodableFacetUsingEncoderDecoder encodeableFacet;
private ParseableFacetUsingParser parseableFacet;
@@ -107,6 +110,15 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
this.parseableFacet = ParseableFacetUsingParser.create(value, mockFacetHolder);
}
+ protected void setSemanitcs(final AbstractValueSemanticsProvider<?> valueSemantics) {
+ this.valueSemanticsProvider = valueSemantics;
+ this.encodeableFacet = new EncodableFacetUsingEncoderDecoder(
+ valueSemantics.getEncoderDecoder(),
+ mockFacetHolder);
+ this.parseableFacet = ParseableFacetUsingParser.create(valueSemantics.getParser(), mockFacetHolder);
+ }
+
+
protected <T> ValueSemanticsProviderAndFacetAbstract<T> getValue(final Class<T> type) {
return _Casts.uncheckedCast(valueSemanticsProvider);
}
@@ -126,10 +138,17 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
@Test
public void testParseNull() throws Exception {
Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
- try {
- valueSemanticsProvider.parseTextRepresentation(null, null);
- fail();
- } catch (final IllegalArgumentException expected) {
+
+ if(valueSemanticsProvider instanceof ValueSemanticsProviderAndFacetAbstract) {
+
+ try {
+ ((ValueSemanticsProviderAndFacetAbstract<?>)valueSemanticsProvider).parseTextRepresentation(null, null);
+ fail();
+ } catch (final IllegalArgumentException expected) {
+ }
+
+ } else {
+ assertEquals(null, valueSemanticsProvider.getParser().parseTextRepresentation(null, null));
}
}
@@ -137,7 +156,7 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
public void testParseEmptyString() throws Exception {
Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
- final Object newValue = valueSemanticsProvider.parseTextRepresentation(null, "");
+ final Object newValue = valueSemanticsProvider.getParser().parseTextRepresentation(null, "");
assertNull(newValue);
}
@@ -158,6 +177,14 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
@Test
public void testTitleOfForNullObject() {
- assertEquals("", valueSemanticsProvider.presentationValue(null, null));
+
+ if(valueSemanticsProvider instanceof ValueSemanticsProviderAndFacetAbstract) {
+ assertEquals("",
+ ((ValueSemanticsProviderAndFacetAbstract<?>)valueSemanticsProvider)
+ .presentationValue(null, null));
+ } else {
+ assertEquals("", valueSemanticsProvider.getParser().presentationValue(null, null));
+ }
+
}
}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
index 3fe9d50..eb83fff 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
@@ -20,7 +20,7 @@ package org.apache.isis.incubator.viewer.javafx.ui.components.number;
import javax.inject.Inject;
-import org.springframework.core.annotation.Order;
+import org.springframework.util.ClassUtils;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.commons.internal.base._Strings;
@@ -32,13 +32,14 @@ import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentHandlerF
import org.apache.isis.viewer.common.model.binding.NumberConverterForStringComponent;
import org.apache.isis.viewer.common.model.components.UiComponentFactory.ComponentRequest;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
import javafx.scene.Node;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
@org.springframework.stereotype.Component
@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
@@ -47,12 +48,14 @@ import lombok.extern.log4j.Log4j2;
public class NumberFieldFactory implements UiComponentHandlerFx {
@Override
- public boolean isHandling(ComponentRequest request) {
- return request.hasFeatureTypeFacetAnyOf(NumberConverterForStringComponent.getSupportedFacets());
+ public boolean isHandling(final ComponentRequest request) {
+ val type = request.getFeatureTypeSpec().getCorrespondingClass();
+ return Number.class.isAssignableFrom(
+ ClassUtils.resolvePrimitiveIfNecessary(type));
}
@Override
- public Node handle(ComponentRequest request) {
+ public Node handle(final ComponentRequest request) {
val uiComponent = new VBox();
val uiField = _fx.add(uiComponent, new TextField());
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 7c6aa6b..421f42e 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,8 +29,8 @@ 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.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemanticsProvider;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+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;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -38,16 +38,10 @@ import org.apache.isis.core.metamodel.specloader.validator.ValidationFailure;
import org.apache.isis.persistence.jdo.provider.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
import org.apache.isis.persistence.jdo.provider.metamodel.facets.prop.notpersistent.JdoNotPersistentFacet;
-import lombok.val;
-
-
public class BigDecimalInferredFromJdoColumnAnnotationFacetFactory
extends FacetFactoryAbstract
implements MetaModelRefiner {
- private static final int DEFAULT_LENGTH = BigDecimalValueSemanticsProvider.DEFAULT_LENGTH;
- private static final int DEFAULT_SCALE = BigDecimalValueSemanticsProvider.DEFAULT_SCALE;
-
@Inject
public BigDecimalInferredFromJdoColumnAnnotationFacetFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.PROPERTIES_ONLY);
@@ -62,47 +56,19 @@ implements MetaModelRefiner {
final FacetedMethod holder = processMethodContext.getFacetHolder();
- BigDecimalValueFacet existingFacet = holder.getFacet(BigDecimalValueFacet.class);
+ final var jdoColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class);
- val jdoColumnAnnotation = processMethodContext.synthesizeOnMethod(Column.class)
- .orElse(null);
-
- if (jdoColumnAnnotation == null) {
- if(existingFacet != null
- && !existingFacet.getPrecedence().isFallback()) {
- // do nothing
- } else {
- addFacet(new BigDecimalFacetFallback(holder));
- }
- } else {
-
- // obtain the existing facet's length and scale, to use as defaults if none are specified on the @Column
- // this will mean a metamodel validation exception will only be fired later (see #refineMetaModelValidator)
- // if there was an *explicit* value defined on the @Column annotation that is incompatible with existing.
- Integer existingLength = null;
- Integer existingScale = null;
- if(existingFacet != null
- && !existingFacet.getPrecedence().isFallback()) {
- existingLength = existingFacet.getPrecision();
- existingScale = existingFacet.getScale();
- }
-
- Integer length = valueElseDefaults(jdoColumnAnnotation.length(), existingLength, DEFAULT_LENGTH);
- Integer scale = valueElseDefaults(jdoColumnAnnotation.scale(), existingScale, DEFAULT_SCALE);
- addFacet(new BigDecimalFacetInferredFromJdoColumn(holder, length, scale));
- }
- }
+ addFacetIfPresent(
+ MaxTotalDigitsFacetInferredFromJdoColumn
+ .create(jdoColumnIfAny, holder));
- private static final Integer valueElseDefaults(final int value, final Integer underlying, int defaultVal) {
- return value != -1
- ? value
- : underlying != null
- ? underlying
- : defaultVal;
+ addFacetIfPresent(
+ MaxFractionalDigitsFacetInferredFromJdoColumn
+ .create(jdoColumnIfAny, holder));
}
@Override
- public void refineProgrammingModel(ProgrammingModel programmingModel) {
+ public void refineProgrammingModel(final ProgrammingModel programmingModel) {
programmingModel.addVisitingValidatorSkipManagedBeans(spec->{
// only consider persistent entities
@@ -121,16 +87,29 @@ implements MetaModelRefiner {
});
}
- private static void validateBigDecimalValueFacet(ObjectAssociation association) {
+ private static void validateBigDecimalValueFacet(final ObjectAssociation association) {
+
+ association.lookupFacet(MaxTotalDigitsFacet.class)
+ .map(MaxTotalDigitsFacet::getSharedFacetRankingElseFail)
+ .ifPresent(facetRanking->facetRanking
+ .visitTopRankPairsSemanticDiffering(MaxTotalDigitsFacet.class, (a, b)->{
+
+ ValidationFailure.raiseFormatted(
+ association,
+ "%s: inconsistent MaxTotalDigits semantics specified in %s and %s.",
+ association.getFeatureIdentifier().toString(),
+ a.getClass().getSimpleName(),
+ b.getClass().getSimpleName());
+ }));
- association.lookupFacet(BigDecimalValueFacet.class)
- .map(BigDecimalValueFacet::getSharedFacetRankingElseFail)
+ association.lookupFacet(MaxFractionalDigitsFacet.class)
+ .map(MaxFractionalDigitsFacet::getSharedFacetRankingElseFail)
.ifPresent(facetRanking->facetRanking
- .visitTopRankPairsSemanticDiffering(BigDecimalValueFacet.class, (a, b)->{
+ .visitTopRankPairsSemanticDiffering(MaxFractionalDigitsFacet.class, (a, b)->{
ValidationFailure.raiseFormatted(
association,
- "%s: inconsistent BigDecimalValue semantics specified in %s and %s.",
+ "%s: inconsistent MaxFractionalDigits semantics specified in %s and %s.",
association.getFeatureIdentifier().toString(),
a.getClass().getSimpleName(),
b.getClass().getSimpleName());
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java
similarity index 54%
copy from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java
copy to persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java
index 71dc240..fd732ee 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxFractionalDigitsFacetInferredFromJdoColumn.java
@@ -18,14 +18,32 @@
*/
package org.apache.isis.persistence.jdo.metamodel.facets.prop.column;
+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.MaxLengthFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacetAbstract;
+public class MaxFractionalDigitsFacetInferredFromJdoColumn
+extends MaxFractionalDigitsFacetAbstract {
-public class MaxLengthFacetDerivedFromJdoColumn extends MaxLengthFacetAbstract {
+ public static Optional<MaxFractionalDigitsFacet> create(
+ final Optional<Column> jdoColumnIfAny,
+ final FacetHolder holder) {
+
+ return jdoColumnIfAny
+ .filter(jdoColumn->jdoColumn.scale()>=0)
+ .map(jdoColumn->{
+ return new MaxFractionalDigitsFacetInferredFromJdoColumn(
+ jdoColumn.scale(), holder);
+ });
+ }
- public MaxLengthFacetDerivedFromJdoColumn(final Integer length, final FacetHolder holder) {
- super(length, holder);
+ private MaxFractionalDigitsFacetInferredFromJdoColumn(
+ final int maxFractionalDigits, final FacetHolder holder) {
+ super(maxFractionalDigits, holder);
}
}
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
index bed5234..fee1f90 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -40,7 +40,6 @@ import org.apache.isis.persistence.jdo.provider.metamodel.facets.prop.notpersist
import lombok.val;
-
public class MaxLengthDerivedFromJdoColumnAnnotationFacetFactory
extends FacetFactoryAbstract
implements MetaModelRefiner {
@@ -49,7 +48,6 @@ implements MetaModelRefiner {
public MaxLengthDerivedFromJdoColumnAnnotationFacetFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.PROPERTIES_ONLY);
- this.jdoFacetContext = jdoFacetContext;
}
@Override
@@ -61,26 +59,16 @@ implements MetaModelRefiner {
return;
}
-
if(String.class != processMethodContext.getMethod().getReturnType()) {
return;
}
- val jdoColumnAnnotation = processMethodContext.synthesizeOnMethod(Column.class)
- .orElse(null);
-
- if (jdoColumnAnnotation==null) {
- return;
- }
- if(jdoColumnAnnotation.length() == -1) {
- return;
- }
+ val jdoColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class);
val facetHolder = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(
- new MaxLengthFacetDerivedFromJdoColumn(
- jdoColumnAnnotation.length(),
- facetHolder));
+ FacetUtil.addFacetIfPresent(
+ MaxTotalDigitsFacetInferredFromJdoColumn
+ .create(jdoColumnIfAny, facetHolder));
}
@Override
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java
index 71dc240..8f3c6ba 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxLengthFacetDerivedFromJdoColumn.java
@@ -18,14 +18,31 @@
*/
package org.apache.isis.persistence.jdo.metamodel.facets.prop.column;
+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.MaxLengthFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacetAbstract;
+public class MaxLengthFacetDerivedFromJdoColumn
+extends MaxLengthFacetAbstract {
-public class MaxLengthFacetDerivedFromJdoColumn extends MaxLengthFacetAbstract {
+ public static Optional<MaxLengthFacet> create(
+ final Optional<Column> jdoColumnIfAny,
+ final FacetHolder holder) {
- public MaxLengthFacetDerivedFromJdoColumn(final Integer length, final FacetHolder holder) {
- super(length, holder);
+ return jdoColumnIfAny
+ .map(jdoColumn->
+ new MaxLengthFacetDerivedFromJdoColumn(
+ jdoColumn.length(), holder));
}
+ private MaxLengthFacetDerivedFromJdoColumn(
+ final int maxLength, final FacetHolder holder) {
+ super(maxLength, holder);
+ }
+
+
}
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJdoColumn.java
similarity index 52%
rename from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java
rename to persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJdoColumn.java
index 04fe0d9..bc6268c 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MaxTotalDigitsFacetInferredFromJdoColumn.java
@@ -18,18 +18,32 @@
*/
package org.apache.isis.persistence.jdo.metamodel.facets.prop.column;
+import java.util.Optional;
+
+import javax.jdo.annotations.Column;
+
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemanticsProvider;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacetAbstract;
+
+public class MaxTotalDigitsFacetInferredFromJdoColumn
+extends MaxTotalDigitsFacetAbstract {
-public class BigDecimalFacetFallback
-extends BigDecimalValueFacetAbstract {
+ public static Optional<MaxTotalDigitsFacet> create(
+ final Optional<Column> jdoColumnIfAny,
+ final FacetHolder holder) {
- public BigDecimalFacetFallback(final FacetHolder holder) {
- super(
- BigDecimalValueSemanticsProvider.DEFAULT_LENGTH,
- BigDecimalValueSemanticsProvider.DEFAULT_SCALE,
- holder, Precedence.FALLBACK);
+ return jdoColumnIfAny
+ .filter(jdoColumn->jdoColumn.length()>=0)
+ .map(jdoColumn->
+ new MaxTotalDigitsFacetInferredFromJdoColumn(
+ jdoColumn.length(), holder));
}
+ private MaxTotalDigitsFacetInferredFromJdoColumn(
+ final int maxTotalDigits, final FacetHolder holder) {
+ super(maxTotalDigits, 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 146fb7c..b2ccfcf 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
@@ -24,10 +24,11 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
-import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxTotalDigitsFacet;
import org.apache.isis.persistence.jdo.metamodel.testing.AbstractFacetFactoryTest;
import lombok.val;
@@ -66,11 +67,7 @@ extends AbstractFacetFactoryTest {
facetFactory.process(ProcessMethodContext
.forTesting(cls, null, method, methodRemover, facetedMethod));
- final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetInferredFromJdoColumn);
- assertThat(facet.getPrecision(), is(12));
- assertThat(facet.getScale(), is(3));
+ assertBigDecimalSemantics(facetedMethod, 12, 3);
}
public void testAnnotationDefaultsLengthIfMissing() throws Exception {
@@ -79,10 +76,7 @@ extends AbstractFacetFactoryTest {
facetFactory.process(ProcessMethodContext
.forTesting(cls, null, method, methodRemover, facetedMethod));
- final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetInferredFromJdoColumn);
- assertThat(facet.getPrecision(), is(18));
+ assertBigDecimalSemantics(facetedMethod, -1, 3);
}
public void testAnnotationDefaultsScaleIfMissing() throws Exception {
@@ -91,10 +85,7 @@ extends AbstractFacetFactoryTest {
facetFactory.process(ProcessMethodContext
.forTesting(cls, null, method, methodRemover, facetedMethod));
- final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetInferredFromJdoColumn);
- assertThat(facet.getScale(), is(2));
+ assertBigDecimalSemantics(facetedMethod, 12, -1);
}
public void testNoFacetIfPropertyTypeIsNotBigDecimal() throws Exception {
@@ -104,19 +95,30 @@ extends AbstractFacetFactoryTest {
facetFactory.process(ProcessMethodContext
.forTesting(cls, null, method, methodRemover, facetedMethod));
- final Facet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNull(facet);
+ assertBigDecimalSemantics(facetedMethod, -1, -1);
}
- public void testFallbackFacetIfPropertyIsNotAnnotated() throws Exception {
-
- final Class<?> cls = SimpleObjectWithBigDecimalColumnAnnotations.class;
- final Method method = cls.getMethod("getBigDecimalPropertyWithoutColumnAnnotation");
- facetFactory.process(ProcessMethodContext
- .forTesting(cls, null, method, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof BigDecimalFacetFallback);
+ // -- HELPER
+
+ private void assertBigDecimalSemantics(
+ final FacetedMethod facetedMethod, final int maxTotalDigits, final int maxFractionalDigits) {
+ if(maxTotalDigits>=0) {
+ final MaxTotalDigitsFacet facet = facetedMethod.getFacet(MaxTotalDigitsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof MaxTotalDigitsFacetInferredFromJdoColumn);
+ assertThat(facet.maxTotalDigits(), is(maxTotalDigits));
+ } else {
+ assertNull(facetedMethod.getFacet(MaxTotalDigitsFacet.class));
+ }
+
+ if(maxFractionalDigits>=0) {
+ final MaxFractionalDigitsFacet facet = facetedMethod.getFacet(MaxFractionalDigitsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof MaxFractionalDigitsFacetInferredFromJdoColumn);
+ assertThat(facet.maxFractionalDigits(), is(maxFractionalDigits));
+ } else {
+ assertNull(facetedMethod.getFacet(MaxFractionalDigitsFacet.class));
+ }
}
+
}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
index 0d00b86..b557314 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
@@ -34,20 +34,20 @@ public interface BindingConverter<T> {
ObjectSpecification getValueSpecification();
- default T unwrap(ManagedObject object) {
+ default T unwrap(final ManagedObject object) {
return _Casts.uncheckedCast(ManagedObjects.UnwrapUtil.single(object));
}
- default ManagedObject wrap(T pojo) {
+ default ManagedObject wrap(final T pojo) {
return ManagedObject.of(getValueSpecification(), pojo);
}
- default Optional<? extends Facet> lookupFacet(final @NonNull Class<? extends Facet> facetType) {
+ default <X extends Facet> Optional<X> lookupFacet(final @NonNull Class<X> facetType) {
return Optional.ofNullable(getValueSpecification().getFacet(facetType));
}
default Optional<? extends Facet> lookupFacetOneOf(
- @NonNull Can<Class<? extends Facet>> facetTypes) {
+ @NonNull final Can<Class<? extends Facet>> facetTypes) {
return facetTypes.stream()
.map(getValueSpecification()::getFacet)
.filter(_NullSafe::isPresent)
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
index 565667c..49fce46 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
@@ -20,38 +20,27 @@ package org.apache.isis.viewer.common.model.binding;
import java.util.Optional;
-import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacet;
-import org.apache.isis.core.metamodel.facets.value.bytes.ByteValueFacet;
-import org.apache.isis.core.metamodel.facets.value.doubles.DoubleFloatingPointValueFacet;
-import org.apache.isis.core.metamodel.facets.value.floats.FloatingPointValueFacet;
-import org.apache.isis.core.metamodel.facets.value.integer.IntegerValueFacet;
-import org.apache.isis.core.metamodel.facets.value.longs.LongValueFacet;
-import org.apache.isis.core.metamodel.facets.value.shortint.ShortValueFacet;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
import lombok.val;
-public final class NumberConverterForStringComponent implements BindingConverter<String> {
+public final class NumberConverterForStringComponent
+implements BindingConverter<String> {
@Getter(onMethod_ = {@Override})
private final ObjectSpecification valueSpecification;
- private final ValueSemanticsProviderAndFacetAbstract<? extends Number> valueFacet;
+ private final ParseableFacet parsableFacet;
@SuppressWarnings("unchecked")
public NumberConverterForStringComponent(final ObjectSpecification valueSpecification) {
this.valueSpecification = valueSpecification;
- this.valueFacet = lookupFacetOneOf(getSupportedFacets())
- .map(ValueSemanticsProviderAndFacetAbstract.class::cast)
- .orElseThrow(()->_Exceptions.noSuchElement("missing 'number' value facet"));
+ this.parsableFacet = lookupFacet(ParseableFacet.class)
+ .orElseThrow(()->_Exceptions.noSuchElement("missing 'ParseableFacet'"));
}
@Override
@@ -62,29 +51,17 @@ public final class NumberConverterForStringComponent implements BindingConverter
return ManagedObject.empty(getValueSpecification());
}
- val number = valueFacet.parseTextRepresentation(null, stringifiedNumber);
+ val number = //parsableFacet.parseTextRepresentation(null, stringifiedNumber);
+ 0;
return ManagedObject.of(getValueSpecification(), number);
}
@Override
public String unwrap(final ManagedObject object) {
- val number = (Number) ManagedObjects.UnwrapUtil.single(object);
- return valueFacet.parseableTextRepresentation(null, number);
+ //val number = (Number) ManagedObjects.UnwrapUtil.single(object);
+ return "0";//parsableFacet.parseableTextRepresentation(null, number);
}
-
- // for performance reasons in order of likelihood (just guessing)
- @Getter
- private final static Can<Class<? extends Facet>> supportedFacets = Can.of(
- IntegerValueFacet.class,
- DoubleFloatingPointValueFacet.class,
- ByteValueFacet.class,
- LongValueFacet.class,
- BigIntegerValueFacet.class,
- BigDecimalValueFacet.class,
- ShortValueFacet.class,
- FloatingPointValueFacet.class);
-
@Override
public String toString(final String value) {
return value; // identity
@@ -97,8 +74,9 @@ public final class NumberConverterForStringComponent implements BindingConverter
@Override
public Optional<String> tryParse(final String stringifiedValue) {
- return valueFacet.tryParseTextEntry(null, stringifiedValue)
- .map(Exception::getMessage); // TODO should be passed through the ExceptionRecognizer
+ return Optional.empty();
+// parsableFacet.tryParseTextEntry(null, stringifiedValue)
+// .map(Exception::getMessage); // TODO should be passed through the ExceptionRecognizer
}
}
\ No newline at end of file
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 807d126..012ad9c 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
@@ -23,8 +23,9 @@ import java.math.BigDecimal;
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.MaxFractionalDigitsFacet;
+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.facets.value.bigdecimal.BigDecimalValueFacet;
import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
@@ -56,8 +57,9 @@ public interface ScalarUiModel {
* @see #getLength()
*/
default Integer getLength() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getPrecision(): null;
+ return getMetaModel().lookupFacet(MaxTotalDigitsFacet.class)
+ .map(MaxTotalDigitsFacet::maxTotalDigits)
+ .orElse(null);
}
/**
@@ -66,8 +68,9 @@ public interface ScalarUiModel {
* @see #getScale()
*/
default Integer getScale() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getScale(): null;
+ return getMetaModel().lookupFacet(MaxFractionalDigitsFacet.class)
+ .map(MaxFractionalDigitsFacet::maxFractionalDigits)
+ .orElse(null);
}
default int getTypicalLength() {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
index 6444fd8..707c8e2 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
@@ -190,10 +190,6 @@ public class JsonValueEncoder {
return adapter != null? adapter.getPojo(): NullNode.getInstance();
}
-// ManagedObject adapterFor(Object pojo) {
-// return objectAdapterProvider.adapterFor(pojo);
-// }
-
// -- NESTED TYPE DECLARATIONS
public static class ExpectedStringRepresentingValueException extends IllegalArgumentException {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
index 99de803..897bcf8 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
@@ -41,9 +41,9 @@ import lombok.val;
public class ObjectAndActionInvocation {
public static ObjectAndActionInvocation of(
- @NonNull ActionInteraction.Result actionInteractionResult,
- @NonNull JsonRepresentation argsJsonRepr,
- @NonNull ActionResultReprRenderer.SelfLink selfLink) {
+ @NonNull final ActionInteraction.Result actionInteractionResult,
+ @NonNull final JsonRepresentation argsJsonRepr,
+ @NonNull final ActionResultReprRenderer.SelfLink selfLink) {
return new ObjectAndActionInvocation(
actionInteractionResult.getManagedAction().getOwner(),
actionInteractionResult.getManagedAction().getAction(),
@@ -72,7 +72,12 @@ public class ObjectAndActionInvocation {
return ActionResultRepresentation.ResultType.VOID;
}
- if (isVector(returnedAdapter.getSpecification())) {
+ //FIXME following decision tree should not depend on the returned runtime types
+ // but on the returnTypeSpec,
+ // which is introspected eagerly on application start and should be the binding contract
+ val actualReturnTypeSpec = returnedAdapter.getSpecification();
+
+ if (isVector(actualReturnTypeSpec)) {
// though not strictly required, try to be consistent: empty list vs populated list
if(elementAdapters.get().isEmpty()) {
@@ -93,7 +98,7 @@ public class ObjectAndActionInvocation {
: ActionResultRepresentation.ResultType.SCALAR_VALUES;
}
- if (isScalarValue(returnedAdapter.getSpecification())) {
+ if (isScalarValue(actualReturnTypeSpec)) {
return ActionResultRepresentation.ResultType.SCALAR_VALUE;
}
@@ -126,11 +131,11 @@ public class ObjectAndActionInvocation {
//TODO[2449] need to check whether that strategy holds consistently
private static boolean isScalarValue(final @NonNull ObjectSpecification spec) {
- return spec.getFacet(EncodableFacet.class)!=null;
+ return spec.containsFacet(EncodableFacet.class);
}
private static boolean isVector(final @NonNull ObjectSpecification spec) {
- return spec.getFacet(CollectionFacet.class)!=null;
+ return spec.containsFacet(CollectionFacet.class);
}
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 eaa2589..e1f6fa6 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
@@ -20,17 +20,19 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import com.fasterxml.jackson.databind.node.NullNode;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.collections._Lists;
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.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxFractionalDigitsFacet;
+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;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -85,7 +87,7 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
private Object addValue(final LinkFollowSpecs linkFollower) {
val valueAdapterIfAny = objectMember.get(objectAdapter, getInteractionInitiatedBy());
- // use the runtime type if we have a value, else the compile time type of the member otherwise
+ // use the runtime type if we have a value, otherwise the compile time type of the member
val spec = valueAdapterIfAny != null
? valueAdapterIfAny.getSpecification()
: objectMember.getSpecification();
@@ -93,27 +95,27 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
val valueFacet = spec.getFacet(ValueFacet.class);
if (valueFacet != null) {
String format = null;
- final Class<?> specClass = spec.getCorrespondingClass();
- if(specClass == java.math.BigDecimal.class) {
+ final Class<?> valueType = spec.getCorrespondingClass();
+ if(valueType == java.math.BigDecimal.class) {
// look for facet on member, else on the value's spec
- final BigDecimalValueFacet bigDecimalValueFacet =
- getFacet(BigDecimalValueFacet.class,
- objectMember,
- valueAdapterIfAny != null? valueAdapterIfAny.getSpecification(): null);
- if(bigDecimalValueFacet != null) {
- final Integer precision = bigDecimalValueFacet.getPrecision();
- final Integer scale = bigDecimalValueFacet.getScale();
- format = String.format("big-decimal(%d,%d)", precision, scale);
- }
- } else if(specClass == java.math.BigInteger.class) {
+
+ final var facetHolders = Can.<FacetHolder>of(
+ objectMember,
+ valueAdapterIfAny != null ? valueAdapterIfAny.getSpecification() : null);
+
+ final int totalDigits = lookupFacet(MaxTotalDigitsFacet.class, facetHolders)
+ .map(MaxTotalDigitsFacet::maxTotalDigits)
+ .orElse(-1);
+
+ final int scale = lookupFacet(MaxFractionalDigitsFacet.class, facetHolders)
+ .map(MaxFractionalDigitsFacet::maxFractionalDigits)
+ .orElse(-1);
+
+ format = String.format("big-decimal(%d,%d)", totalDigits, scale);
+
+ } else if(valueType == java.math.BigInteger.class) {
// look for facet on member, else on the value's spec
- final BigIntegerValueFacet bigIntegerValueFacet =
- getFacet(BigIntegerValueFacet.class,
- objectMember,
- valueAdapterIfAny != null? valueAdapterIfAny.getSpecification(): null);
- if(bigIntegerValueFacet != null) {
- format = String.format("big-integer");
- }
+ format = String.format("big-integer");
}
return jsonValueEncoder.appendValueAndFormat(valueAdapterIfAny, spec, representation, format, resourceContext.suppressMemberExtensions());
}
@@ -157,17 +159,16 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
&& Objects.equals(defaultViewFacet.value(), "table");
}
- private static <T extends Facet> T getFacet(final Class<T> facetType, final FacetHolder... holders) {
+ private static <T extends Facet> Optional<T> lookupFacet(
+ final Class<T> facetType,
+ final Can<FacetHolder> holders) {
for (FacetHolder holder : holders) {
- if(holder == null) {
- continue;
- }
final T facet = holder.getFacet(facetType);
if(facet != null) {
- return facet;
+ return Optional.of(facet);
}
}
- return null;
+ return Optional.empty();
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
index 8289f37..730db31 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
@@ -39,7 +39,8 @@ extends ReprRendererAbstract<ManagedObject> {
final IResourceContext resourceContext,
final LinkFollowSpecs linkFollower,
final JsonRepresentation representation) {
- super(resourceContext, linkFollower, null, representation); // null for representationType (there is none)
+ // null for representationType (there is none)
+ super(resourceContext, linkFollower, null, representation);
}
/**
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummaryFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummaryFactory.java
index d95bcb9..afce4a5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummaryFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummaryFactory.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.viewer.wicket.ui.components.collectioncontents.summary;
+import java.math.BigDecimal;
import java.util.function.Predicate;
import java.util.stream.Stream;
@@ -27,7 +28,6 @@ import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.resource.CssResourceReference;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.MixedIn;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -40,15 +40,18 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
/**
* {@link ComponentFactory} for {@link CollectionContentsAsSummary}.
*/
-public class CollectionContentsAsSummaryFactory extends ComponentFactoryAbstract implements CollectionContentsAsFactory {
+public class CollectionContentsAsSummaryFactory
+extends ComponentFactoryAbstract
+implements CollectionContentsAsFactory {
private static final long serialVersionUID = 1L;
private static final String NAME = "summary";
static final Predicate<ObjectAssociation> OF_TYPE_BIGDECIMAL = (final ObjectAssociation objectAssoc) -> {
- final ObjectSpecification objectSpec = objectAssoc.getSpecification();
- return objectSpec.containsNonFallbackFacet(BigDecimalValueFacet.class);
+ final var objectSpec = objectAssoc.getSpecification();
+ return objectSpec.isValue()
+ && objectSpec.getCorrespondingClass().equals(BigDecimal.class);
};
// //////////////////////////////////////
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 bc1e2e6..969b07d 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
@@ -25,8 +25,8 @@ import org.apache.wicket.util.convert.converter.BigIntegerConverter;
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.MaxFractionalDigitsFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverterForJavaSqlDate;
@@ -108,11 +108,10 @@ public class IsisConverterLocator {
return _Casts.uncheckedCast(new BigIntegerConverter());
}
if (java.math.BigDecimal.class == correspondingClass) {
- final BigDecimalValueFacet facet = objectSpecification.getFacet(BigDecimalValueFacet.class);
- Integer scale = null;
- if (facet != null) {
- scale = facet.getScale();
- }
+ final int scale = objectSpecification
+ .lookupFacet(MaxFractionalDigitsFacet.class)
+ .map(MaxFractionalDigitsFacet::maxFractionalDigits)
+ .orElse(-1);
return _Casts.uncheckedCast(new BigDecimalConverterWithScale(scale).forViewMode());
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
index 6356739..9d4e8c1 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
@@ -43,7 +43,7 @@ public class BigDecimalConverterWithScale extends BigDecimalConverter {
/**
* For {@link JavaMathBigDecimalPanelFactory} to call, so that there is a single instance.
*/
- static AbstractNumberConverter<BigDecimal> newThreadSafeConverter(Integer scale) {
+ static AbstractNumberConverter<BigDecimal> newThreadSafeConverter(final Integer scale) {
return new BigDecimalConverterWithScale(scale);
}
@@ -51,14 +51,17 @@ public class BigDecimalConverterWithScale extends BigDecimalConverter {
private final Integer scale;
public BigDecimalConverterWithScale(final Integer scale) {
- this.scale = scale;
+ this.scale = scale!=null
+ && scale>=0
+ ? scale
+ : null;
}
/**
* Disables thousands separator grouping.
*/
@Override
- protected NumberFormat newNumberFormat(Locale locale) {
+ protected NumberFormat newNumberFormat(final Locale locale) {
NumberFormat numberFormat = NumberFormat.getInstance(locale);
numberFormat.setGroupingUsed(false);
return numberFormat;
@@ -80,7 +83,7 @@ public class BigDecimalConverterWithScale extends BigDecimalConverter {
}
@Override
- public BigDecimal convertToObject(String valueStr, Locale locale) throws ConversionException {
+ public BigDecimal convertToObject(final String valueStr, final Locale locale) throws ConversionException {
DecimalFormat numberFormat = (DecimalFormat) getNumberFormat(locale);
char groupingSeparator = numberFormat.getDecimalFormatSymbols().getGroupingSeparator();
@@ -120,7 +123,7 @@ public class BigDecimalConverterWithScale extends BigDecimalConverter {
return new BigDecimalConverterWithScale(this.scale){
private static final long serialVersionUID = 1L;
@Override
- public String convertToString(BigDecimal value, Locale locale) {
+ public String convertToString(final BigDecimal value, final Locale locale) {
NumberFormat fmt = BigDecimalConverterWithScale.this.getNumberFormat(locale);
fmt.setGroupingUsed(true);// re-enable for view mode
return fmt.format(value);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 12c47c1..433c0f8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -69,8 +69,8 @@ public class EntityPage extends PageAbstract {
* Specifically handled by <code>IsisWicketApplication#newPageFactory()</code>
*/
public static EntityPage bookmarked(
- IsisAppCommonContext commonContext,
- PageParameters pageParameters) {
+ final IsisAppCommonContext commonContext,
+ final PageParameters pageParameters) {
val entityModel = createEntityModel(commonContext, pageParameters);
return new EntityPage(pageParameters, entityModel);
@@ -84,8 +84,8 @@ public class EntityPage extends PageAbstract {
* @return An EntityModel for the requested OID
*/
private static EntityModel createEntityModel(
- IsisAppCommonContext commonContext,
- PageParameters parameters) {
+ final IsisAppCommonContext commonContext,
+ final PageParameters parameters) {
String oid = EntityModel.oidStr(parameters);
if (Strings.isEmpty(oid)) {
@@ -102,15 +102,15 @@ public class EntityPage extends PageAbstract {
* Ensures that any exception that might have occurred already (eg from an action invocation) is shown.
*/
public EntityPage(
- IsisAppCommonContext commonContext,
- ManagedObject adapter) {
+ final IsisAppCommonContext commonContext,
+ final ManagedObject adapter) {
this(PageParametersUtils.newPageParameters(), newEntityModel(commonContext, adapter));
}
private static EntityModel newEntityModel(
- IsisAppCommonContext commonContext,
- ManagedObject adapter) {
+ final IsisAppCommonContext commonContext,
+ final ManagedObject adapter) {
val entityModel = EntityModel.ofAdapter(commonContext, adapter);
return entityModel;
@@ -133,6 +133,7 @@ public class EntityPage extends PageAbstract {
if(!isShowBreadcrumbs()) {
return;
}
+
final BreadcrumbModelProvider session = (BreadcrumbModelProvider) getSession();
final BreadcrumbModel breadcrumbModel = session.getBreadcrumbModel();
breadcrumbModel.visited(entityModel);
@@ -145,7 +146,7 @@ public class EntityPage extends PageAbstract {
}
@Override
- public void renderHead(IHeaderResponse response) {
+ public void renderHead(final IHeaderResponse response) {
super.renderHead(response);
response.render(CssHeaderItem.forReference(WHERE_AM_I_CSS));
}
@@ -214,8 +215,8 @@ public class EntityPage extends PageAbstract {
}
protected void addWhereAmIIfShown(
- WebMarkupContainer entityPageContainer,
- WhereAmIHelper whereAmIModel) {
+ final WebMarkupContainer entityPageContainer,
+ final WhereAmIHelper whereAmIModel) {
val whereAmIContainer = new WebMarkupContainer("whereAmI-container");
entityPageContainer.addOrReplace(whereAmIContainer);