From cfc03747e59682c499254d7bf2511f92bf658673 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Wed, 29 Jan 2020 23:49:39 +0100 Subject: [PATCH] [New] Added StrolchValueType.valueToJson() --- .../li/strolch/model/StrolchValueType.java | 94 ++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/li.strolch.model/src/main/java/li/strolch/model/StrolchValueType.java b/li.strolch.model/src/main/java/li/strolch/model/StrolchValueType.java index 8f455aa83..76531a541 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/StrolchValueType.java +++ b/li.strolch.model/src/main/java/li/strolch/model/StrolchValueType.java @@ -15,13 +15,23 @@ */ package li.strolch.model; -import java.text.MessageFormat; +import static java.util.stream.Collectors.joining; +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import com.google.gson.JsonPrimitive; import li.strolch.model.parameter.*; import li.strolch.model.timedstate.*; import li.strolch.model.timevalue.IValue; import li.strolch.model.timevalue.IValueChange; import li.strolch.model.timevalue.impl.*; +import li.strolch.utils.iso8601.ISO8601; +import li.strolch.utils.time.PeriodDuration; public enum StrolchValueType { @@ -35,6 +45,11 @@ public enum StrolchValueType { * */ BOOLEAN("Boolean") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive(((Boolean) value).toString()); + } + @Override public Object parseValue(String value) { return BooleanParameter.parseFromString(value); @@ -71,6 +86,11 @@ public enum StrolchValueType { * */ INTEGER("Integer") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive(((Integer) value).toString()); + } + @Override public Object parseValue(String value) { return IntegerParameter.parseFromString(value); @@ -107,6 +127,11 @@ public enum StrolchValueType { * */ FLOAT("Float") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive(value.toString()); + } + @Override public Object parseValue(String value) { return FloatParameter.parseFromString(value); @@ -140,6 +165,11 @@ public enum StrolchValueType { * */ LONG("Long") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive(value.toString()); + } + @Override public Object parseValue(String value) { return LongParameter.parseFromString(value); @@ -173,6 +203,11 @@ public enum StrolchValueType { * */ STRING("String") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive((String) value); + } + @Override public Object parseValue(String value) { return value; @@ -208,6 +243,11 @@ public enum StrolchValueType { * */ TEXT("Text") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive((String) value); + } + @Override public Object parseValue(String value) { return value; @@ -243,6 +283,17 @@ public enum StrolchValueType { * */ DATE("Date") { + @Override + public JsonPrimitive valueToJson(Object value) { + if (value instanceof Date) + return new JsonPrimitive(ISO8601.toString((Date) value)); + else if (value instanceof LocalDateTime) + return new JsonPrimitive(ISO8601.toString((LocalDateTime) value)); + if (value instanceof ZonedDateTime) + return new JsonPrimitive(ISO8601.toString((ZonedDateTime) value)); + throw new ClassCastException("value " + value + " + has unexpected class " + value.getClass()); + } + @Override public Object parseValue(String value) { return DateParameter.parseFromString(value); @@ -273,6 +324,11 @@ public enum StrolchValueType { * */ DURATION("Duration") { + @Override + public JsonPrimitive valueToJson(Object value) { + return new JsonPrimitive(((PeriodDuration) value).toString()); + } + @Override public Object parseValue(String value) { return DurationParameter.parseFromString(value); @@ -306,6 +362,13 @@ public enum StrolchValueType { * */ FLOAT_LIST("FloatList") { + @Override + public JsonPrimitive valueToJson(Object value) { + @SuppressWarnings("unchecked") + List list = (List) value; + return new JsonPrimitive(list.stream().map(Objects::toString).collect(joining(", "))); + } + @Override public Object parseValue(String value) { return FloatListParameter.parseFromString(value); @@ -334,6 +397,13 @@ public enum StrolchValueType { * */ INTEGER_LIST("IntegerList") { + @Override + public JsonPrimitive valueToJson(Object value) { + @SuppressWarnings("unchecked") + List list = (List) value; + return new JsonPrimitive(list.stream().map(Objects::toString).collect(joining(", "))); + } + @Override public Object parseValue(String value) { return IntegerListParameter.parseFromString(value); @@ -364,6 +434,13 @@ public enum StrolchValueType { * */ LONG_LIST("LongList") { + @Override + public JsonPrimitive valueToJson(Object value) { + @SuppressWarnings("unchecked") + List list = (List) value; + return new JsonPrimitive(list.stream().map(Objects::toString).collect(joining(", "))); + } + @Override public Object parseValue(String value) { return LongListParameter.parseFromString(value); @@ -394,6 +471,13 @@ public enum StrolchValueType { * */ STRING_LIST("StringList") { + @Override + public JsonPrimitive valueToJson(Object value) { + @SuppressWarnings("unchecked") + List list = (List) value; + return new JsonPrimitive(list.stream().map(Objects::toString).collect(joining(", "))); + } + @Override public Object parseValue(String value) { return StringListParameter.parseFromString(value); @@ -426,6 +510,12 @@ public enum StrolchValueType { * */ STRING_SET("StringSet") { + @Override + public JsonPrimitive valueToJson(Object value) { + throw new UnsupportedOperationException( + MessageFormat.format("Formatting of type {0} is not supported!", getType())); //$NON-NLS-1$ + } + @Override public Object parseValue(String value) { throw new UnsupportedOperationException( @@ -471,6 +561,8 @@ public enum StrolchValueType { throw new IllegalArgumentException("Type " + value + " does not exist!"); } + public abstract JsonPrimitive valueToJson(Object value); + public abstract Object parseValue(String value); public abstract Parameter parameterInstance();