in viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/_JsonValueConverters.java [90:757]
private List<JsonValueConverter> asList() {
var converters = _Lists.<JsonValueConverter>newArrayList();
converters.add(new JsonValueConverter.Abstract(DefaultFormat.STRING){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
return repr.asString();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
var obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof String) {
repr.mapPutString("value", (String) obj);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.BOOLEAN){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isBoolean()) {
return repr.asBoolean();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
var obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Boolean) {
repr.mapPutBooleanNullable("value", (Boolean) obj);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.BYTE){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isNumber()) {
return repr.asNumber().byteValue();
}
if (repr.isInt()) {
return (byte)(int)repr.asInt();
}
if (repr.isLong()) {
return (byte)(long)repr.asLong();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().byteValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
var obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Byte) {
repr.mapPutByteNullable("value", (Byte) obj);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.SHORT){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isNumber()) {
return repr.asNumber().shortValue();
}
if (repr.isInt()) {
return (short)(int)repr.asInt();
}
if (repr.isLong()) {
return (short)(long)repr.asLong();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().shortValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Short) {
repr.mapPutShortNullable("value", (Short) obj);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.INT){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isInt()) {
return repr.asInt();
}
if (repr.isLong()) {
return repr.asLong().intValue();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().intValue();
}
if (repr.isNumber()) {
return repr.asNumber().intValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Integer) {
repr.mapPutIntNullable("value", (Integer) obj);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.LONG){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isLong()) {
return repr.asLong();
}
if (repr.isInt()) {
return repr.asLong();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().longValue();
}
if (repr.isNumber()) {
return repr.asNumber().longValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Long) {
final Long l = (Long) obj;
repr.mapPutLongNullable("value", l);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.FLOAT){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isDecimal()) {
return repr.asDouble().floatValue();
}
if (repr.isNumber()) {
return repr.asNumber().floatValue();
}
if (repr.isLong()) {
return repr.asLong().floatValue();
}
if (repr.isInt()) {
return repr.asInt().floatValue();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().floatValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Float) {
final Float f = (Float) obj;
repr.mapPutFloatNullable("value", f);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.DOUBLE){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isDecimal()) {
return repr.asDouble();
}
if (repr.isLong()) {
return repr.asLong().doubleValue();
}
if (repr.isInt()) {
return repr.asInt().doubleValue();
}
if (repr.isBigInteger()) {
return repr.asBigInteger().doubleValue();
}
if (repr.isBigDecimal()) {
return repr.asBigDecimal().doubleValue();
}
if (repr.isNumber()) {
return repr.asNumber().doubleValue();
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Double) {
final Double d = (Double) obj;
repr.mapPutDoubleNullable("value", d);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.CHAR){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
final String str = repr.asString();
if(str != null && str.length()>0) {
return str.charAt(0);
}
}
// in case a char literal was provided
if(repr.isInt()) {
final Integer x = repr.asInt();
if(Character.MIN_VALUE <= x && x <= Character.MAX_VALUE) {
char c = (char) x.intValue();
return c;
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof Character) {
final Character c = (Character) obj;
repr.mapPutCharNullable("value", c);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.BIGINTEGER){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
return new BigInteger(repr.asString());
}
if (repr.isBigInteger()) {
return repr.asBigInteger(format);
}
if (repr.isLong()) {
return BigInteger.valueOf(repr.asLong());
}
if (repr.isInt()) {
return BigInteger.valueOf(repr.asInt());
}
if (repr.isNumber()) {
return BigInteger.valueOf(repr.asNumber().longValue());
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof BigInteger) {
final BigInteger bi = (BigInteger) obj;
repr.mapPutBigInteger("value", bi);
// custom format if constrained
context.maxTotalDigits(objectAdapter)
.ifPresentOrElse(
totalDigits->repr.putFormat(String.format("big-integer(%d)", totalDigits)),
()->repr.putFormat(format));
} else {
repr.mapPut("value", obj);
repr.putFormat(format);
}
if(!context.isSuppressExtensions()) {
repr.putExtendedFormat(extendedFormat);
}
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.BIGDECIMAL){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
return new BigDecimal(repr.asString());
}
if (repr.isBigDecimal()) {
return repr.asBigDecimal(format);
}
if (repr.isBigInteger()) {
return new BigDecimal(repr.asBigInteger());
}
if (repr.isDecimal()) {
return BigDecimal.valueOf(repr.asDouble());
}
if (repr.isLong()) {
return BigDecimal.valueOf(repr.asLong());
}
if (repr.isInt()) {
return BigDecimal.valueOf(repr.asInt());
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof BigDecimal) {
final BigDecimal bd = (BigDecimal) obj;
repr.mapPutBigDecimal("value", bd);
// custom format if constrained
final int totalDigits = context.maxTotalDigits(objectAdapter).orElse(-1);
final int scale = context.maxFractionalDigits(objectAdapter).orElse(-1);
if(totalDigits>-1
&& scale>-1) {
var formatOverride = String.format("big-decimal(%d,%d)", totalDigits, scale);
repr.putFormat(formatOverride);
} else {
repr.putFormat(format);
}
} else {
repr.mapPut("value", obj);
repr.putFormat(format);
}
if(!context.isSuppressExtensions()) {
repr.putExtendedFormat(extendedFormat);
}
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODALOCALDATE){
// these formatters do NOT use withZoneUTC()
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.date(),
ISODateTimeFormat.basicDate(),
DateTimeFormat.forPattern("yyyyMMdd"),
JsonRepresentation.yyyyMMdd
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final LocalDate parsedDate = formatter.parseLocalDate(dateStr);
return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof LocalDate) {
final LocalDate date = (LocalDate) obj;
final String dateStr = formatters.get(0).print(date.toDateTimeAtStartOfDay());
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODALOCALDATETIME){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.dateTime().withZoneUTC(),
ISODateTimeFormat.basicDateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.basicDateTime().withZoneUTC(),
JsonRepresentation.yyyyMMddTHHmmssZ.withZoneUTC()
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final LocalDateTime parsedDate = formatter.parseLocalDateTime(dateStr);
return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof LocalDateTime) {
final LocalDateTime date = (LocalDateTime) obj;
final String dateStr = formatters.get(0).print(date.toDateTime());
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JODADATETIME){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.dateTime().withZoneUTC(),
ISODateTimeFormat.basicDateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.basicDateTime().withZoneUTC(),
JsonRepresentation.yyyyMMddTHHmmssZ.withZoneUTC()
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isString()) {
final String dateStr = repr.asString();
for (DateTimeFormatter formatter : formatters) {
try {
final DateTime parsedDate = formatter.parseDateTime(dateStr);
return parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof DateTime) {
final DateTime date = (DateTime) obj;
final String dateStr = formatters.get(0).print(date.toDateTime());
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVAUTILDATE){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.dateTime().withZoneUTC(),
ISODateTimeFormat.basicDateTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.basicDateTime().withZoneUTC(),
JsonRepresentation.yyyyMMddTHHmmssZ.withZoneUTC()
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
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 parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof java.util.Date) {
final java.util.Date date = (java.util.Date) obj;
final DateTimeFormatter dateTimeFormatter = formatters.get(0);
final String dateStr = dateTimeFormatter.print(new DateTime(date));
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLDATE){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.date().withZoneUTC(),
ISODateTimeFormat.basicDate().withZoneUTC(),
JsonRepresentation.yyyyMMdd.withZoneUTC()
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
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 parsedDate;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof java.sql.Date) {
final java.sql.Date date = (java.sql.Date) obj;
final String dateStr = formatters.get(0).print(new DateTime(date));
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLTIME){
final List<DateTimeFormatter> formatters = Arrays.asList(
ISODateTimeFormat.hourMinuteSecond().withZoneUTC(),
ISODateTimeFormat.basicTimeNoMillis().withZoneUTC(),
ISODateTimeFormat.basicTime().withZoneUTC(),
JsonRepresentation._HHmmss.withZoneUTC()
);
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
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 parsedTime;
} catch (IllegalArgumentException ex) {
// fall through
}
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof java.sql.Time) {
final java.sql.Time date = (java.sql.Time) obj;
final String dateStr = formatters.get(0).print(new DateTime(date));
repr.mapPutString("value", dateStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
converters.add(new JsonValueConverter.Abstract(DefaultFormat.JAVASQLTIMESTAMP){
@Override
public Object recoverValueAsPojo(final JsonRepresentation repr, final Context context) {
if (repr.isLong()) {
final Long millis = repr.asLong();
final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(millis);
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 parsedTimestamp;
} catch (IllegalArgumentException ex) {
// fall through
}
}
return null;
}
@Override
public Object appendValueAndFormat(final ManagedObject objectAdapter, final Context context,
final JsonRepresentation repr) {
final Object obj = unwrapAsObjectElseNullNode(objectAdapter);
if(obj instanceof java.sql.Timestamp) {
final java.sql.Timestamp date = (java.sql.Timestamp) obj;
final long millisStr = date.getTime();
repr.mapPutLong("value", millisStr);
} else {
repr.mapPut("value", obj);
}
appendFormats(repr, context);
return obj;
}
});
return converters;
}