diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToFlatJsonVisitor.java index 3caa42fa7..be0f5f248 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToFlatJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToFlatJsonVisitor.java @@ -4,6 +4,7 @@ import java.util.function.BiConsumer; import com.google.gson.JsonObject; +import li.strolch.model.Tags; import li.strolch.model.activity.Activity; import li.strolch.model.visitor.ActivityVisitor; @@ -13,13 +14,10 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor imple super(); } - public ActivityToFlatJsonVisitor(boolean withVersion) { - super(withVersion); - } - @Override - public JsonObject visit(Activity element) { - return toJson(element); + public ActivityToFlatJsonVisitor withVersion() { + super.withVersion(); + return this; } @Override @@ -29,8 +27,8 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor imple } @Override - public ActivityToFlatJsonVisitor setHook(BiConsumer hook) { - super.setHook(hook); + public ActivityToFlatJsonVisitor hook(BiConsumer hook) { + super.hook(hook); return this; } @@ -45,4 +43,11 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor imple super.ignoreParameter(bagId, paramId); return this; } + + @Override + public JsonObject visit(Activity element) { + JsonObject jsonObject = toJson(element); + jsonObject.addProperty(Tags.Json.STATE, element.getState().getName()); + return jsonObject; + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/OrderToFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/OrderToFlatJsonVisitor.java index 4ec57c14a..177fc4766 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/OrderToFlatJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/OrderToFlatJsonVisitor.java @@ -5,7 +5,9 @@ import java.util.function.BiConsumer; import com.google.gson.JsonObject; import li.strolch.model.Order; +import li.strolch.model.Tags; import li.strolch.model.visitor.OrderVisitor; +import li.strolch.utils.iso8601.ISO8601FormatFactory; public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor implements OrderVisitor { @@ -13,13 +15,10 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor implements super(); } - public OrderToFlatJsonVisitor(boolean withVersion) { - super(withVersion); - } - @Override - public JsonObject visit(Order element) { - return toJson(element); + public OrderToFlatJsonVisitor withVersion() { + super.withVersion(); + return this; } @Override @@ -29,8 +28,8 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor implements } @Override - public OrderToFlatJsonVisitor setHook(BiConsumer hook) { - super.setHook(hook); + public OrderToFlatJsonVisitor hook(BiConsumer hook) { + super.hook(hook); return this; } @@ -45,4 +44,14 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor implements super.ignoreParameter(bagId, paramId); return this; } + + @Override + public JsonObject visit(Order element) { + JsonObject jsonObject = toJson(element); + + jsonObject.addProperty(Tags.Json.DATE, ISO8601FormatFactory.getInstance().formatDate(element.getDate())); + jsonObject.addProperty(Tags.Json.STATE, element.getState().getName()); + + return jsonObject; + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToFlatJsonVisitor.java index 711f989d1..d31b488ee 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToFlatJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToFlatJsonVisitor.java @@ -1,25 +1,41 @@ package li.strolch.model.json; +import java.util.HashSet; +import java.util.Set; import java.util.function.BiConsumer; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import li.strolch.exception.StrolchModelException; import li.strolch.model.Resource; +import li.strolch.model.Tags; +import li.strolch.model.timedstate.StrolchTimedState; +import li.strolch.model.timevalue.ITimeValue; +import li.strolch.model.timevalue.ITimeVariable; +import li.strolch.model.timevalue.IValue; import li.strolch.model.visitor.ResourceVisitor; +import li.strolch.utils.iso8601.ISO8601FormatFactory; public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor implements ResourceVisitor { + private Set ignoredStates; + private boolean withoutTimedStates; + public ResourceToFlatJsonVisitor() { super(); - } - - public ResourceToFlatJsonVisitor(boolean withVersion) { - super(withVersion); + this.ignoredStates = new HashSet<>(); } @Override - public JsonObject visit(Resource element) { - return toJson(element); + public ResourceToFlatJsonVisitor withVersion() { + super.withVersion(); + return this; + } + + public ResourceToFlatJsonVisitor withoutTimedStates() { + this.withoutTimedStates = true; + return this; } @Override @@ -29,8 +45,8 @@ public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor imple } @Override - public ResourceToFlatJsonVisitor setHook(BiConsumer hook) { - super.setHook(hook); + public ResourceToFlatJsonVisitor hook(BiConsumer hook) { + super.hook(hook); return this; } @@ -45,4 +61,44 @@ public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor imple super.ignoreParameter(bagId, paramId); return this; } + + @Override + public JsonObject visit(Resource element) { + if (this.withoutTimedStates || !element.hasTimedStates()) + return toJson(element); + + JsonObject jsonObject = toJson(element); + addStates(element, jsonObject); + return jsonObject; + } + + private void addStates(Resource element, JsonObject jsonObject) { + for (String stateKey : element.getTimedStateKeySet()) { + + // see if we have to ignore this state + if (this.ignoredStates.contains(stateKey)) + continue; + + // get values + StrolchTimedState> stateT = element.getTimedState(stateKey); + ITimeVariable> timeEvolution = stateT.getTimeEvolution(); + + if (jsonObject.has(stateKey)) { + throw new StrolchModelException( + "JsonObject already has a member with ID " + stateKey + ": " + stateT.getLocator()); + } + + // build JSON data + JsonArray arrayJ = new JsonArray(); + for (ITimeValue> v : timeEvolution.getValues()) { + JsonObject obj = new JsonObject(); + obj.addProperty(Tags.Json.DATE, ISO8601FormatFactory.getInstance().formatDate(v.getTime())); + obj.addProperty(Tags.Json.VALUE, v.getValue().getValueAsString()); + + arrayJ.add(obj); + } + + jsonObject.add(stateKey, arrayJ); + } + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/ToFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/ToFlatJsonVisitor.java index c46b4c4af..3103a7fc9 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ToFlatJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/ToFlatJsonVisitor.java @@ -50,12 +50,20 @@ public class ToFlatJsonVisitor { private boolean withVersion; public ToFlatJsonVisitor() { - this(false); + this.ignoredKeys = new MapOfSets<>(); + } + + public boolean isWithVersion() { + return this.withVersion; + } + + public boolean isWithoutElementName() { + return this.withoutElementName; } - public ToFlatJsonVisitor(boolean withVersion) { - this.withVersion = withVersion; - this.ignoredKeys = new MapOfSets<>(); + public ToFlatJsonVisitor withVersion() { + this.withVersion = true; + return this; } public ToFlatJsonVisitor withoutElementName() { @@ -63,7 +71,7 @@ public class ToFlatJsonVisitor { return this; } - public ToFlatJsonVisitor setHook(BiConsumer hook) { + public ToFlatJsonVisitor hook(BiConsumer hook) { this.hook = hook; return this; }