You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/03/28 12:06:46 UTC

[causeway] branch master updated: CAUSEWAY-3129: more utility cleanups

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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 3c89434aef CAUSEWAY-3129: more utility cleanups
3c89434aef is described below

commit 3c89434aef52581b671603d570ad91dcdd5c7d69
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Mar 28 14:06:39 2023 +0200

    CAUSEWAY-3129: more utility cleanups
---
 .../testdomain/rest/JsonValueEncoderTest.java      |  2 +-
 .../restfulobjects/rendering/LinkFollowSpecs.java  | 16 +++++++--
 .../JsonValueEncoderServiceDefault.java            | 25 ++++----------
 .../service/valuerender/_JsonValueConverters.java  | 11 +++++-
 .../rendering/util/FollowSpecUtil.java             | 39 ----------------------
 .../rendering/util/JsonWriterUtil.java             | 21 +++++-------
 .../JsonValueEncoderTestAbstract.java              |  2 +-
 7 files changed, 40 insertions(+), 76 deletions(-)

diff --git a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/JsonValueEncoderTest.java b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/JsonValueEncoderTest.java
index 041da4c8d2..ff5679b41f 100644
--- a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/JsonValueEncoderTest.java
+++ b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/JsonValueEncoderTest.java
@@ -427,7 +427,7 @@ class JsonValueEncoderTest {
     private JsonRepresentation representationFor(
             final Object value, final Context context, final Consumer<Object> valueAsObjectVerifier) {
         val valueAdapter = mmc.getObjectManager().adapt(value);
-        val jsonValueEncoder = JsonValueEncoderServiceDefault.forTesting(mmc.getSpecificationLoader());
+        val jsonValueEncoder = new JsonValueEncoderServiceDefault(mmc.getSpecificationLoader());
 
         valueAsObjectVerifier.accept(jsonValueEncoder.asObject(valueAdapter, context));
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/LinkFollowSpecs.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/LinkFollowSpecs.java
index e75ef9603e..8abd8098da 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/LinkFollowSpecs.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/LinkFollowSpecs.java
@@ -18,21 +18,33 @@
  */
 package org.apache.causeway.viewer.restfulobjects.rendering;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.causeway.viewer.restfulobjects.applib.util.PathNode;
-import org.apache.causeway.viewer.restfulobjects.rendering.util.FollowSpecUtil;
 
 public final class LinkFollowSpecs {
 
     public static final LinkFollowSpecs create(final List<List<String>> links) {
-        final List<List<PathNode>> specs = FollowSpecUtil.asFollowSpecs(links);
+        final List<List<PathNode>> specs = asFollowSpecs(links);
         return new LinkFollowSpecs(specs, Mode.FOLLOWING, null);
     }
 
+    private static final List<List<PathNode>> asFollowSpecs(final List<List<String>> links) {
+        return _NullSafe.stream(links)
+        .map(_NullSafe::stream)
+        .map((final Stream<String> pathPartStream)->pathPartStream
+                .map(PathNode::parse)
+                .collect(Collectors.toCollection(ArrayList::new)))
+        .collect(Collectors.toCollection(ArrayList::new));
+    }
+
     private enum Mode {
         FOLLOWING, TERMINATED;
     }
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
index f3ba178f42..0f6777840c 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
@@ -22,7 +22,6 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -38,7 +37,6 @@ import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.assertions._Assert;
 import org.apache.causeway.commons.internal.base._Casts;
-import org.apache.causeway.commons.internal.collections._Maps;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer;
 import org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer.Format;
@@ -63,14 +61,13 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class JsonValueEncoderServiceDefault implements JsonValueEncoderService {
 
-    @Inject private SpecificationLoader specificationLoader;
+    private final SpecificationLoader specificationLoader;
+    private final Map<Class<?>, JsonValueConverter> converterByClass;
 
-    private Map<Class<?>, JsonValueConverter> converterByClass = _Maps.newLinkedHashMap();
-
-    @PostConstruct
-    public void init() {
-        new _JsonValueConverters().asList()
-            .forEach(converter->converterByClass.put(converter.getValueClass(), converter));
+    @Inject
+    public JsonValueEncoderServiceDefault(final SpecificationLoader specificationLoader) {
+        this.specificationLoader = specificationLoader;
+        this.converterByClass = _JsonValueConverters.byClass();
     }
 
     @Override
@@ -250,14 +247,4 @@ public class JsonValueEncoderServiceDefault implements JsonValueEncoderService {
                 .enstring(Format.JSON, _Casts.uncheckedCast(adapter.getPojo()));
     }
 
-    /**
-     * JUnit support
-     */
-    public static JsonValueEncoderServiceDefault forTesting(final SpecificationLoader specificationLoader) {
-        val jsonValueEncoder = new JsonValueEncoderServiceDefault();
-        jsonValueEncoder.specificationLoader = specificationLoader;
-        jsonValueEncoder.init();
-        return jsonValueEncoder;
-    }
-
 }
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
index ff289d9062..ea80738cc7 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
@@ -31,6 +32,7 @@ import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
 import org.apache.causeway.commons.internal.collections._Lists;
+import org.apache.causeway.commons.internal.collections._Maps;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
 
@@ -79,7 +81,14 @@ final class _JsonValueConverters {
         final String extendedFormat;
     }
 
-    public List<JsonValueConverter> asList() {
+    public static Map<Class<?>, JsonValueConverter> byClass() {
+        val converterByClass = _Maps.<Class<?>, JsonValueConverter>newLinkedHashMap();
+        new _JsonValueConverters().asList()
+                .forEach(converter->converterByClass.put(converter.getValueClass(), converter));
+        return converterByClass;
+    }
+
+    private List<JsonValueConverter> asList() {
 
         val converters = _Lists.<JsonValueConverter>newArrayList();
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/FollowSpecUtil.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/FollowSpecUtil.java
deleted file mode 100644
index 79f3f88b5d..0000000000
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/FollowSpecUtil.java
+++ /dev/null
@@ -1,39 +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.causeway.viewer.restfulobjects.rendering.util;
-
-import java.util.List;
-
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.viewer.restfulobjects.applib.util.PathNode;
-
-public final class FollowSpecUtil {
-
-    private FollowSpecUtil() {
-    }
-
-    public static final List<List<PathNode>> asFollowSpecs(final List<List<String>> links) {
-
-        final List<List<PathNode>> unmodifiable = _Lists.map(links, (List<String> pathParts) -> {
-            return _Lists.newArrayList(_Lists.map(pathParts, (String input)->PathNode.parse(input)));
-        });
-
-        return _Lists.newArrayList(unmodifiable);
-    }
-}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
index 8fdbacbfbf..e7d41087d0 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
@@ -18,33 +18,28 @@
  */
 package org.apache.causeway.viewer.restfulobjects.rendering.util;
 
-import java.io.IOException;
-
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
 import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
 
+import lombok.SneakyThrows;
 import lombok.val;
+import lombok.experimental.UtilityClass;
 
+@UtilityClass
 public final class JsonWriterUtil {
 
-    private JsonWriterUtil(){}
-
-    public static String jsonFor(Object object, JsonMapper.PrettyPrinting prettyPrinting) {
-        try {
-            return JsonMapper.instance(prettyPrinting).write(object);
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
+    @SneakyThrows
+    public String jsonFor(final Object object, final JsonMapper.PrettyPrinting prettyPrinting) {
+        return JsonMapper.instance(prettyPrinting).write(object);
     }
 
-    public static String jsonFor(Object object, @Nullable CausewaySystemEnvironment systemEnvironment) {
+    public String jsonFor(final Object object, @Nullable final CausewaySystemEnvironment systemEnvironment) {
         val prettyPrinting = (systemEnvironment!=null && systemEnvironment.isPrototyping())
                 ? JsonMapper.PrettyPrinting.ENABLE
-                        : JsonMapper.PrettyPrinting.DISABLE;
+                : JsonMapper.PrettyPrinting.DISABLE;
         return jsonFor(object, prettyPrinting);
     }
 
-
 }
diff --git a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTestAbstract.java b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTestAbstract.java
index 5d28f623e3..7283edf8a6 100644
--- a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTestAbstract.java
+++ b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTestAbstract.java
@@ -53,7 +53,7 @@ abstract class JsonValueEncoderTestAbstract {
                 .withValueSemantics(new FloatValueSemantics())
                 ;
 
-        jsonValueEncoder = JsonValueEncoderServiceDefault.forTesting(mmc.getSpecificationLoader());
+        jsonValueEncoder = new JsonValueEncoderServiceDefault(mmc.getSpecificationLoader());
     }
 
     protected ObjectSpecification specFor(final Class<?> cls) {