[New] Updated *ToFlatJsonVisitors to be more build-pattern-like
This commit is contained in:
parent
a0371d7272
commit
b06274a103
|
@ -4,6 +4,7 @@ import java.util.function.BiConsumer;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.model.activity.Activity;
|
import li.strolch.model.activity.Activity;
|
||||||
import li.strolch.model.visitor.ActivityVisitor;
|
import li.strolch.model.visitor.ActivityVisitor;
|
||||||
|
|
||||||
|
@ -13,13 +14,10 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor<Activity> imple
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActivityToFlatJsonVisitor(boolean withVersion) {
|
|
||||||
super(withVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Activity element) {
|
public ActivityToFlatJsonVisitor withVersion() {
|
||||||
return toJson(element);
|
super.withVersion();
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,8 +27,8 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor<Activity> imple
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActivityToFlatJsonVisitor setHook(BiConsumer<Activity, JsonObject> hook) {
|
public ActivityToFlatJsonVisitor hook(BiConsumer<Activity, JsonObject> hook) {
|
||||||
super.setHook(hook);
|
super.hook(hook);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,4 +43,11 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor<Activity> imple
|
||||||
super.ignoreParameter(bagId, paramId);
|
super.ignoreParameter(bagId, paramId);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonObject visit(Activity element) {
|
||||||
|
JsonObject jsonObject = toJson(element);
|
||||||
|
jsonObject.addProperty(Tags.Json.STATE, element.getState().getName());
|
||||||
|
return jsonObject;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,9 @@ import java.util.function.BiConsumer;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import li.strolch.model.Order;
|
import li.strolch.model.Order;
|
||||||
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.model.visitor.OrderVisitor;
|
import li.strolch.model.visitor.OrderVisitor;
|
||||||
|
import li.strolch.utils.iso8601.ISO8601FormatFactory;
|
||||||
|
|
||||||
public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> implements OrderVisitor<JsonObject> {
|
public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> implements OrderVisitor<JsonObject> {
|
||||||
|
|
||||||
|
@ -13,13 +15,10 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> implements
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrderToFlatJsonVisitor(boolean withVersion) {
|
|
||||||
super(withVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Order element) {
|
public OrderToFlatJsonVisitor withVersion() {
|
||||||
return toJson(element);
|
super.withVersion();
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,8 +28,8 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OrderToFlatJsonVisitor setHook(BiConsumer<Order, JsonObject> hook) {
|
public OrderToFlatJsonVisitor hook(BiConsumer<Order, JsonObject> hook) {
|
||||||
super.setHook(hook);
|
super.hook(hook);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,4 +44,14 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> implements
|
||||||
super.ignoreParameter(bagId, paramId);
|
super.ignoreParameter(bagId, paramId);
|
||||||
return this;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,41 @@
|
||||||
package li.strolch.model.json;
|
package li.strolch.model.json;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.exception.StrolchModelException;
|
||||||
import li.strolch.model.Resource;
|
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.model.visitor.ResourceVisitor;
|
||||||
|
import li.strolch.utils.iso8601.ISO8601FormatFactory;
|
||||||
|
|
||||||
public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor<Resource> implements ResourceVisitor<JsonObject> {
|
public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor<Resource> implements ResourceVisitor<JsonObject> {
|
||||||
|
|
||||||
|
private Set<String> ignoredStates;
|
||||||
|
private boolean withoutTimedStates;
|
||||||
|
|
||||||
public ResourceToFlatJsonVisitor() {
|
public ResourceToFlatJsonVisitor() {
|
||||||
super();
|
super();
|
||||||
}
|
this.ignoredStates = new HashSet<>();
|
||||||
|
|
||||||
public ResourceToFlatJsonVisitor(boolean withVersion) {
|
|
||||||
super(withVersion);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Resource element) {
|
public ResourceToFlatJsonVisitor withVersion() {
|
||||||
return toJson(element);
|
super.withVersion();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResourceToFlatJsonVisitor withoutTimedStates() {
|
||||||
|
this.withoutTimedStates = true;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,8 +45,8 @@ public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor<Resource> imple
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceToFlatJsonVisitor setHook(BiConsumer<Resource, JsonObject> hook) {
|
public ResourceToFlatJsonVisitor hook(BiConsumer<Resource, JsonObject> hook) {
|
||||||
super.setHook(hook);
|
super.hook(hook);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,4 +61,44 @@ public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor<Resource> imple
|
||||||
super.ignoreParameter(bagId, paramId);
|
super.ignoreParameter(bagId, paramId);
|
||||||
return this;
|
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<IValue<?>> stateT = element.getTimedState(stateKey);
|
||||||
|
ITimeVariable<IValue<?>> 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<IValue<?>> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,20 @@ public class ToFlatJsonVisitor<T extends StrolchRootElement> {
|
||||||
private boolean withVersion;
|
private boolean withVersion;
|
||||||
|
|
||||||
public ToFlatJsonVisitor() {
|
public ToFlatJsonVisitor() {
|
||||||
this(false);
|
this.ignoredKeys = new MapOfSets<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ToFlatJsonVisitor(boolean withVersion) {
|
public boolean isWithVersion() {
|
||||||
this.withVersion = withVersion;
|
return this.withVersion;
|
||||||
this.ignoredKeys = new MapOfSets<>();
|
}
|
||||||
|
|
||||||
|
public boolean isWithoutElementName() {
|
||||||
|
return this.withoutElementName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToFlatJsonVisitor<T> withVersion() {
|
||||||
|
this.withVersion = true;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ToFlatJsonVisitor<T> withoutElementName() {
|
public ToFlatJsonVisitor<T> withoutElementName() {
|
||||||
|
@ -63,7 +71,7 @@ public class ToFlatJsonVisitor<T extends StrolchRootElement> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ToFlatJsonVisitor<T> setHook(BiConsumer<T, JsonObject> hook) {
|
public ToFlatJsonVisitor<T> hook(BiConsumer<T, JsonObject> hook) {
|
||||||
this.hook = hook;
|
this.hook = hook;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue