[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 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<Activity> 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<Activity> imple
|
|||
}
|
||||
|
||||
@Override
|
||||
public ActivityToFlatJsonVisitor setHook(BiConsumer<Activity, JsonObject> hook) {
|
||||
super.setHook(hook);
|
||||
public ActivityToFlatJsonVisitor hook(BiConsumer<Activity, JsonObject> hook) {
|
||||
super.hook(hook);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -45,4 +43,11 @@ public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor<Activity> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Order> implements OrderVisitor<JsonObject> {
|
||||
|
||||
|
@ -13,13 +15,10 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> 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<Order> implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public OrderToFlatJsonVisitor setHook(BiConsumer<Order, JsonObject> hook) {
|
||||
super.setHook(hook);
|
||||
public OrderToFlatJsonVisitor hook(BiConsumer<Order, JsonObject> hook) {
|
||||
super.hook(hook);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -45,4 +44,14 @@ public class OrderToFlatJsonVisitor extends ToFlatJsonVisitor<Order> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Resource> implements ResourceVisitor<JsonObject> {
|
||||
|
||||
private Set<String> 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<Resource> imple
|
|||
}
|
||||
|
||||
@Override
|
||||
public ResourceToFlatJsonVisitor setHook(BiConsumer<Resource, JsonObject> hook) {
|
||||
super.setHook(hook);
|
||||
public ResourceToFlatJsonVisitor hook(BiConsumer<Resource, JsonObject> hook) {
|
||||
super.hook(hook);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -45,4 +61,44 @@ public class ResourceToFlatJsonVisitor extends ToFlatJsonVisitor<Resource> 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<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;
|
||||
|
||||
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<T> withVersion() {
|
||||
this.withVersion = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ToFlatJsonVisitor<T> withoutElementName() {
|
||||
|
@ -63,7 +71,7 @@ public class ToFlatJsonVisitor<T extends StrolchRootElement> {
|
|||
return this;
|
||||
}
|
||||
|
||||
public ToFlatJsonVisitor<T> setHook(BiConsumer<T, JsonObject> hook) {
|
||||
public ToFlatJsonVisitor<T> hook(BiConsumer<T, JsonObject> hook) {
|
||||
this.hook = hook;
|
||||
return this;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue