[New] Add toXml() and toJson() methods on StrolchRootElement

This commit is contained in:
Robert von Burg 2017-03-29 09:49:12 +02:00
parent d469a035fb
commit 4e1e1ccb8f
7 changed files with 107 additions and 5 deletions

View File

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

View File

@ -34,7 +34,7 @@ import li.strolch.utils.iso8601.ISO8601FormatFactory;
*
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public class Order extends GroupedParameterizedElement implements StrolchRootElement, Comparable<Order> {
public class Order extends AbstractStrolchRootElement implements StrolchRootElement, Comparable<Order> {
private static final long serialVersionUID = 0L;

View File

@ -35,7 +35,7 @@ import li.strolch.model.visitor.StrolchRootElementVisitor;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public class Resource extends GroupedParameterizedElement implements StrolchRootElement, Comparable<Resource> {
public class Resource extends AbstractStrolchRootElement implements StrolchRootElement, Comparable<Resource> {
private static final long serialVersionUID = 0L;

View File

@ -69,4 +69,26 @@ public interface StrolchRootElement extends StrolchElement, PolicyContainer, Par
* @return the result of the visitation
*/
public <T> T accept(StrolchRootElementVisitor<T> 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();
}

View File

@ -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 <martin.smock@bluewin.ch>
*/
public class Activity extends GroupedParameterizedElement
public class Activity extends AbstractStrolchRootElement
implements IActivityElement, StrolchRootElement, Comparable<Activity> {
private static final long serialVersionUID = 1L;

View File

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

View File

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