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 2022/08/19 06:17:16 UTC
[isis] branch master updated: ISIS-3127: [RO] simplify JsonValueConverter
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 7095441fc3 ISIS-3127: [RO] simplify JsonValueConverter
7095441fc3 is described below
commit 7095441fc3542df99c28e03bda69a682ed0907a5
Author: andi-huber <ah...@apache.org>
AuthorDate: Fri Aug 19 08:17:07 2022 +0200
ISIS-3127: [RO] simplify JsonValueConverter
---
.../domainobjects/JsonValueConverter.java | 101 +++++++++++
...er_Converters.java => JsonValueConverters.java} | 188 ++++++++++-----------
.../rendering/domainobjects/JsonValueEncoder.java | 62 +------
3 files changed, 194 insertions(+), 157 deletions(-)
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverter.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverter.java
new file mode 100644
index 0000000000..b081babb2d
--- /dev/null
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverter.java
@@ -0,0 +1,101 @@
+/*
+ * 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.viewer.restfulobjects.rendering.domainobjects;
+
+import com.fasterxml.jackson.databind.node.NullNode;
+
+import org.springframework.lang.Nullable;
+
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+
+import lombok.Getter;
+
+public interface JsonValueConverter {
+
+ /**
+ * The value as pojo, otherwise <tt>null</tt>.
+ */
+ @Nullable
+ Object recoverValueAsPojo(JsonRepresentation repr, String format);
+
+ Object asObject(ManagedObject objectAdapter, String format);
+
+ Object appendValueAndFormat(
+ final ManagedObject objectAdapter,
+ final String formatOverride,
+ final JsonRepresentation repr,
+ final boolean suppressExtensions);
+
+ Can<Class<?>> getClasses();
+
+ static abstract class Abstract implements JsonValueConverter {
+ protected final String format;
+ protected final String xIsisFormat;
+
+ @Getter private final Can<Class<?>> classes;
+
+ public Abstract(final String format, final String xIsisFormat, final Class<?>... classes) {
+ this.format = format;
+ this.xIsisFormat = xIsisFormat;
+ this.classes = Can.ofArray(classes);
+ }
+
+ @Override
+ public Object appendValueAndFormat(
+ final ManagedObject objectAdapter,
+ final String formatOverride,
+ final JsonRepresentation repr,
+ final boolean suppressExtensions) {
+
+ final Object value = unwrapAsObjectElseNullNode(objectAdapter);
+ repr.mapPut("value", value);
+ appendFormats(repr, effectiveFormat(formatOverride), this.xIsisFormat, suppressExtensions);
+ return value;
+ }
+
+ @Override
+ public final Object asObject(final ManagedObject objectAdapter, final String format) {
+ return objectAdapter.getPojo();
+ }
+
+ protected final String effectiveFormat(final String formatOverride) {
+ return formatOverride!=null ? formatOverride : this.format;
+ }
+
+ static Object unwrapAsObjectElseNullNode(final ManagedObject adapter) {
+ return adapter != null? adapter.getPojo(): NullNode.getInstance();
+ }
+
+ static void appendFormats(
+ final JsonRepresentation repr,
+ final String format,
+ final String xIsisFormat,
+ final boolean suppressExtensions) {
+ if(format != null) {
+ repr.mapPutString("format", format);
+ }
+ if(!suppressExtensions && xIsisFormat != null) {
+ repr.mapPutString("extensions.x-isis-format", xIsisFormat);
+ }
+ }
+ }
+
+}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverters.java
similarity index 75%
rename from viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java
rename to viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverters.java
index 29a9f21485..9b9c28a942 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueConverters.java
@@ -22,7 +22,6 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
-import java.util.function.Function;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
@@ -34,7 +33,6 @@ import org.joda.time.format.ISODateTimeFormat;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder.JsonValueConverter;
import lombok.val;
@@ -42,17 +40,17 @@ import lombok.val;
* Similar to Isis' value encoding, but with additional support for JSON
* primitives.
*/
-public final class JsonValueEncoder_Converters {
+public final class JsonValueConverters {
- public List<JsonValueConverter> asList(final Function<Object, ManagedObject> pojoToAdapter) {
+ public List<JsonValueConverter> asList() {
val converters = _Lists.<JsonValueConverter>newArrayList();
- converters.add(new JsonValueConverter(null, "string", String.class){
+ converters.add(new JsonValueConverter.Abstract(null, "string", String.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
- return pojoToAdapter.apply(repr.asString());
+ return repr.asString();
}
return null;
}
@@ -69,11 +67,11 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter(null, "boolean", boolean.class, Boolean.class){
+ converters.add(new JsonValueConverter.Abstract(null, "boolean", boolean.class, Boolean.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isBoolean()) {
- return pojoToAdapter.apply(repr.asBoolean());
+ return repr.asBoolean();
}
return null;
}
@@ -91,20 +89,20 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("int", "byte", byte.class, Byte.class){
+ converters.add(new JsonValueConverter.Abstract("int", "byte", byte.class, Byte.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().byteValue());
+ return repr.asNumber().byteValue();
}
if (repr.isInt()) {
- return pojoToAdapter.apply((byte)(int)repr.asInt());
+ return (byte)(int)repr.asInt();
}
if (repr.isLong()) {
- return pojoToAdapter.apply((byte)(long)repr.asLong());
+ return (byte)(long)repr.asLong();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().byteValue());
+ return repr.asBigInteger().byteValue();
}
return null;
}
@@ -122,20 +120,20 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("int", "short", short.class, Short.class){
+ converters.add(new JsonValueConverter.Abstract("int", "short", short.class, Short.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().shortValue());
+ return repr.asNumber().shortValue();
}
if (repr.isInt()) {
- return pojoToAdapter.apply((short)(int)repr.asInt());
+ return (short)(int)repr.asInt();
}
if (repr.isLong()) {
- return pojoToAdapter.apply((short)(long)repr.asLong());
+ return (short)(long)repr.asLong();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().shortValue());
+ return repr.asBigInteger().shortValue();
}
return null;
}
@@ -153,20 +151,20 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("int", "int", int.class, Integer.class){
+ converters.add(new JsonValueConverter.Abstract("int", "int", int.class, Integer.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isInt()) {
- return pojoToAdapter.apply(repr.asInt());
+ return repr.asInt();
}
if (repr.isLong()) {
- return pojoToAdapter.apply(repr.asLong().intValue());
+ return repr.asLong().intValue();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().intValue());
+ return repr.asBigInteger().intValue();
}
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().intValue());
+ return repr.asNumber().intValue();
}
return null;
}
@@ -184,20 +182,20 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("int", "long", long.class, Long.class){
+ converters.add(new JsonValueConverter.Abstract("int", "long", long.class, Long.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isLong()) {
- return pojoToAdapter.apply(repr.asLong());
+ return repr.asLong();
}
if (repr.isInt()) {
- return pojoToAdapter.apply(repr.asLong());
+ return repr.asLong();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().longValue());
+ return repr.asBigInteger().longValue();
}
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().longValue());
+ return repr.asNumber().longValue();
}
return null;
}
@@ -216,23 +214,23 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("decimal", "float", float.class, Float.class){
+ converters.add(new JsonValueConverter.Abstract("decimal", "float", float.class, Float.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isDecimal()) {
- return pojoToAdapter.apply(repr.asDouble().floatValue());
+ return repr.asDouble().floatValue();
}
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().floatValue());
+ return repr.asNumber().floatValue();
}
if (repr.isLong()) {
- return pojoToAdapter.apply(repr.asLong().floatValue());
+ return repr.asLong().floatValue();
}
if (repr.isInt()) {
- return pojoToAdapter.apply(repr.asInt().floatValue());
+ return repr.asInt().floatValue();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().floatValue());
+ return repr.asBigInteger().floatValue();
}
return null;
}
@@ -251,26 +249,26 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("decimal", "double", double.class, Double.class){
+ converters.add(new JsonValueConverter.Abstract("decimal", "double", double.class, Double.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isDecimal()) {
- return pojoToAdapter.apply(repr.asDouble());
+ return repr.asDouble();
}
if (repr.isLong()) {
- return pojoToAdapter.apply(repr.asLong().doubleValue());
+ return repr.asLong().doubleValue();
}
if (repr.isInt()) {
- return pojoToAdapter.apply(repr.asInt().doubleValue());
+ return repr.asInt().doubleValue();
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger().doubleValue());
+ return repr.asBigInteger().doubleValue();
}
if (repr.isBigDecimal()) {
- return pojoToAdapter.apply(repr.asBigDecimal().doubleValue());
+ return repr.asBigDecimal().doubleValue();
}
if (repr.isNumber()) {
- return pojoToAdapter.apply(repr.asNumber().doubleValue());
+ return repr.asNumber().doubleValue();
}
return null;
}
@@ -289,13 +287,13 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter(null, "char", char.class, Character.class){
+ converters.add(new JsonValueConverter.Abstract(null, "char", char.class, Character.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String str = repr.asString();
if(str != null && str.length()>0) {
- return pojoToAdapter.apply(str.charAt(0));
+ return str.charAt(0);
}
}
// in case a char literal was provided
@@ -303,7 +301,7 @@ public final class JsonValueEncoder_Converters {
final Integer x = repr.asInt();
if(Character.MIN_VALUE <= x && x <= Character.MAX_VALUE) {
char c = (char) x.intValue();
- return pojoToAdapter.apply(c);
+ return c;
}
}
return null;
@@ -323,23 +321,23 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("big-integer(18)", "javamathbiginteger", BigInteger.class){
+ converters.add(new JsonValueConverter.Abstract("big-integer(18)", "javamathbiginteger", BigInteger.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
- return pojoToAdapter.apply(new BigInteger(repr.asString()));
+ return new BigInteger(repr.asString());
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(repr.asBigInteger(format));
+ return repr.asBigInteger(format);
}
if (repr.isLong()) {
- return pojoToAdapter.apply(BigInteger.valueOf(repr.asLong()));
+ return BigInteger.valueOf(repr.asLong());
}
if (repr.isInt()) {
- return pojoToAdapter.apply(BigInteger.valueOf(repr.asInt()));
+ return BigInteger.valueOf(repr.asInt());
}
if (repr.isNumber()) {
- return pojoToAdapter.apply(BigInteger.valueOf(repr.asNumber().longValue()));
+ return BigInteger.valueOf(repr.asNumber().longValue());
}
return null;
}
@@ -358,26 +356,26 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("big-decimal", "javamathbigdecimal", BigDecimal.class){
+ converters.add(new JsonValueConverter.Abstract("big-decimal", "javamathbigdecimal", BigDecimal.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
- return pojoToAdapter.apply(new BigDecimal(repr.asString()));
+ return new BigDecimal(repr.asString());
}
if (repr.isBigDecimal()) {
- return pojoToAdapter.apply(repr.asBigDecimal(format));
+ return repr.asBigDecimal(format);
}
if (repr.isBigInteger()) {
- return pojoToAdapter.apply(new BigDecimal(repr.asBigInteger()));
+ return new BigDecimal(repr.asBigInteger());
}
if (repr.isDecimal()) {
- return pojoToAdapter.apply(BigDecimal.valueOf(repr.asDouble()));
+ return BigDecimal.valueOf(repr.asDouble());
}
if (repr.isLong()) {
- return pojoToAdapter.apply(BigDecimal.valueOf(repr.asLong()));
+ return BigDecimal.valueOf(repr.asLong());
}
if (repr.isInt()) {
- return pojoToAdapter.apply(BigDecimal.valueOf(repr.asInt()));
+ return BigDecimal.valueOf(repr.asInt());
}
return null;
}
@@ -396,7 +394,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("date", "jodalocaldate", LocalDate.class){
+ converters.add(new JsonValueConverter.Abstract("date", "jodalocaldate", LocalDate.class){
// these formatters do NOT use withZoneUTC()
final List<DateTimeFormatter> formatters = Arrays.asList(
@@ -407,13 +405,13 @@ public final class JsonValueEncoder_Converters {
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final LocalDate parsedDate = formatter.parseLocalDate(dateStr);
- return pojoToAdapter.apply(parsedDate);
+ return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -438,7 +436,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("date-time", "jodalocaldatetime", LocalDateTime.class){
+ converters.add(new JsonValueConverter.Abstract("date-time", "jodalocaldatetime", LocalDateTime.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
@@ -449,13 +447,13 @@ public final class JsonValueEncoder_Converters {
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final LocalDateTime parsedDate = formatter.parseLocalDateTime(dateStr);
- return pojoToAdapter.apply(parsedDate);
+ return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -480,7 +478,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("date-time", "jodadatetime", DateTime.class){
+ converters.add(new JsonValueConverter.Abstract("date-time", "jodadatetime", DateTime.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
@@ -491,13 +489,13 @@ public final class JsonValueEncoder_Converters {
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final DateTime parsedDate = formatter.parseDateTime(dateStr);
- return pojoToAdapter.apply(parsedDate);
+ return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -522,7 +520,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("date-time", "javautildate", java.util.Date.class){
+ converters.add(new JsonValueConverter.Abstract("date-time", "javautildate", java.util.Date.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
@@ -532,14 +530,14 @@ public final class JsonValueEncoder_Converters {
JsonRepresentation.yyyyMMddTHHmmssZ.withZoneUTC()
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final DateTime parseDateTime = formatter.parseDateTime(dateStr);
final java.util.Date parsedDate = parseDateTime.toDate();
- return pojoToAdapter.apply(parsedDate);
+ return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -565,7 +563,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("date", "javasqldate", java.sql.Date.class){
+ converters.add(new JsonValueConverter.Abstract("date", "javasqldate", java.sql.Date.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.date().withZoneUTC(),
@@ -573,14 +571,14 @@ public final class JsonValueEncoder_Converters {
JsonRepresentation.yyyyMMdd.withZoneUTC()
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final DateTime parseDateTime = formatter.parseDateTime(dateStr);
final java.sql.Date parsedDate = new java.sql.Date(parseDateTime.getMillis());
- return pojoToAdapter.apply(parsedDate);
+ return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -605,7 +603,7 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("time", "javasqltime", java.sql.Time.class){
+ converters.add(new JsonValueConverter.Abstract("time", "javasqltime", java.sql.Time.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.hourMinuteSecond().withZoneUTC(),
@@ -614,14 +612,14 @@ public final class JsonValueEncoder_Converters {
JsonRepresentation._HHmmss.withZoneUTC()
);
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final DateTime parseDateTime = formatter.parseDateTime(dateStr);
final java.sql.Time parsedTime = new java.sql.Time(parseDateTime.getMillis());
- return pojoToAdapter.apply(parsedTime);
+ return parsedTime;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -646,21 +644,21 @@ public final class JsonValueEncoder_Converters {
}
});
- converters.add(new JsonValueConverter("utc-millisec", "javasqltimestamp", java.sql.Timestamp.class){
+ converters.add(new JsonValueConverter.Abstract("utc-millisec", "javasqltimestamp", java.sql.Timestamp.class){
@Override
- public ManagedObject asAdapter(final JsonRepresentation repr, final String format) {
+ public Object recoverValueAsPojo(final JsonRepresentation repr, final String format) {
if (repr.isLong()) {
final Long millis = repr.asLong();
final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(millis);
- return pojoToAdapter.apply(parsedTimestamp);
+ return parsedTimestamp;
}
if (repr.isString()) {
final String dateStr = repr.asString();
try {
final Long parseMillis = Long.parseLong(dateStr);
final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(parseMillis);
- return pojoToAdapter.apply(parsedTimestamp);
+ return parsedTimestamp;
} catch (IllegalArgumentException ex) {
// fall through
}
@@ -687,14 +685,4 @@ public final class JsonValueEncoder_Converters {
return converters;
}
-
- static void appendFormats(final JsonRepresentation repr, final String format, final String xIsisFormat,
- final boolean suppressExtensions) {
- JsonValueEncoder.appendFormats(repr, format, xIsisFormat, suppressExtensions);
- }
-
- static Object unwrapAsObjectElseNullNode(final ManagedObject adapter) {
- return JsonValueEncoder.unwrapAsObjectElseNullNode(adapter);
- }
-
}
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 072e58bd41..389453f6ca 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
@@ -20,7 +20,6 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import java.util.Map;
import java.util.Optional;
-import java.util.function.Function;
import javax.annotation.PostConstruct;
import javax.annotation.Priority;
@@ -36,7 +35,6 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.facets.object.value.ValueSerializer.Format;
@@ -48,7 +46,6 @@ import org.apache.isis.core.metamodel.util.Facets;
import org.apache.isis.viewer.restfulobjects.applib.IsisModuleViewerRestfulObjectsApplib;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import lombok.Getter;
import lombok.NonNull;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -68,12 +65,7 @@ public class JsonValueEncoder {
@PostConstruct
public void init() {
-
- //XXX no lombok val here
- Function<Object, ManagedObject> pojoToAdapter = pojo ->
- ManagedObject.lazy(specificationLoader, pojo);
-
- new JsonValueEncoder_Converters().asList(pojoToAdapter)
+ new JsonValueConverters().asList()
.forEach(this::registerConverter);
}
@@ -113,9 +105,9 @@ public class JsonValueEncoder {
throw new IllegalArgumentException("Unable to parse value");
}
- final ManagedObject asAdapter = jvc.asAdapter(argValueRepr, format);
- if(asAdapter != null) {
- return asAdapter;
+ val valueAsPojo = jvc.recoverValueAsPojo(argValueRepr, format);
+ if(valueAsPojo != null) {
+ return ManagedObject.lazy(specificationLoader, valueAsPojo);
}
// last attempt
@@ -199,7 +191,7 @@ public class JsonValueEncoder {
.toEncodedString(Format.JSON, _Casts.uncheckedCast(adapter.getPojo()));
}
-
+ @Deprecated
static void appendFormats(final JsonRepresentation repr, final String format, final String xIsisFormat, final boolean suppressExtensions) {
if(format != null) {
repr.mapPutString("format", format);
@@ -209,56 +201,12 @@ public class JsonValueEncoder {
}
}
- static Object unwrapAsObjectElseNullNode(final ManagedObject adapter) {
- return adapter != null? adapter.getPojo(): NullNode.getInstance();
- }
-
// -- NESTED TYPE DECLARATIONS
public static class ExpectedStringRepresentingValueException extends IllegalArgumentException {
private static final long serialVersionUID = 1L;
}
- public static abstract class JsonValueConverter {
-
- protected final String format;
- protected final String xIsisFormat;
-
- @Getter private final Can<Class<?>> classes;
-
- public JsonValueConverter(final String format, final String xIsisFormat, final Class<?>... classes) {
- this.format = format;
- this.xIsisFormat = xIsisFormat;
- this.classes = Can.ofArray(classes);
- }
-
- /**
- * The value, otherwise <tt>null</tt>.
- */
- public abstract ManagedObject asAdapter(JsonRepresentation repr, String format);
-
- public Object appendValueAndFormat(
- final ManagedObject objectAdapter,
- final String formatOverride,
- final JsonRepresentation repr,
- final boolean suppressExtensions) {
-
- final Object value = unwrapAsObjectElseNullNode(objectAdapter);
- repr.mapPut("value", value);
- appendFormats(repr, effectiveFormat(formatOverride), this.xIsisFormat, suppressExtensions);
- return value;
- }
-
- protected String effectiveFormat(final String formatOverride) {
- return formatOverride!=null ? formatOverride : this.format;
- }
-
- public Object asObject(final ManagedObject objectAdapter, final String format) {
- return objectAdapter.getPojo();
- }
- }
-
-
/**
* JUnit support
*/