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/18 11:12:39 UTC

[isis] branch master updated: ISIS-2871: Spring managed value semantics for BigInteger

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 f6cb730  ISIS-2871: Spring managed value semantics for BigInteger
f6cb730 is described below

commit f6cb730a4bd6b4adc8dcd089fc5c5eed40f99a7a
Author: andi-huber <ah...@apache.org>
AuthorDate: Sat Sep 18 13:12:28 2021 +0200

    ISIS-2871: Spring managed value semantics for BigInteger
---
 .../core/metamodel/IsisModuleCoreMetamodel.java    |   2 +
 .../value/bigdecimal/BigDecimalValueSemantics.java |   3 -
 .../value/biginteger/BigIntegerValueFacet.java     |  25 -----
 ...gerValueFacetUsingSemanticsProviderFactory.java |  47 ----------
 .../value/biginteger/BigIntegerValueSemantics.java |  91 +++++++++++++++++++
 .../BigIntegerValueSemanticsProvider.java          | 101 ---------------------
 .../dflt/ProgrammingModelFacetsJava11.java         |   2 -
 .../facets/param/name/ParameterNameFacetTest.java  |   2 +-
 .../value/BigIntValueSemanticsProviderTest.java    |  32 ++-----
 9 files changed, 104 insertions(+), 201 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
index 69f75e4..4413849 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeMalfo
 import org.apache.isis.core.metamodel.facets.schema.IsisSchemaMetaModelRefiner;
 import org.apache.isis.core.metamodel.facets.schema.IsisSchemaValueTypeProvider;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemantics;
+import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueSemantics;
 import org.apache.isis.core.metamodel.facets.value.blobs.BlobValueSemantics;
 import org.apache.isis.core.metamodel.facets.value.booleans.BooleanValueSemantics;
 import org.apache.isis.core.metamodel.facets.value.clobs.ClobValueSemantics;
@@ -93,6 +94,7 @@ import org.apache.isis.core.security.IsisModuleCoreSecurity;
         // Value Semantics (built-in defaults)
         BooleanValueSemantics.class,
         BigDecimalValueSemantics.class,
+        BigIntegerValueSemantics.class,
         StringValueSemantics.class,
         PasswordValueSemantics.class,
         BufferedImageValueSemantics.class,
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
index 9bf1be3..4250183 100644
--- 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
@@ -43,9 +43,6 @@ implements
     Parser<BigDecimal>,
     Renderer<BigDecimal> {
 
-    public static final int DEFAULT_LENGTH = 18;
-    public static final int DEFAULT_SCALE = 2;
-
     @Override
     public BigDecimal getDefaultValue() {
         return BigDecimal.ZERO;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacet.java
deleted file mode 100644
index e4d4ce3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacet.java
+++ /dev/null
@@ -1,25 +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.biginteger;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-
-public interface BigIntegerValueFacet extends Facet {
-
-}
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
deleted file mode 100644
index efeef09..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,47 +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.biginteger;
-
-import java.math.BigInteger;
-
-import javax.inject.Inject;
-
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class BigIntegerValueFacetUsingSemanticsProviderFactory
-extends ValueFacetUsingSemanticsProviderFactory<BigInteger> {
-
-    @Inject
-    public BigIntegerValueFacetUsingSemanticsProviderFactory(final MetaModelContext mmc) {
-        super(mmc);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Class<?> type = processClassContext.getCls();
-        final FacetHolder holder = processClassContext.getFacetHolder();
-        if (type != BigInteger.class) {
-            return;
-        }
-        addValueFacet(new BigIntegerValueSemanticsProvider(holder));
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemantics.java
new file mode 100644
index 0000000..13cfacb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemantics.java
@@ -0,0 +1,91 @@
+/*
+ *  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.biginteger;
+
+import java.math.BigInteger;
+
+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.adapters.Renderer;
+import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
+import org.apache.isis.commons.internal.base._Strings;
+
+public class BigIntegerValueSemantics
+extends AbstractValueSemanticsProvider<BigInteger>
+implements
+    DefaultsProvider<BigInteger>,
+    EncoderDecoder<BigInteger>,
+    Parser<BigInteger>,
+    Renderer<BigInteger> {
+
+    @Override
+    public BigInteger getDefaultValue() {
+        return BigInteger.ZERO;
+    }
+
+    // -- ENCODER DECODER
+
+    @Override
+    public String toEncodedString(final BigInteger bigInt) {
+        return bigInt.toString();
+    }
+
+    @Override
+    public BigInteger fromEncodedString(final String data) {
+        return new BigInteger(data);
+    }
+
+    // -- RENDERER
+
+    @Override
+    public String presentationValue(final Context context, final BigInteger value) {
+        return render(value, getNumberFormat(context)::format);
+    }
+
+    // -- PARSER
+
+    @Override
+    public String parseableTextRepresentation(final Context context, final BigInteger value) {
+        return value==null
+                ? null
+                : getNumberFormat(context)
+                    .format(value);
+    }
+
+    @Override
+    public BigInteger parseTextRepresentation(final Context context, final String text) {
+        final var input = _Strings.blankToNullOrTrim(text);
+        if(input==null) {
+            return null;
+        }
+        try {
+            return new BigInteger(input);
+        } catch (final NumberFormatException e) {
+            throw new TextEntryParseException("Not an integer " + input, e);
+        }
+    }
+
+    @Override
+    public int typicalLength() {
+        return 10;
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
deleted file mode 100644
index 13479a8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
+++ /dev/null
@@ -1,101 +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.biginteger;
-
-import java.math.BigInteger;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Locale;
-import java.util.function.BiConsumer;
-
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
-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 BigIntegerValueSemanticsProvider
-extends ValueSemanticsProviderAndFacetAbstract<BigInteger>
-implements BigIntegerValueFacet {
-
-    private static final int TYPICAL_LENGTH = 10;
-
-    private static Class<? extends Facet> type() {
-        return BigIntegerValueFacet.class;
-    }
-
-    private static final BigInteger DEFAULT_VALUE = BigInteger.valueOf(0);
-
-    private final NumberFormat format;
-
-    public BigIntegerValueSemanticsProvider(final FacetHolder holder) {
-
-        super(type(), holder, BigInteger.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        final String formatRequired = getConfiguration().getValueTypes().getJavaMath().getBigInteger().getFormat();
-
-        NumberFormat result;
-        if (formatRequired != null) {
-            result = new DecimalFormat(formatRequired);
-        } else {
-            final Locale inLocale = getConfiguration().getCore().getRuntime().getLocale().map(LocaleUtil::findLocale).orElse(Locale.getDefault());
-            result = NumberFormat.getNumberInstance(inLocale);
-        }
-        format = result;
-    }
-
-
-    // //////////////////////////////////////////////////////////////////
-    // Parser
-    // //////////////////////////////////////////////////////////////////
-
-    @Override
-    protected BigInteger doParse(final ValueSemanticsProvider.Context context, final String entry) {
-        try {
-            return new BigInteger(entry);
-        } catch (final NumberFormatException e) {
-            throw new TextEntryParseException("Not an integer " + entry, e);
-        }
-    }
-
-    @Override
-    public String asTitleString(final BigInteger object) {
-        return titleString(format, object);
-    }
-
-    // //////////////////////////////////////////////////////////////////
-    // EncoderDecoder
-    // //////////////////////////////////////////////////////////////////
-
-    @Override
-    public String toEncodedString(final BigInteger bigInt) {
-        return bigInt.toString();
-    }
-
-    @Override
-    public BigInteger fromEncodedString(final String data) {
-        return new BigInteger(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/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 5f3e75d..9ea9680 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -83,7 +83,6 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyL
 import org.apache.isis.core.metamodel.facets.properties.update.PropertySetterFacetFactory;
 import org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefaultFactory;
 import org.apache.isis.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.bytes.BytePrimitiveValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.bytes.ByteWrapperValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.chars.CharPrimitiveValueFacetUsingSemanticsProviderFactory;
@@ -276,7 +275,6 @@ extends ProgrammingModelAbstract {
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new DoubleWrapperValueFacetUsingSemanticsProviderFactory(mmc));
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new CharPrimitiveValueFacetUsingSemanticsProviderFactory(mmc));
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new CharWrapperValueFacetUsingSemanticsProviderFactory(mmc));
-        addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new BigIntegerValueFacetUsingSemanticsProviderFactory(mmc));
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new JavaSqlDateValueFacetUsingSemanticsProviderFactory(mmc));
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new JavaSqlTimeValueFacetUsingSemanticsProviderFactory(mmc));
         addFactory(FacetProcessingOrder.G1_VALUE_TYPES, new JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory(mmc));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index d7b618f..3604cb1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -67,7 +67,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     @Test
     public void verifyProgrammingModelNumberOfFactories() {
-        assertEquals(92, programmingModel.streamFactories().count());
+        assertEquals(91, programmingModel.streamFactories().count());
     }
 
     @Test //verify we have the javac -parameter flag set when compiling this class
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
index 544bf3f..3ab7d2a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
@@ -23,20 +23,17 @@ import java.math.BigInteger;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
+import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueSemantics;
+
 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.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueSemanticsProvider;
-
 public class BigIntValueSemanticsProviderTest
 extends ValueSemanticsProviderAbstractTestCase {
 
+    private BigIntegerValueSemantics value;
     private BigInteger bigInt;
-    private FacetHolder holder;
 
     @Override
     @Before
@@ -44,22 +41,19 @@ extends ValueSemanticsProviderAbstractTestCase {
         super.setUp();
         bigInt = new BigInteger("132199");
         allowMockAdapterToReturn(bigInt);
-
-        holder = FacetHolderAbstract.forTesting(metaModelContext);
-
-        setValue(new BigIntegerValueSemanticsProvider(holder));
+        setSemanitcs(value = new BigIntegerValueSemantics());
     }
 
     @Test
     public void testParseValidString() throws Exception {
-        final Object newValue = getValue().parseTextRepresentation(null, "2142342334");
+        final Object newValue = value.parseTextRepresentation(null, "2142342334");
         assertEquals(new BigInteger("2142342334"), newValue);
     }
 
     @Test
     public void testParseInvalidString() throws Exception {
         try {
-            getValue().parseTextRepresentation(null, "214xxx2342334");
+            value.parseTextRepresentation(null, "214xxx2342334");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -67,24 +61,18 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitle() throws Exception {
-        assertEquals("132,199", getValue().presentationValue(null, bigInt));
+        assertEquals("132,199", value.presentationValue(null, bigInt));
     }
 
     @Test
     public void testEncode() throws Exception {
-        assertEquals("132199", getValue().toEncodedString(bigInt));
+        assertEquals("132199", value.toEncodedString(bigInt));
     }
 
     @Test
     public void testDecode() throws Exception {
-        final Object newValue = getValue().fromEncodedString("432289991");
+        final Object newValue = value.fromEncodedString("432289991");
         assertEquals(new BigInteger("432289991"), newValue);
     }
 
-    // -- HELPER
-
-    private ValueSemanticsProviderAndFacetAbstract<BigInteger> getValue() {
-        return super.getValue(BigInteger.class);
-    }
-
 }