diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingActivityMap.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingActivityMap.java index 0982df5b2..18585c974 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingActivityMap.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingActivityMap.java @@ -53,7 +53,7 @@ public class AuditingActivityMap extends AuditingElementMapFacade impl DBC.PRE.assertNotNull("activityVisitor on query", activityVisitor); query.setActivityVisitor(activity -> { this.read.add(activity); - return activityVisitor.visit(activity); + return activity.accept(activityVisitor); }); return getElementMap().doQuery(tx, query); diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingOrderMap.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingOrderMap.java index f884c85bd..fb9cdef1e 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingOrderMap.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingOrderMap.java @@ -53,7 +53,7 @@ public class AuditingOrderMap extends AuditingElementMapFacade implements DBC.PRE.assertNotNull("orderVisitor on query", orderVisitor); query.setOrderVisitor(order -> { this.read.add(order); - return orderVisitor.visit(order); + return order.accept(orderVisitor); }); return getElementMap().doQuery(tx, query); diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingResourceMap.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingResourceMap.java index 1bf092fe1..7e5832510 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingResourceMap.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/AuditingResourceMap.java @@ -22,7 +22,7 @@ import li.strolch.agent.api.ElementMap; import li.strolch.agent.api.ResourceMap; import li.strolch.model.Resource; import li.strolch.model.query.ResourceQuery; -import li.strolch.model.visitor.ResourceVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.utils.dbc.DBC; @@ -49,11 +49,11 @@ public class AuditingResourceMap extends AuditingElementMapFacade impl @Override public List doQuery(StrolchTransaction tx, ResourceQuery query) { - ResourceVisitor resourceVisitor = query.getResourceVisitor(); + StrolchElementVisitor resourceVisitor = query.getResourceVisitor(); DBC.PRE.assertNotNull("resourceVisitor on query", resourceVisitor); query.setResourceVisitor(resource -> { this.read.add(resource); - return resourceVisitor.visit(resource); + return resource.accept(resourceVisitor); }); return getElementMap().doQuery(tx, query); diff --git a/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/InMemoryQuery.java b/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/InMemoryQuery.java index d497839a3..f3a3606b1 100644 --- a/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/InMemoryQuery.java +++ b/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/InMemoryQuery.java @@ -33,14 +33,14 @@ public class InMemoryQuery { private Navigator navigator; private Selector selector; - private StrolchElementVisitor elementVisitor; + private StrolchElementVisitor elementVisitor; private Comparator comparator; public InMemoryQuery() { // empty constructor } - public InMemoryQuery(Navigator navigator, Selector selector, StrolchElementVisitor elementVisitor, + public InMemoryQuery(Navigator navigator, Selector selector, StrolchElementVisitor elementVisitor, Comparator comparator) { this.navigator = navigator; this.selector = selector; @@ -68,7 +68,7 @@ public class InMemoryQuery { * @param elementVisitor * the elementVisitor to set */ - public void setElementVisitor(StrolchElementVisitor elementVisitor) { + public void setElementVisitor(StrolchElementVisitor elementVisitor) { this.elementVisitor = elementVisitor; } @@ -86,7 +86,7 @@ public class InMemoryQuery { while (iter.hasNext()) { T element = iter.next(); if (this.selector.select(element)) { - U returnValue = this.elementVisitor.visit(element); + U returnValue = element.accept(this.elementVisitor); DBC.INTERIM.assertNotNull("Visitor may not return null in query!", returnValue); //$NON-NLS-1$ result.add(returnValue); } diff --git a/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java b/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java index 6d790ebb9..7a2caf5f2 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java @@ -3,7 +3,6 @@ package li.strolch.model; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import li.strolch.model.json.StrolchElementToFlatJsonVisitor; import li.strolch.model.json.StrolchElementToJsonVisitor; import li.strolch.model.xml.StrolchElementToXmlStringVisitor; @@ -21,7 +20,7 @@ public abstract class AbstractStrolchRootElement extends GroupedParameterizedEle @Override public String toXmlString() { - return this.accept(new StrolchElementToXmlStringVisitor()); + return accept(new StrolchElementToXmlStringVisitor()); } @Override @@ -33,6 +32,6 @@ public abstract class AbstractStrolchRootElement extends GroupedParameterizedEle @Override public String toFlatJsonString() { Gson gson = new GsonBuilder().setPrettyPrinting().create(); - return gson.toJson(this.accept(new StrolchElementToFlatJsonVisitor())); + return gson.toJson(this.accept(new StrolchElementToJsonVisitor().flat())); } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/Order.java b/li.strolch.model/src/main/java/li/strolch/model/Order.java index 83f4ff633..2971e1b27 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/Order.java +++ b/li.strolch.model/src/main/java/li/strolch/model/Order.java @@ -22,7 +22,7 @@ import li.strolch.exception.StrolchPolicyException; import li.strolch.model.Locator.LocatorBuilder; import li.strolch.model.policy.PolicyDef; import li.strolch.model.policy.PolicyDefs; -import li.strolch.model.visitor.StrolchRootElementVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.utils.iso8601.ISO8601FormatFactory; /** @@ -188,7 +188,7 @@ public class Order extends AbstractStrolchRootElement implements StrolchRootElem } @Override - public T accept(StrolchRootElementVisitor visitor) { + public T accept(StrolchElementVisitor visitor) { return visitor.visitOrder(this); } diff --git a/li.strolch.model/src/main/java/li/strolch/model/Resource.java b/li.strolch.model/src/main/java/li/strolch/model/Resource.java index bcf913ade..5db1d3efa 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/Resource.java +++ b/li.strolch.model/src/main/java/li/strolch/model/Resource.java @@ -31,7 +31,7 @@ import li.strolch.model.policy.PolicyDef; import li.strolch.model.policy.PolicyDefs; import li.strolch.model.timedstate.StrolchTimedState; import li.strolch.model.timevalue.IValue; -import li.strolch.model.visitor.StrolchRootElementVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; /** * @author Robert von Burg @@ -208,7 +208,7 @@ public class Resource extends AbstractStrolchRootElement implements StrolchRootE } @Override - public T accept(StrolchRootElementVisitor visitor) { + public T accept(StrolchElementVisitor visitor) { return visitor.visitResource(this); } diff --git a/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java b/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java index 1d5ae4c50..5a774a112 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java @@ -15,6 +15,7 @@ */ package li.strolch.model; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.model.visitor.StrolchRootElementVisitor; /** @@ -68,7 +69,7 @@ public interface StrolchRootElement extends StrolchElement, PolicyContainer, Par * * @return the result of the visitation */ - public T accept(StrolchRootElementVisitor visitor); + public T accept(StrolchElementVisitor visitor); /** * Formats this {@link StrolchRootElement} as an XML string diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java index a5717edca..ec0b5f4ee 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java @@ -310,6 +310,6 @@ public class Action extends GroupedParameterizedElement implements IActivityElem @Override public T accept(IActivityElementVisitor visitor) { - return visitor.visit(this); + return visitor.visitAction(this); } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java index 361073dd3..1b2c51c09 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java @@ -38,7 +38,7 @@ import li.strolch.model.parameter.Parameter; import li.strolch.model.policy.PolicyDef; import li.strolch.model.policy.PolicyDefs; import li.strolch.model.visitor.IActivityElementVisitor; -import li.strolch.model.visitor.StrolchRootElementVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.utils.dbc.DBC; /** @@ -373,13 +373,13 @@ public class Activity extends AbstractStrolchRootElement } @Override - public T accept(StrolchRootElementVisitor visitor) { + public T accept(StrolchElementVisitor visitor) { return visitor.visitActivity(this); } @Override public T accept(IActivityElementVisitor visitor) { - return visitor.visit(this); + return visitor.visitActivity(this); } @Override 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 deleted file mode 100644 index be0f5f248..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToFlatJsonVisitor.java +++ /dev/null @@ -1,53 +0,0 @@ -package li.strolch.model.json; - -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; - -public class ActivityToFlatJsonVisitor extends ToFlatJsonVisitor implements ActivityVisitor { - - public ActivityToFlatJsonVisitor() { - super(); - } - - @Override - public ActivityToFlatJsonVisitor withVersion() { - super.withVersion(); - return this; - } - - @Override - public ActivityToFlatJsonVisitor withoutElementName() { - super.withoutElementName(); - return this; - } - - @Override - public ActivityToFlatJsonVisitor hook(BiConsumer hook) { - super.hook(hook); - return this; - } - - @Override - public ActivityToFlatJsonVisitor ignoreBag(String bagId) { - super.ignoreBag(bagId); - return this; - } - - @Override - public ActivityToFlatJsonVisitor ignoreParameter(String bagId, String paramId) { - 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/ActivityToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToJsonVisitor.java deleted file mode 100644 index c593d6e44..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToJsonVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -package li.strolch.model.json; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; - -import li.strolch.model.activity.Activity; -import li.strolch.model.visitor.ActivityVisitor; - -public class ActivityToJsonVisitor extends StrolchElementToJsonVisitor implements ActivityVisitor { - - private JsonObject jsonObject; - - public JsonObject getJsonObject() { - return this.jsonObject; - } - - @Override - public JsonObject visit(Activity element) { - this.jsonObject = toJson(element); - return this.jsonObject; - } - - public static String toJsonString(Activity element) { - ActivityToJsonVisitor visitor = new ActivityToJsonVisitor(); - JsonObject jsonObject = visitor.visit(element); - String entity = new Gson().toJson(jsonObject); - return entity; - } -} 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 deleted file mode 100644 index 177fc4766..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/OrderToFlatJsonVisitor.java +++ /dev/null @@ -1,57 +0,0 @@ -package li.strolch.model.json; - -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 { - - public OrderToFlatJsonVisitor() { - super(); - } - - @Override - public OrderToFlatJsonVisitor withVersion() { - super.withVersion(); - return this; - } - - @Override - public OrderToFlatJsonVisitor withoutElementName() { - super.withoutElementName(); - return this; - } - - @Override - public OrderToFlatJsonVisitor hook(BiConsumer hook) { - super.hook(hook); - return this; - } - - @Override - public OrderToFlatJsonVisitor ignoreBag(String bagId) { - super.ignoreBag(bagId); - return this; - } - - @Override - public OrderToFlatJsonVisitor ignoreParameter(String bagId, String paramId) { - 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/OrderToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/OrderToJsonVisitor.java deleted file mode 100644 index 5878a7552..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/OrderToJsonVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -package li.strolch.model.json; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; - -import li.strolch.model.Order; -import li.strolch.model.visitor.OrderVisitor; - -public class OrderToJsonVisitor extends StrolchElementToJsonVisitor implements OrderVisitor { - - private JsonObject jsonObject; - - public JsonObject getJsonObject() { - return this.jsonObject; - } - - @Override - public JsonObject visit(Order element) { - this.jsonObject = toJson(element); - return this.jsonObject; - } - - public static String toJsonString(Order element) { - OrderToJsonVisitor visitor = new OrderToJsonVisitor(); - JsonObject jsonObject = visitor.visit(element); - String entity = new Gson().toJson(jsonObject); - return entity; - } -} 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 deleted file mode 100644 index d31b488ee..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToFlatJsonVisitor.java +++ /dev/null @@ -1,104 +0,0 @@ -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(); - this.ignoredStates = new HashSet<>(); - } - - @Override - public ResourceToFlatJsonVisitor withVersion() { - super.withVersion(); - return this; - } - - public ResourceToFlatJsonVisitor withoutTimedStates() { - this.withoutTimedStates = true; - return this; - } - - @Override - public ResourceToFlatJsonVisitor withoutElementName() { - super.withoutElementName(); - return this; - } - - @Override - public ResourceToFlatJsonVisitor hook(BiConsumer hook) { - super.hook(hook); - return this; - } - - @Override - public ResourceToFlatJsonVisitor ignoreBag(String bagId) { - super.ignoreBag(bagId); - return this; - } - - @Override - public ResourceToFlatJsonVisitor ignoreParameter(String bagId, String paramId) { - 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/ResourceToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToJsonVisitor.java deleted file mode 100644 index a02acc466..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/ResourceToJsonVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -package li.strolch.model.json; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; - -import li.strolch.model.Resource; -import li.strolch.model.visitor.ResourceVisitor; - -public class ResourceToJsonVisitor extends StrolchElementToJsonVisitor implements ResourceVisitor { - - private JsonObject jsonObject; - - public JsonObject getJsonObject() { - return this.jsonObject; - } - - @Override - public JsonObject visit(Resource element) { - this.jsonObject = toJson(element); - return this.jsonObject; - } - - public static String toJsonString(Resource element) { - ResourceToJsonVisitor visitor = new ResourceToJsonVisitor(); - JsonObject jsonObject = visitor.visit(element); - String entity = new Gson().toJson(jsonObject); - return entity; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToFlatJsonVisitor.java deleted file mode 100644 index 03a7f0a2f..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToFlatJsonVisitor.java +++ /dev/null @@ -1,26 +0,0 @@ -package li.strolch.model.json; - -import com.google.gson.JsonObject; - -import li.strolch.model.Order; -import li.strolch.model.Resource; -import li.strolch.model.activity.Activity; -import li.strolch.model.visitor.StrolchRootElementVisitor; - -public class StrolchElementToFlatJsonVisitor implements StrolchRootElementVisitor { - - @Override - public JsonObject visitOrder(Order order) { - return new OrderToFlatJsonVisitor().toJson(order); - } - - @Override - public JsonObject visitResource(Resource resource) { - return new ResourceToFlatJsonVisitor().toJson(resource); - } - - @Override - public JsonObject visitActivity(Activity activity) { - return new ActivityToFlatJsonVisitor().toJson(activity); - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java index 435b48d26..423f9b9f1 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java @@ -1,13 +1,18 @@ package li.strolch.model.json; +import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; +import java.util.Set; import java.util.SortedSet; +import java.util.function.BiConsumer; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import li.strolch.exception.StrolchModelException; import li.strolch.model.AbstractStrolchElement; import li.strolch.model.GroupedParameterizedElement; import li.strolch.model.Order; @@ -16,6 +21,7 @@ import li.strolch.model.PolicyContainer; import li.strolch.model.Resource; import li.strolch.model.StrolchModelConstants; import li.strolch.model.StrolchRootElement; +import li.strolch.model.StrolchValueType; import li.strolch.model.Tags; import li.strolch.model.Version; import li.strolch.model.activity.Action; @@ -26,12 +32,100 @@ import li.strolch.model.policy.PolicyDef; import li.strolch.model.policy.PolicyDefs; 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.timevalue.IValueChange; +import li.strolch.model.visitor.IActivityElementVisitor; import li.strolch.model.visitor.StrolchRootElementVisitor; +import li.strolch.utils.collections.MapOfSets; import li.strolch.utils.iso8601.ISO8601FormatFactory; -public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor { +public class StrolchElementToJsonVisitor + implements StrolchRootElementVisitor, IActivityElementVisitor { + + private MapOfSets ignoredKeys; + private Set ignoredStates; + + private BiConsumer resourceHook; + private BiConsumer orderHook; + private BiConsumer activityHook; + private BiConsumer actionHook; + + private boolean flat; + private boolean withoutElementName; + private boolean withVersion; + private boolean withoutPolicies; + + public StrolchElementToJsonVisitor() { + this.ignoredKeys = new MapOfSets<>(); + this.ignoredStates = new HashSet<>(); + } + + public boolean isFlat() { + return this.flat; + } + + public boolean isWithVersion() { + return this.withVersion; + } + + public boolean isWithoutElementName() { + return this.withoutElementName; + } + + public boolean isWithoutPolicies() { + return this.withoutPolicies; + } + + public StrolchElementToJsonVisitor withVersion() { + this.withVersion = true; + return this; + } + + public StrolchElementToJsonVisitor withoutElementName() { + this.withoutElementName = true; + return this; + } + + public StrolchElementToJsonVisitor withoutPolicies() { + this.withoutPolicies = true; + return this; + } + + public StrolchElementToJsonVisitor flat() { + this.flat = true; + return this; + } + + public StrolchElementToJsonVisitor ignoreBag(String bagId) { + this.ignoredKeys.addSet(bagId, Collections.emptySet()); + return this; + } + + public StrolchElementToJsonVisitor ignoreParameter(String bagId, String paramId) { + this.ignoredKeys.addElement(bagId, paramId); + return this; + } + + public StrolchElementToJsonVisitor resourceHook(BiConsumer hook) { + this.resourceHook = hook; + return this; + } + + public StrolchElementToJsonVisitor orderHook(BiConsumer hook) { + this.orderHook = hook; + return this; + } + + public StrolchElementToJsonVisitor activityHook(BiConsumer hook) { + this.activityHook = hook; + return this; + } + + public StrolchElementToJsonVisitor actionHook(BiConsumer hook) { + this.actionHook = hook; + return this; + } @Override public JsonObject visitResource(Resource resource) { @@ -48,6 +142,11 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor> iter = element.elementIterator(); if (iter.hasNext()) { @@ -141,9 +249,12 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor>> iter = element.getChanges().iterator(); if (iter.hasNext()) { @@ -171,6 +282,8 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor bagKeySet = element.getParameterBagKeySet(); + for (String bagId : bagKeySet) { + + // see if we have to ignore this bag i.e. empty set existing + Set ignoredParamIds = this.ignoredKeys.getSet(bagId); + if (ignoredParamIds != null && ignoredParamIds.isEmpty()) + continue; + + ParameterBag parameterBag = element.getParameterBag(bagId); + + Set parameterKeySet = parameterBag.getParameterKeySet(); + for (String paramId : parameterKeySet) { + + // see if this parameter must be ignored + if (ignoredParamIds != null && ignoredParamIds.contains(paramId)) + continue; + + if (rootJ.has(paramId)) { + throw new StrolchModelException( + "JsonObject already has a member with ID " + paramId + ": " + parameterBag.getLocator()); + } + + Parameter param = parameterBag.getParameter(paramId); + + StrolchValueType type = StrolchValueType.parse(param.getType()); + if (type.isBoolean()) { + rootJ.addProperty(paramId, (Boolean) param.getValue()); + } else if (type.isNumber()) { + rootJ.addProperty(paramId, (Number) param.getValue()); + } else { + rootJ.addProperty(paramId, param.getValueAsString()); + } + } + } + } + + protected void addParameterFull(GroupedParameterizedElement element, JsonObject rootJ) { if (!element.hasParameterBags()) return; @@ -239,7 +400,14 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor> state = element.getTimedState(stateKey); JsonObject stateJ = new JsonObject(); @@ -273,9 +446,45 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor> 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); + } + } + + protected void addVersion(StrolchRootElement element, JsonObject rootJ) { if (!element.hasVersion()) return; + if (!isWithVersion()) + return; Version version = element.getVersion(); @@ -286,7 +495,6 @@ public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor - * Maps a given {@link StrolchRootElement} to a {@link JsonObject}. All {@link Parameter Parameters} are mapped to a - * member of the {@link JsonObject}, {@link ParameterBag ParameterBags} are thus removed - *

- * - *

- * To ignore {@link Parameter Parameters} or {@link ParameterBag ParameterBags} use the - * {@link #ignoreParameter(String, String)} and {@link #ignoreBag(String)} methods - *

- * - *

- * The mapping can be extended by setting hook: - *

- * - *
- * visitor.setHook((element, jsonObject) -> {
- * 	// do work
- * });
- * 
- * - * @author Robert von Burg - */ -public class ToFlatJsonVisitor { - - private MapOfSets ignoredKeys; - private BiConsumer hook; - private boolean withoutElementName; - private boolean withVersion; - - public ToFlatJsonVisitor() { - this.ignoredKeys = new MapOfSets<>(); - } - - public boolean isWithVersion() { - return this.withVersion; - } - - public boolean isWithoutElementName() { - return this.withoutElementName; - } - - public ToFlatJsonVisitor withVersion() { - this.withVersion = true; - return this; - } - - public ToFlatJsonVisitor withoutElementName() { - this.withoutElementName = true; - return this; - } - - public ToFlatJsonVisitor hook(BiConsumer hook) { - this.hook = hook; - return this; - } - - public ToFlatJsonVisitor ignoreBag(String bagId) { - this.ignoredKeys.addSet(bagId, Collections.emptySet()); - return this; - } - - public ToFlatJsonVisitor ignoreParameter(String bagId, String paramId) { - this.ignoredKeys.addElement(bagId, paramId); - return this; - } - - protected JsonObject toJson(T element) { - - JsonObject jsonObject = new JsonObject(); - - jsonObject.addProperty(ID, element.getId()); - if (!this.withoutElementName) - jsonObject.addProperty(NAME, element.getName()); - jsonObject.addProperty(TYPE, element.getType()); - jsonObject.addProperty(OBJECT_TYPE, element.getClass().getSimpleName()); - - Set bagKeySet = element.getParameterBagKeySet(); - for (String bagId : bagKeySet) { - - // see if we have to ignore this bag i.e. empty set existing - Set ignoredParamIds = this.ignoredKeys.getSet(bagId); - if (ignoredParamIds != null && ignoredParamIds.isEmpty()) - continue; - - ParameterBag parameterBag = element.getParameterBag(bagId); - - Set parameterKeySet = parameterBag.getParameterKeySet(); - for (String paramId : parameterKeySet) { - - // see if this parameter must be ignored - if (ignoredParamIds != null && ignoredParamIds.contains(paramId)) - continue; - - if (jsonObject.has(paramId)) { - throw new StrolchModelException( - "JsonObject already has a member with ID " + paramId + ": " + parameterBag.getLocator()); - } - - Parameter param = parameterBag.getParameter(paramId); - - StrolchValueType type = StrolchValueType.parse(param.getType()); - if (type.isBoolean()) { - jsonObject.addProperty(paramId, (Boolean) param.getValue()); - } else if (type.isNumber()) { - jsonObject.addProperty(paramId, (Number) param.getValue()); - } else { - jsonObject.addProperty(paramId, param.getValueAsString()); - } - } - } - - if (this.hook != null) - this.hook.accept(element, jsonObject); - - if (this.withVersion) - addVersion(element, jsonObject); - - return jsonObject; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/query/ActivityQuery.java b/li.strolch.model/src/main/java/li/strolch/model/query/ActivityQuery.java index ccac01566..c17207682 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/query/ActivityQuery.java +++ b/li.strolch.model/src/main/java/li/strolch/model/query/ActivityQuery.java @@ -19,6 +19,7 @@ import li.strolch.model.activity.Action; import li.strolch.model.activity.Activity; import li.strolch.model.query.ordering.StrolchQueryOrdering; import li.strolch.model.visitor.ActivityVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.utils.dbc.DBC; /** @@ -73,6 +74,12 @@ public class ActivityQuery extends StrolchElementQuery return this; } + public ActivityQuery setVisitor(StrolchElementVisitor visitor) { + DBC.PRE.assertNotNull("visitor", visitor); + this.activityVisitor = visitor.asActivityVisitor(); + return this; + } + public ActivityQuery setActivityVisitor(ActivityVisitor activityVisitor) { DBC.PRE.assertNotNull("activityVisitor", activityVisitor); this.activityVisitor = activityVisitor; diff --git a/li.strolch.model/src/main/java/li/strolch/model/query/OrderQuery.java b/li.strolch.model/src/main/java/li/strolch/model/query/OrderQuery.java index 9f3b437a0..be6f1a396 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/query/OrderQuery.java +++ b/li.strolch.model/src/main/java/li/strolch/model/query/OrderQuery.java @@ -19,6 +19,7 @@ import li.strolch.model.Order; import li.strolch.model.parameter.Parameter; import li.strolch.model.query.ordering.StrolchQueryOrdering; import li.strolch.model.visitor.OrderVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.utils.dbc.DBC; /** @@ -73,6 +74,12 @@ public class OrderQuery extends StrolchElementQuery { return this; } + public OrderQuery setVisitor(StrolchElementVisitor visitor) { + DBC.PRE.assertNotNull("visitor", visitor); + this.orderVisitor = visitor.asOrderVisitor(); + return this; + } + public OrderQuery setOrderVisitor(OrderVisitor orderVisitor) { DBC.PRE.assertNotNull("orderVisitor", orderVisitor); this.orderVisitor = orderVisitor; diff --git a/li.strolch.model/src/main/java/li/strolch/model/query/ResourceQuery.java b/li.strolch.model/src/main/java/li/strolch/model/query/ResourceQuery.java index b15340a8f..6bd0e0025 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/query/ResourceQuery.java +++ b/li.strolch.model/src/main/java/li/strolch/model/query/ResourceQuery.java @@ -19,6 +19,7 @@ import li.strolch.model.Resource; import li.strolch.model.parameter.Parameter; import li.strolch.model.query.ordering.StrolchQueryOrdering; import li.strolch.model.visitor.ResourceVisitor; +import li.strolch.model.visitor.StrolchElementVisitor; import li.strolch.utils.dbc.DBC; /** @@ -73,6 +74,12 @@ public class ResourceQuery extends StrolchElementQuery return this; } + public ResourceQuery setVisitor(StrolchElementVisitor visitor) { + DBC.PRE.assertNotNull("visitor", visitor); + this.resourceVisitor = visitor.asResourceVisitor(); + return this; + } + public ResourceQuery setResourceVisitor(ResourceVisitor resourceVisitor) { DBC.PRE.assertNotNull("resourceVisitor", resourceVisitor); this.resourceVisitor = resourceVisitor; diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityDeepEqualsVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityDeepEqualsVisitor.java deleted file mode 100644 index 88a688b00..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityDeepEqualsVisitor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import java.util.List; - -import li.strolch.model.Locator; -import li.strolch.model.activity.Activity; - -/** - * @author Robert von Burg - */ -public class ActivityDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements - ActivityVisitor> { - - private Activity sourceActivity; - - public ActivityDeepEqualsVisitor(Activity sourceActivity) { - this.sourceActivity = sourceActivity; - } - - @Override - public List visit(Activity dstActivity) { - deepEquals(this.sourceActivity, dstActivity); - return getMismatchedLocators(); - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityVisitor.java index e62bbccc5..8f793ce5a 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/ActivityVisitor.java @@ -15,14 +15,28 @@ */ package li.strolch.model.visitor; -import li.strolch.model.activity.Activity; +import li.strolch.model.Order; +import li.strolch.model.Resource; +import li.strolch.model.activity.Action; /** * @author Robert von Burg * @param */ -public interface ActivityVisitor extends StrolchElementVisitor { +public interface ActivityVisitor extends StrolchElementVisitor { @Override - public U visit(Activity element); + public default U visitAction(Action action) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + action.getClass()); + } + + @Override + public default U visitOrder(Order order) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + order.getClass()); + } + + @Override + public default U visitResource(Resource resource) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + resource.getClass()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/IActivityElementVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/IActivityElementVisitor.java index 65e6496c1..4ee02dcc4 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/IActivityElementVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/IActivityElementVisitor.java @@ -1,11 +1,17 @@ package li.strolch.model.visitor; -import li.strolch.model.activity.Action; -import li.strolch.model.activity.Activity; +import li.strolch.model.Order; +import li.strolch.model.Resource; -public interface IActivityElementVisitor { +public interface IActivityElementVisitor extends StrolchElementVisitor { - public T visit(Activity activity); + @Override + public default T visitOrder(Order order) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + order.getClass()); + } - public T visit(Action action); + @Override + public default T visitResource(Resource resource) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + resource.getClass()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyActivityVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyActivityVisitor.java deleted file mode 100644 index 3a7f23496..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyActivityVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2015 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import li.strolch.model.activity.Activity; - -/** - * @author Robert von Burg - */ -public class NoStrategyActivityVisitor implements ActivityVisitor { - - @Override - public Activity visit(Activity element) { - return element; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyOrderVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyOrderVisitor.java deleted file mode 100644 index c81c87a45..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyOrderVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import li.strolch.model.Order; - -/** - * @author Robert von Burg - */ -public class NoStrategyOrderVisitor implements OrderVisitor { - - @Override - public Order visit(Order element) { - return element; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyResourceVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyResourceVisitor.java deleted file mode 100644 index 72494e12d..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyResourceVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import li.strolch.model.Resource; - -/** - * @author Robert von Burg - */ -public class NoStrategyResourceVisitor implements ResourceVisitor { - - @Override - public Resource visit(Resource element) { - return element; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyVisitor.java deleted file mode 100644 index 050cf634a..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/NoStrategyVisitor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import li.strolch.model.StrolchElement; - -/** - * @author Robert von Burg - */ -public class NoStrategyVisitor implements StrolchElementVisitor { - - @Override - public T visit(T element) { - return element; - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderDeepEqualsVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderDeepEqualsVisitor.java deleted file mode 100644 index 68accf487..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderDeepEqualsVisitor.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import java.util.List; - -import li.strolch.model.Locator; -import li.strolch.model.Order; - -/** - * @author Robert von Burg - */ -public class OrderDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements OrderVisitor> { - - private Order srcOrder; - - public OrderDeepEqualsVisitor(Order srcOrder) { - this.srcOrder = srcOrder; - } - - @Override - public List visit(Order dstOrder) { - deepEquals(this.srcOrder, dstOrder); - return getMismatchedLocators(); - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderVisitor.java index 74f678783..d07036802 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/OrderVisitor.java @@ -15,13 +15,27 @@ */ package li.strolch.model.visitor; -import li.strolch.model.Order; +import li.strolch.model.Resource; +import li.strolch.model.activity.Action; +import li.strolch.model.activity.Activity; /** * @author Robert von Burg */ -public interface OrderVisitor extends StrolchElementVisitor { +public interface OrderVisitor extends StrolchElementVisitor { @Override - public U visit(Order element); + public default U visitAction(Action action) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + action.getClass()); + } + + @Override + public default U visitActivity(Activity activity) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + activity.getClass()); + } + + @Override + public default U visitResource(Resource resource) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + resource.getClass()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceDeepEqualsVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceDeepEqualsVisitor.java deleted file mode 100644 index 94670462d..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceDeepEqualsVisitor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package li.strolch.model.visitor; - -import java.util.List; - -import li.strolch.model.Locator; -import li.strolch.model.Resource; - -/** - * @author Robert von Burg - */ -public class ResourceDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements - ResourceVisitor> { - - private Resource srcRes; - - public ResourceDeepEqualsVisitor(Resource sourceRes) { - this.srcRes = sourceRes; - } - - @Override - public List visit(Resource dstRes) { - deepEquals(this.srcRes, dstRes); - return getMismatchedLocators(); - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceVisitor.java index 76cebedde..dca304c3e 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/ResourceVisitor.java @@ -15,14 +15,28 @@ */ package li.strolch.model.visitor; -import li.strolch.model.Resource; +import li.strolch.model.Order; +import li.strolch.model.activity.Action; +import li.strolch.model.activity.Activity; /** * @author Robert von Burg * @param */ -public interface ResourceVisitor extends StrolchElementVisitor { +public interface ResourceVisitor extends StrolchElementVisitor { @Override - public U visit(Resource element); + public default U visitAction(Action action) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + action.getClass()); + } + + @Override + public default U visitActivity(Activity activity) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + activity.getClass()); + } + + @Override + public default U visitOrder(Order order) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + order.getClass()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementDeepEqualsVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementDeepEqualsVisitor.java index fe958ec88..89d1885ee 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementDeepEqualsVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementDeepEqualsVisitor.java @@ -47,11 +47,13 @@ import li.strolch.utils.dbc.DBC; * * @author Robert von Burg */ -public class StrolchElementDeepEqualsVisitor { +public class StrolchElementDeepEqualsVisitor implements StrolchElementVisitor> { private List mismatchedLocators; + private StrolchElement srcElement; - public StrolchElementDeepEqualsVisitor() { + public StrolchElementDeepEqualsVisitor(StrolchElement srcElement) { + this.srcElement = srcElement; this.mismatchedLocators = new ArrayList<>(); } @@ -335,20 +337,42 @@ public class StrolchElementDeepEqualsVisitor { } public static boolean isEqual(Order srcOrder, Order dstOrder) { - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(srcOrder); - visitor.visit(dstOrder); - return visitor.isEqual(); + return srcOrder.accept(new StrolchElementDeepEqualsVisitor(dstOrder)).isEmpty(); } public static boolean isEqual(Resource srcRes, Resource dstRes) { - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(srcRes); - visitor.visit(dstRes); - return visitor.isEqual(); + return srcRes.accept(new StrolchElementDeepEqualsVisitor(dstRes)).isEmpty(); } public static boolean isEqual(Activity srcAct, Activity dstAct) { - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(srcAct); - visitor.visit(dstAct); - return visitor.isEqual(); + return srcAct.accept(new StrolchElementDeepEqualsVisitor(dstAct)).isEmpty(); + } + + @Override + public List visitOrder(Order order) { + DBC.PRE.assertEquals("Can't compare apples with pairs =)", this.srcElement.getClass(), order.getClass()); + deepEquals((Order) this.srcElement, order); + return getMismatchedLocators(); + } + + @Override + public List visitResource(Resource resource) { + DBC.PRE.assertEquals("Can't compare apples with pairs =)", this.srcElement.getClass(), resource.getClass()); + deepEquals((Resource) this.srcElement, resource); + return getMismatchedLocators(); + } + + @Override + public List visitActivity(Activity activity) { + DBC.PRE.assertEquals("Can't compare apples with pairs =)", this.srcElement.getClass(), activity.getClass()); + deepEquals((Activity) this.srcElement, activity); + return getMismatchedLocators(); + } + + @Override + public List visitAction(Action action) { + DBC.PRE.assertEquals("Can't compare apples with pairs =)", this.srcElement.getClass(), action.getClass()); + deepEquals((Action) this.srcElement, action); + return getMismatchedLocators(); } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java index 30d23ba9b..5764947eb 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java @@ -15,12 +15,33 @@ */ package li.strolch.model.visitor; -import li.strolch.model.StrolchElement; +import li.strolch.model.Order; +import li.strolch.model.Resource; +import li.strolch.model.activity.Action; +import li.strolch.model.activity.Activity; /** * @author Robert von Burg */ -public interface StrolchElementVisitor extends StrolchVisitor { +public interface StrolchElementVisitor extends StrolchVisitor { - public U visit(T element); + public T visitOrder(Order order); + + public T visitResource(Resource resource); + + public T visitActivity(Activity activity); + + public T visitAction(Action action); + + public default ResourceVisitor asResourceVisitor() { + return resource -> this.visitResource(resource); + } + + public default OrderVisitor asOrderVisitor() { + return order -> this.visitOrder(order); + } + + public default ActivityVisitor asActivityVisitor() { + return activity -> this.visitActivity(activity); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java index 3eab9ca85..5b9a8dab2 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java @@ -17,16 +17,22 @@ package li.strolch.model.visitor; import li.strolch.model.Order; import li.strolch.model.Resource; +import li.strolch.model.activity.Action; import li.strolch.model.activity.Activity; /** * @author Robert von Burg */ -public interface StrolchRootElementVisitor extends StrolchVisitor { +public interface StrolchRootElementVisitor extends StrolchElementVisitor { public T visitOrder(Order order); public T visitResource(Resource resource); public T visitActivity(Activity activity); + + @Override + public default T visitAction(Action action) { + throw new UnsupportedOperationException(getClass().getName() + " can not handle " + action.getClass()); + } } diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java index ae4a31480..0f1852c79 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java @@ -96,9 +96,7 @@ import li.strolch.model.timevalue.IValueChange; import li.strolch.model.timevalue.impl.BooleanValue; import li.strolch.model.timevalue.impl.IntegerValue; import li.strolch.model.timevalue.impl.ValueChange; -import li.strolch.model.visitor.ActivityDeepEqualsVisitor; -import li.strolch.model.visitor.OrderDeepEqualsVisitor; -import li.strolch.model.visitor.ResourceDeepEqualsVisitor; +import li.strolch.model.visitor.StrolchElementDeepEqualsVisitor; @SuppressWarnings("nls") public class ModelTest { @@ -242,18 +240,18 @@ public class ModelTest { public void shouldPerformDeepActivityEquals() { Activity srcActivity = createActivity("@act01", "Test Activity", "MyType", TimeOrdering.SERIES); Activity dstActivity = createActivity("@act01", "Test Activity", "MyType", TimeOrdering.SERIES); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(srcActivity); - visitor.visit(dstActivity); - assertTrue("Same Activity should be deep equal!", visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcActivity); + List mismatches = dstActivity.accept(visitor); + assertTrue("Same Activity should be deep equal!", mismatches.isEmpty()); } @Test public void shouldPerformActivityClone() { Activity srcActivity = createActivity("@act01", "Test Activity", "MyType", TimeOrdering.SERIES); Activity dstActivity = srcActivity.getClone(); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(srcActivity); - visitor.visit(dstActivity); - assertTrue("Cloned Activity should be deep equal: " + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcActivity); + List mismatches = dstActivity.accept(visitor); + assertTrue("Cloned Activity should be deep equal: " + mismatches, mismatches.isEmpty()); } @Test @@ -267,10 +265,10 @@ public class ModelTest { FloatParameter fParam = bag.getParameter(PARAM_FLOAT_ID); fParam.setValue(23434234.234); fParam.setName("Ohla"); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(srcActivity); - visitor.visit(dstActivity); - assertFalse("Activity should not be same if something has been changed", visitor.isEqual()); - assertEquals("Multiple changes should be registered", 6, visitor.getMismatchedLocators().size()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcActivity); + List mismatches = dstActivity.accept(visitor); + assertFalse("Activity should not be same if something has been changed", mismatches.isEmpty()); + assertEquals("Multiple changes should be registered", 6, mismatches.size()); } @Test @@ -297,28 +295,28 @@ public class ModelTest { action = activity.getElement("action1_" + "@act01"); action.addChange(new ValueChange<>(1234567890L, new IntegerValue(12345), STATE_INTEGER_ID)); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(srcActivity); - visitor.visit(dstActivity); - assertFalse("Activity should not be same if something has been changed", visitor.isEqual()); - assertEquals("Multiple changes should be registered", 9, visitor.getMismatchedLocators().size()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcActivity); + List mismatches = dstActivity.accept(visitor); + assertFalse("Activity should not be same if something has been changed", mismatches.isEmpty()); + assertEquals("Multiple changes should be registered", 9, mismatches.size()); } @Test public void shouldPerformDeepResourceEquals() { Resource srcRes = createResource("@res01", "Test resource", "MyType"); Resource dstRes = createResource("@res01", "Test resource", "MyType"); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(srcRes); - visitor.visit(dstRes); - assertTrue("Same Resource should be deep equal!", visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcRes); + List mismatches = dstRes.accept(visitor); + assertTrue("Same Resource should be deep equal!", mismatches.isEmpty()); } @Test public void shouldPerformResourceClone() { Resource srcRes = createResource("@res01", "Test resource", "MyType"); Resource dstRes = srcRes.getClone(); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(srcRes); - visitor.visit(dstRes); - assertTrue("Cloned Resource should be deep equal!", visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcRes); + List mismatches = dstRes.accept(visitor); + assertTrue("Cloned Resource should be deep equal!", mismatches.isEmpty()); } @Test @@ -330,10 +328,10 @@ public class ModelTest { FloatParameter fParam = bag.getParameter(PARAM_FLOAT_ID); fParam.setValue(23434234.234); fParam.setName("Ohla"); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(srcRes); - visitor.visit(dstRes); - assertFalse("Resource should not be same if param is changed!", visitor.isEqual()); - assertEquals("Multiple changes should be registered", 3, visitor.getMismatchedLocators().size()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcRes); + List mismatches = dstRes.accept(visitor); + assertFalse("Resource should not be same if param is changed!", mismatches.isEmpty()); + assertEquals("Multiple changes should be registered", 3, mismatches.size()); } @Test @@ -343,10 +341,10 @@ public class ModelTest { BooleanTimedState timedState = dstRes.getTimedState(STATE_BOOLEAN_ID); timedState.applyChange(new ValueChange<>(System.currentTimeMillis(), new BooleanValue(Boolean.FALSE))); timedState.setName("Ohla"); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(srcRes); - visitor.visit(dstRes); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcRes); + List mismatches = dstRes.accept(visitor); assertFalse("Resource should not be same if param is changed!", visitor.isEqual()); - assertEquals("Multiple change should be registered!", 2, visitor.getMismatchedLocators().size()); + assertEquals("Multiple change should be registered!", 2, mismatches.size()); } @Test @@ -354,9 +352,9 @@ public class ModelTest { Date date = new Date(); Order srcOrder = createOrder("@ord01", "Test Order", "MyType", date, State.CREATED); Order dstOrder = createOrder("@ord01", "Test Order", "MyType", date, State.CREATED); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(srcOrder); - visitor.visit(dstOrder); - assertTrue("Same Order should be deep equal: " + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcOrder); + List mismatches = dstOrder.accept(visitor); + assertTrue("Same Order should be deep equal: " + mismatches, visitor.isEqual()); } @Test @@ -364,9 +362,9 @@ public class ModelTest { Date date = new Date(); Order srcOrder = createOrder("@ord01", "Test Order", "MyType", date, State.CREATED); Order dstOrder = srcOrder.getClone(); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(srcOrder); - visitor.visit(dstOrder); - assertTrue("Cloned Order should be deep equal: " + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcOrder); + List mismatches = dstOrder.accept(visitor); + assertTrue("Cloned Order should be deep equal: " + mismatches, visitor.isEqual()); } @Test @@ -381,10 +379,10 @@ public class ModelTest { FloatParameter fParam = bag.getParameter(PARAM_FLOAT_ID); fParam.setValue(23434234.234); fParam.setName("Ohla"); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(srcOrder); - visitor.visit(dstOrder); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcOrder); + List mismatches = dstOrder.accept(visitor); assertFalse("Order should not be same if something has been changed", visitor.isEqual()); - assertEquals("Multiple changes should be registered", 5, visitor.getMismatchedLocators().size()); + assertEquals("Multiple changes should be registered", 5, mismatches.size()); } public static void validateBag(ParameterBag bag) { diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelToDomTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelToDomTest.java index f75ed78b0..ec2774781 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelToDomTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelToDomTest.java @@ -17,12 +17,12 @@ package li.strolch.model; import static org.junit.Assert.assertTrue; +import java.util.List; + import org.w3c.dom.Document; import li.strolch.model.activity.Activity; -import li.strolch.model.visitor.ActivityDeepEqualsVisitor; -import li.strolch.model.visitor.OrderDeepEqualsVisitor; -import li.strolch.model.visitor.ResourceDeepEqualsVisitor; +import li.strolch.model.visitor.StrolchElementDeepEqualsVisitor; import li.strolch.model.xml.ActivityFromDomVisitor; import li.strolch.model.xml.OrderFromDomVisitor; import li.strolch.model.xml.ResourceFromDomVisitor; @@ -40,10 +40,9 @@ public class ModelToDomTest extends ModelMarshallingTest { Resource parsedResource = new ResourceFromDomVisitor().visit(document); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(resource); - visitor.visit(parsedResource); - assertTrue("To DOM and back should equal same Resource:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(resource); + List mismatches = parsedResource.accept(visitor); + assertTrue("To DOM and back should equal same Resource:\n" + mismatches, mismatches.isEmpty()); return parsedResource; } @@ -54,9 +53,9 @@ public class ModelToDomTest extends ModelMarshallingTest { Order parsedOrder = new OrderFromDomVisitor().visit(document); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(order); - visitor.visit(parsedOrder); - assertTrue("To DOM and back should equal same Order:\n" + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(order); + List mismatches = parsedOrder.accept(visitor); + assertTrue("To DOM and back should equal same Order:\n" + mismatches, mismatches.isEmpty()); return parsedOrder; } @@ -67,10 +66,9 @@ public class ModelToDomTest extends ModelMarshallingTest { Activity parsedActivity = new ActivityFromDomVisitor().visit(document); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(activity); - visitor.visit(parsedActivity); - assertTrue("To DOM and back should equal same Activity:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(activity); + List mismatches = parsedActivity.accept(visitor); + assertTrue("To DOM and back should equal same Activity:\n" + mismatches, mismatches.isEmpty()); return parsedActivity; } diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelToJsonTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelToJsonTest.java index c8717def4..cca28fd56 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelToJsonTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelToJsonTest.java @@ -17,32 +17,29 @@ package li.strolch.model; import static org.junit.Assert.assertTrue; +import java.util.List; + import com.google.gson.JsonObject; import li.strolch.model.activity.Activity; import li.strolch.model.json.ActivityFromJsonVisitor; -import li.strolch.model.json.ActivityToJsonVisitor; import li.strolch.model.json.OrderFromJsonVisitor; -import li.strolch.model.json.OrderToJsonVisitor; import li.strolch.model.json.ResourceFromJsonVisitor; -import li.strolch.model.json.ResourceToJsonVisitor; -import li.strolch.model.visitor.ActivityDeepEqualsVisitor; -import li.strolch.model.visitor.OrderDeepEqualsVisitor; -import li.strolch.model.visitor.ResourceDeepEqualsVisitor; +import li.strolch.model.json.StrolchElementToJsonVisitor; +import li.strolch.model.visitor.StrolchElementDeepEqualsVisitor; public class ModelToJsonTest extends ModelMarshallingTest { @Override protected Order formatAndParseOrder(Order order) { - OrderToJsonVisitor jsonVisitor = new OrderToJsonVisitor(); - jsonVisitor.visit(order); - JsonObject jsonObject = jsonVisitor.getJsonObject(); + StrolchElementToJsonVisitor jsonVisitor = new StrolchElementToJsonVisitor().withVersion(); + JsonObject jsonObject = order.accept(jsonVisitor); Order parsedOrder = new OrderFromJsonVisitor().visit(jsonObject); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(order); - visitor.visit(parsedOrder); - assertTrue("To JSON and back should equal same Order:\n" + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(order); + List mismatches = parsedOrder.accept(visitor); + assertTrue("To JSON and back should equal same Order:\n" + mismatches, mismatches.isEmpty()); return parsedOrder; } @@ -50,16 +47,14 @@ public class ModelToJsonTest extends ModelMarshallingTest { @Override protected Resource formatAndParseResource(Resource resource) { - ResourceToJsonVisitor jsonVisitor = new ResourceToJsonVisitor(); - jsonVisitor.visit(resource); - JsonObject jsonObject = jsonVisitor.getJsonObject(); + StrolchElementToJsonVisitor jsonVisitor = new StrolchElementToJsonVisitor().withVersion(); + JsonObject jsonObject = resource.accept(jsonVisitor); Resource parsedResource = new ResourceFromJsonVisitor().visit(jsonObject); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(resource); - visitor.visit(parsedResource); - assertTrue("To JSON and back should equal same Resource:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(resource); + List mismatches = parsedResource.accept(visitor); + assertTrue("To JSON and back should equal same Resource:\n" + mismatches, mismatches.isEmpty()); return parsedResource; } @@ -67,16 +62,14 @@ public class ModelToJsonTest extends ModelMarshallingTest { @Override protected Activity formatAndParseActivity(Activity activity) { - ActivityToJsonVisitor jsonVisitor = new ActivityToJsonVisitor(); - jsonVisitor.visit(activity); - JsonObject jsonObject = jsonVisitor.getJsonObject(); + StrolchElementToJsonVisitor jsonVisitor = new StrolchElementToJsonVisitor().withVersion(); + JsonObject jsonObject = activity.accept(jsonVisitor); Activity parsedActivity = new ActivityFromJsonVisitor().visit(jsonObject); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(activity); - visitor.visit(parsedActivity); - assertTrue("To JSON and back should equal same Activity:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(activity); + List mismatches = parsedActivity.accept(visitor); + assertTrue("To JSON and back should equal same Activity:\n" + mismatches, mismatches.isEmpty()); return parsedActivity; } diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxTest.java index 9da62242b..ce743b2e4 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxTest.java @@ -19,11 +19,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Collections; +import java.util.List; import li.strolch.model.activity.Activity; -import li.strolch.model.visitor.ActivityDeepEqualsVisitor; -import li.strolch.model.visitor.OrderDeepEqualsVisitor; -import li.strolch.model.visitor.ResourceDeepEqualsVisitor; +import li.strolch.model.visitor.StrolchElementDeepEqualsVisitor; import li.strolch.model.xml.SimpleStrolchElementListener; import li.strolch.model.xml.StrolchElementToSaxVisitor; import li.strolch.model.xml.XmlModelSaxReader; @@ -47,9 +46,9 @@ public class ModelToSaxTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getActivities()); Order parsedOrder = listener.getOrders().get(0); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(order); - visitor.visit(parsedOrder); - assertTrue("To DOM and back should equal same Order:\n" + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(order); + List mismatches = parsedOrder.accept(visitor); + assertTrue("To DOM and back should equal same Order:\n" + mismatches, mismatches.isEmpty()); return parsedOrder; } @@ -67,10 +66,9 @@ public class ModelToSaxTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getOrders()); Resource parsedResource = listener.getResources().get(0); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(resource); - visitor.visit(parsedResource); - assertTrue("To DOM and back should equal same Resource:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(resource); + List mismatches = parsedResource.accept(visitor); + assertTrue("To DOM and back should equal same Resource:\n" + mismatches, mismatches.isEmpty()); return parsedResource; } @@ -88,10 +86,9 @@ public class ModelToSaxTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getOrders()); Activity parsedActivity = listener.getActivities().get(0); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(activity); - visitor.visit(parsedActivity); - assertTrue("To DOM and back should equal same Activity:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(activity); + List mismatches = parsedActivity.accept(visitor); + assertTrue("To DOM and back should equal same Activity:\n" + mismatches, mismatches.isEmpty()); return parsedActivity; } diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxWriterTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxWriterTest.java index 16e3ea6b0..06991cc9f 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxWriterTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelToSaxWriterTest.java @@ -21,13 +21,12 @@ import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Collections; +import java.util.List; import javax.xml.stream.XMLStreamWriter; import li.strolch.model.activity.Activity; -import li.strolch.model.visitor.ActivityDeepEqualsVisitor; -import li.strolch.model.visitor.OrderDeepEqualsVisitor; -import li.strolch.model.visitor.ResourceDeepEqualsVisitor; +import li.strolch.model.visitor.StrolchElementDeepEqualsVisitor; import li.strolch.model.xml.SimpleStrolchElementListener; import li.strolch.model.xml.StrolchElementToSaxWriterVisitor; import li.strolch.model.xml.StrolchXmlHelper; @@ -57,9 +56,9 @@ public class ModelToSaxWriterTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getActivities()); Order parsedOrder = listener.getOrders().get(0); - OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(order); - visitor.visit(parsedOrder); - assertTrue("To DOM and back should equal same Order:\n" + visitor.getMismatchedLocators(), visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(order); + List mismatches = parsedOrder.accept(visitor); + assertTrue("To DOM and back should equal same Order:\n" + mismatches, mismatches.isEmpty()); return parsedOrder; } @@ -82,10 +81,9 @@ public class ModelToSaxWriterTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getOrders()); Resource parsedResource = listener.getResources().get(0); - ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(resource); - visitor.visit(parsedResource); - assertTrue("To DOM and back should equal same Resource:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(resource); + List mismatches = parsedResource.accept(visitor); + assertTrue("To DOM and back should equal same Resource:\n" + mismatches, mismatches.isEmpty()); return parsedResource; } @@ -110,10 +108,9 @@ public class ModelToSaxWriterTest extends ModelMarshallingTest { assertEquals(Collections.emptyList(), listener.getOrders()); Activity parsedActivity = listener.getActivities().get(0); - ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(activity); - visitor.visit(parsedActivity); - assertTrue("To DOM and back should equal same Activity:\n" + visitor.getMismatchedLocators(), - visitor.isEqual()); + StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(activity); + List mismatches = parsedActivity.accept(visitor); + assertTrue("To DOM and back should equal same Activity:\n" + mismatches, mismatches.isEmpty()); return parsedActivity; } diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlActivityDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlActivityDao.java index b74f87453..7884f4804 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlActivityDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlActivityDao.java @@ -249,7 +249,7 @@ public class PostgreSqlActivityDao extends PostgresqlDao implements Ac String id = result.getString("id"); SQLXML sqlxml = result.getSQLXML("asxml"); Activity t = parseFromXml(id, queryVisitor.getType(), sqlxml); - list.add(query.getActivityVisitor().visit(t)); + list.add(t.accept(query.getActivityVisitor())); } } } catch (SQLException e) { diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java index 7753b3151..f5ef771ea 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java @@ -249,7 +249,7 @@ public class PostgreSqlOrderDao extends PostgresqlDao implements OrderDao String id = result.getString("id"); SQLXML sqlxml = result.getSQLXML("asxml"); Order t = parseFromXml(id, queryVisitor.getType(), sqlxml); - list.add(query.getOrderVisitor().visit(t)); + list.add(t.accept(query.getOrderVisitor())); } } } catch (SQLException e) { diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java index b0f1c1519..14ec016b7 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java @@ -241,7 +241,7 @@ public class PostgreSqlResourceDao extends PostgresqlDao implements Re String id = result.getString("id"); SQLXML sqlxml = result.getSQLXML("asxml"); Resource t = parseFromXml(id, queryVisitor.getType(), sqlxml); - list.add(query.getResourceVisitor().visit(t)); + list.add(t.accept(query.getResourceVisitor())); } } } catch (SQLException e) { diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java index 7d538ce1b..219a225f8 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java @@ -53,9 +53,7 @@ import li.strolch.model.Order; import li.strolch.model.Resource; import li.strolch.model.Tags; import li.strolch.model.activity.Activity; -import li.strolch.model.json.ActivityToJsonVisitor; -import li.strolch.model.json.OrderToJsonVisitor; -import li.strolch.model.json.ResourceToJsonVisitor; +import li.strolch.model.json.StrolchElementToJsonVisitor; import li.strolch.model.query.ActivityQuery; import li.strolch.model.query.OrderQuery; import li.strolch.model.query.ResourceQuery; @@ -391,7 +389,7 @@ public class Inspector { RestfulHelper.doOrdering(queryData, resources); // build JSON response - ResourceToJsonVisitor toJsonVisitor = new ResourceToJsonVisitor(); + StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor(); JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, resources, toJsonVisitor); // marshall result @@ -441,7 +439,7 @@ public class Inspector { RestfulHelper.doOrdering(queryData, orders); // build JSON response - OrderToJsonVisitor toJsonVisitor = new OrderToJsonVisitor(); + StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor(); JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, orders, toJsonVisitor); // marshall result @@ -477,7 +475,7 @@ public class Inspector { RestfulHelper.doOrdering(queryData, activities); // build JSON response - ActivityToJsonVisitor toJsonVisitor = new ActivityToJsonVisitor(); + StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor(); JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, activities, toJsonVisitor); // marshall result @@ -502,7 +500,8 @@ public class Inspector { throw new StrolchException(MessageFormat.format("No Resource exists for {0}/{1}", type, id)); //$NON-NLS-1$ } - return Response.ok().entity(ResourceToJsonVisitor.toJsonString(resource)).build(); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + return Response.ok().entity(resource.accept(visitor)).build(); } @GET @@ -584,7 +583,8 @@ public class Inspector { throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$ } - return Response.ok().entity(OrderToJsonVisitor.toJsonString(order)).build(); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + return Response.ok().entity(order.accept(visitor)).build(); } @GET @@ -684,7 +684,8 @@ public class Inspector { throw new StrolchException(MessageFormat.format("No Activity exists for {0}/{1}", type, id)); //$NON-NLS-1$ } - return Response.ok().entity(ActivityToJsonVisitor.toJsonString(activity)).build(); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + return Response.ok().entity(activity.accept(visitor)).build(); } @GET diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ModelQuery.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ModelQuery.java index eb84a3207..ed592bc43 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ModelQuery.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/ModelQuery.java @@ -23,9 +23,7 @@ import li.strolch.agent.api.ResourceMap; import li.strolch.model.Order; import li.strolch.model.Resource; import li.strolch.model.activity.Activity; -import li.strolch.model.json.ActivityToJsonVisitor; -import li.strolch.model.json.OrderToJsonVisitor; -import li.strolch.model.json.ResourceToJsonVisitor; +import li.strolch.model.json.StrolchElementToJsonVisitor; import li.strolch.model.query.ActivityQuery; import li.strolch.model.query.OrderQuery; import li.strolch.model.query.ResourceQuery; @@ -87,8 +85,8 @@ public class ModelQuery { RestfulHelper.doOrdering(queryData, resources); // build JSON response - ResourceToJsonVisitor toJsonVisitor = new ResourceToJsonVisitor(); - JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, resources, toJsonVisitor); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, resources, visitor); // marshall result Gson gson = new GsonBuilder().setPrettyPrinting().create(); @@ -142,8 +140,8 @@ public class ModelQuery { RestfulHelper.doOrdering(queryData, orders); // build JSON response - OrderToJsonVisitor toJsonVisitor = new OrderToJsonVisitor(); - JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, orders, toJsonVisitor); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, orders, visitor); // marshall result Gson gson = new GsonBuilder().setPrettyPrinting().create(); @@ -198,8 +196,8 @@ public class ModelQuery { RestfulHelper.doOrdering(queryData, activities); // build JSON response - ActivityToJsonVisitor toJsonVisitor = new ActivityToJsonVisitor(); - JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, activities, toJsonVisitor); + StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor(); + JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, activities, visitor); // marshall result Gson gson = new GsonBuilder().setPrettyPrinting().create(); diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/helper/RestfulHelper.java b/li.strolch.rest/src/main/java/li/strolch/rest/helper/RestfulHelper.java index dec593602..be1c80d49 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/helper/RestfulHelper.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/helper/RestfulHelper.java @@ -57,7 +57,7 @@ public class RestfulHelper { } public static JsonObject toJson(QueryData queryData, long dataSetSize, - List elements, StrolchElementVisitor toJsonVisitor) { + List elements, StrolchElementVisitor toJsonVisitor) { // paging Paging paging = Paging.asPage(elements, queryData.getOffset(), queryData.getLimit()); @@ -83,7 +83,7 @@ public class RestfulHelper { // add items JsonArray data = new JsonArray(); for (T t : page) { - JsonObject element = toJsonVisitor.visit(t); + JsonObject element = t.accept(toJsonVisitor); data.add(element); } root.add("data", data); diff --git a/li.strolch.service/src/main/java/li/strolch/execution/command/ExecutionCommand.java b/li.strolch.service/src/main/java/li/strolch/execution/command/ExecutionCommand.java index abb1ad310..741843d03 100644 --- a/li.strolch.service/src/main/java/li/strolch/execution/command/ExecutionCommand.java +++ b/li.strolch.service/src/main/java/li/strolch/execution/command/ExecutionCommand.java @@ -119,13 +119,13 @@ public abstract class ExecutionCommand extends Command implements TimeOrderingVi } @Override - public Void visit(Activity activity) { + public Void visitActivity(Activity activity) { activity.getTimeOrdering().accept(this, activity); return null; } @Override - public Void visit(Action action) { + public Void visitAction(Action action) { ExecutionPolicy executionPolicy = getExecutionPolicy(action); if (executionPolicy.isExecutable(action)) {