From cac24481eed5e14a49edc0658cb99563a402cc6f Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 8 Apr 2016 18:04:19 +0200 Subject: [PATCH] [New] Added toJson visitor for Activity/Action --- .../src/main/java/li/strolch/model/Tags.java | 1 + .../model/json/ActivityToJsonVisitor.java | 25 +++++++ .../json/StrolchElementToJsonVisitor.java | 70 ++++++++++++++++++- 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 li.strolch.model/src/main/java/li/strolch/model/json/ActivityToJsonVisitor.java diff --git a/li.strolch.model/src/main/java/li/strolch/model/Tags.java b/li.strolch.model/src/main/java/li/strolch/model/Tags.java index 91e56723f..d10ed93a8 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/Tags.java +++ b/li.strolch.model/src/main/java/li/strolch/model/Tags.java @@ -48,6 +48,7 @@ public class Tags { public static final String AUDIT = "Audit"; public static final String POLICIES = "Policies"; public static final String POLICY = "Policy"; + public static final String ELEMENTS = "Elements"; public static final String ACTIVITY = "Activity"; public static final String ACTION = "Action"; 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 new file mode 100644 index 000000000..02d364ae3 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/json/ActivityToJsonVisitor.java @@ -0,0 +1,25 @@ +package li.strolch.model.json; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import li.strolch.model.ActivityVisitor; +import li.strolch.model.activity.Activity; + +public class ActivityToJsonVisitor extends StrolchElementToJsonVisitor implements ActivityVisitor { + + @Override + public JsonObject visit(Activity element) { + + JsonObject rootJ = toJson(element); + + return rootJ; + } + + 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/StrolchElementToJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementToJsonVisitor.java index c2a79a22b..d28367ec5 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,5 +1,7 @@ package li.strolch.model.json; +import java.util.Iterator; +import java.util.Map.Entry; import java.util.SortedSet; import com.google.gson.JsonArray; @@ -12,6 +14,9 @@ import li.strolch.model.Order; import li.strolch.model.ParameterBag; import li.strolch.model.Resource; import li.strolch.model.Tags; +import li.strolch.model.activity.Action; +import li.strolch.model.activity.Activity; +import li.strolch.model.activity.IActivityElement; import li.strolch.model.parameter.Parameter; import li.strolch.model.policy.PolicyDef; import li.strolch.model.policy.PolicyDefs; @@ -55,6 +60,69 @@ public class StrolchElementToJsonVisitor { return rootJ; } + public JsonObject toJson(Activity element) { + JsonObject rootJ = new JsonObject(); + return toJson(element, rootJ); + } + + public JsonObject toJson(Action element) { + JsonObject rootJ = new JsonObject(); + return toJson(element, rootJ); + } + + protected JsonObject toJson(Activity element, JsonObject rootJ) { + + rootJ.addProperty(Tags.OBJECT_TYPE, Tags.ACTIVITY); + + toJson((AbstractStrolchElement) element, rootJ); + + addParameterBags(element, rootJ); + + if (element.hasPolicyDefs()) + addPolicies(element.getPolicyDefs(), rootJ); + + Iterator> iter = element.elementIterator(); + if (iter.hasNext()) { + + JsonArray elementsJ = new JsonArray(); + rootJ.add(Tags.ELEMENTS, elementsJ); + + while (iter.hasNext()) { + IActivityElement activityElement = iter.next().getValue(); + + JsonObject elementJ = new JsonObject(); + elementsJ.add(elementJ); + + if (activityElement instanceof Activity) { + toJson((Activity) activityElement, elementJ); + } else if (activityElement instanceof Action) { + toJson((Action) activityElement, elementJ); + } else { + throw new IllegalArgumentException("Unhandled element " + activityElement.getClass()); + } + } + } + + return rootJ; + } + + protected JsonObject toJson(Action element, JsonObject rootJ) { + + rootJ.addProperty(Tags.OBJECT_TYPE, Tags.ACTION); + + toJson((AbstractStrolchElement) element, rootJ); + rootJ.addProperty(Tags.RESOURCE_ID, element.getResourceId()); + rootJ.addProperty(Tags.RESOURCE_TYPE, element.getResourceType()); + rootJ.addProperty(Tags.STATE, element.getState().name()); + + addParameterBags(element, rootJ); + + if (element.hasPolicyDefs()) + addPolicies(element.getPolicyDefs(), rootJ); + + return rootJ; + } + protected void addPolicies(PolicyDefs policyDefs, JsonObject rootJ) { if (!policyDefs.hasPolicyDefs()) return; @@ -68,7 +136,7 @@ public class StrolchElementToJsonVisitor { } } - public JsonObject toJson(AbstractStrolchElement element, JsonObject rootJ) { + protected JsonObject toJson(AbstractStrolchElement element, JsonObject rootJ) { rootJ.addProperty(Tags.ID, element.getId()); rootJ.addProperty(Tags.NAME, element.getName());