[New] Added StrolchValueType.valueToJson()

This commit is contained in:
Robert von Burg 2020-01-29 23:49:39 +01:00
parent b53c1bca58
commit cfc03747e5
1 changed files with 93 additions and 1 deletions

View File

@ -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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
FLOAT_LIST("FloatList") {
@Override
public JsonPrimitive valueToJson(Object value) {
@SuppressWarnings("unchecked")
List<Double> list = (List<Double>) 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 {
* </ul>
*/
INTEGER_LIST("IntegerList") {
@Override
public JsonPrimitive valueToJson(Object value) {
@SuppressWarnings("unchecked")
List<Integer> list = (List<Integer>) 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 {
* </ul>
*/
LONG_LIST("LongList") {
@Override
public JsonPrimitive valueToJson(Object value) {
@SuppressWarnings("unchecked")
List<Long> list = (List<Long>) 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 {
* </ul>
*/
STRING_LIST("StringList") {
@Override
public JsonPrimitive valueToJson(Object value) {
@SuppressWarnings("unchecked")
List<String> list = (List<String>) 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 {
* </ul>
*/
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();