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)) {