From 4e1e1ccb8f655e49ac949b9fa8155602e2d71b7b Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Wed, 29 Mar 2017 09:49:12 +0200 Subject: [PATCH] [New] Add toXml() and toJson() methods on StrolchRootElement --- .../model/AbstractStrolchRootElement.java | 38 +++++++++++++++++++ .../src/main/java/li/strolch/model/Order.java | 2 +- .../main/java/li/strolch/model/Resource.java | 2 +- .../li/strolch/model/StrolchRootElement.java | 22 +++++++++++ .../li/strolch/model/activity/Activity.java | 4 +- .../json/StrolchElementToFlatJsonVisitor.java | 26 +++++++++++++ .../json/StrolchElementToJsonVisitor.java | 18 ++++++++- 7 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java create mode 100644 li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToFlatJsonVisitor.java 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 new file mode 100644 index 000000000..6d790ebb9 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java @@ -0,0 +1,38 @@ +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; + +public abstract class AbstractStrolchRootElement extends GroupedParameterizedElement implements StrolchRootElement { + + private static final long serialVersionUID = 1L; + + public AbstractStrolchRootElement() { + super(); + } + + public AbstractStrolchRootElement(String id, String name, String type) { + super(id, name, type); + } + + @Override + public String toXmlString() { + return this.accept(new StrolchElementToXmlStringVisitor()); + } + + @Override + public String toJsonString() { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + return gson.toJson(this.accept(new StrolchElementToJsonVisitor())); + } + + @Override + public String toFlatJsonString() { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + return gson.toJson(this.accept(new StrolchElementToFlatJsonVisitor())); + } +} 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 40d83ef97..db25ef19c 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 @@ -34,7 +34,7 @@ import li.strolch.utils.iso8601.ISO8601FormatFactory; * * @author Robert von Burg */ -public class Order extends GroupedParameterizedElement implements StrolchRootElement, Comparable { +public class Order extends AbstractStrolchRootElement implements StrolchRootElement, Comparable { private static final long serialVersionUID = 0L; 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 3c5320e21..9495ac23f 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 @@ -35,7 +35,7 @@ import li.strolch.model.visitor.StrolchRootElementVisitor; /** * @author Robert von Burg */ -public class Resource extends GroupedParameterizedElement implements StrolchRootElement, Comparable { +public class Resource extends AbstractStrolchRootElement implements StrolchRootElement, Comparable { private static final long serialVersionUID = 0L; 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 a6377912d..1d5ae4c50 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 @@ -69,4 +69,26 @@ public interface StrolchRootElement extends StrolchElement, PolicyContainer, Par * @return the result of the visitation */ public T accept(StrolchRootElementVisitor visitor); + + /** + * Formats this {@link StrolchRootElement} as an XML string + * + * @return the formatted XML string + */ + public String toXmlString(); + + /** + * Formats this element as a JSON string + * + * @return the formatted JSON string + */ + public String toJsonString(); + + /** + * Formats this element as a flat JSON string, i.e. all parameter bags are removed and parameters are on the root + * element of the JSON object + * + * @return the formatted JSON string + */ + public String toFlatJsonString(); } 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 4cd25c5bd..a8d32b2bc 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 @@ -27,7 +27,7 @@ import java.util.Map.Entry; import li.strolch.exception.StrolchException; import li.strolch.exception.StrolchModelException; import li.strolch.exception.StrolchPolicyException; -import li.strolch.model.GroupedParameterizedElement; +import li.strolch.model.AbstractStrolchRootElement; import li.strolch.model.Locator; import li.strolch.model.Locator.LocatorBuilder; import li.strolch.model.State; @@ -46,7 +46,7 @@ import li.strolch.utils.dbc.DBC; * * @author Martin Smock */ -public class Activity extends GroupedParameterizedElement +public class Activity extends AbstractStrolchRootElement implements IActivityElement, StrolchRootElement, Comparable { private static final long serialVersionUID = 1L; 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 new file mode 100644 index 000000000..03a7f0a2f --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToFlatJsonVisitor.java @@ -0,0 +1,26 @@ +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 821f64a91..a7b172522 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 @@ -28,9 +28,25 @@ import li.strolch.model.timedstate.StrolchTimedState; import li.strolch.model.timevalue.ITimeValue; import li.strolch.model.timevalue.IValue; import li.strolch.model.timevalue.IValueChange; +import li.strolch.model.visitor.StrolchRootElementVisitor; import li.strolch.utils.iso8601.ISO8601FormatFactory; -public class StrolchElementToJsonVisitor { +public class StrolchElementToJsonVisitor implements StrolchRootElementVisitor { + + @Override + public JsonObject visitResource(Resource resource) { + return toJson(resource); + } + + @Override + public JsonObject visitOrder(Order order) { + return toJson(order); + } + + @Override + public JsonObject visitActivity(Activity activity) { + return toJson(activity); + } public JsonObject toJson(Resource element) {