[New] Updated *ToFlatJsonVisitors to be more build-pattern-like

This commit is contained in:
Robert von Burg 2017-04-19 22:01:41 +02:00
parent a0371d7272
commit b06274a103
4 changed files with 107 additions and 29 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}