diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/FromFlatJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/FromFlatJsonVisitor.java
index 2778bb74d..9facebafc 100644
--- a/li.strolch.model/src/main/java/li/strolch/model/json/FromFlatJsonVisitor.java
+++ b/li.strolch.model/src/main/java/li/strolch/model/json/FromFlatJsonVisitor.java
@@ -12,6 +12,7 @@ import li.strolch.model.StrolchRootElement;
import li.strolch.model.Tags.Json;
import li.strolch.model.parameter.Parameter;
import li.strolch.utils.collections.MapOfSets;
+import li.strolch.utils.dbc.DBC;
/**
*
@@ -64,6 +65,10 @@ public class FromFlatJsonVisitor {
public void visit(StrolchRootElement element, JsonObject jsonObject) {
+ DBC.PRE.assertTrue("objectType must be set!", jsonObject.has(Json.OBJECT_TYPE));
+ DBC.PRE.assertEquals("objectType must be the same!", element.getObjectType(),
+ jsonObject.get(Json.OBJECT_TYPE).getAsString());
+
// update name if possible
if (jsonObject.has(Json.NAME))
element.setName(jsonObject.get(Json.NAME).getAsString());
diff --git a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementFromJsonVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementFromJsonVisitor.java
index f1facf435..81bebb72e 100644
--- a/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementFromJsonVisitor.java
+++ b/li.strolch.model/src/main/java/li/strolch/model/json/StrolchElementFromJsonVisitor.java
@@ -35,6 +35,7 @@ import li.strolch.model.State;
import li.strolch.model.StrolchRootElement;
import li.strolch.model.StrolchValueType;
import li.strolch.model.Tags;
+import li.strolch.model.Tags.Json;
import li.strolch.model.Version;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
@@ -55,6 +56,11 @@ import li.strolch.utils.iso8601.ISO8601FormatFactory;
public class StrolchElementFromJsonVisitor {
public void fillElement(JsonObject jsonObject, Order order) {
+
+ DBC.PRE.assertTrue("objectType must be set!", jsonObject.has(Json.OBJECT_TYPE));
+ DBC.PRE.assertEquals("objectType must be the same!", order.getObjectType(),
+ jsonObject.get(Json.OBJECT_TYPE).getAsString());
+
fillElement(jsonObject, (GroupedParameterizedElement) order);
parseVersion(order, jsonObject);
@@ -80,6 +86,11 @@ public class StrolchElementFromJsonVisitor {
}
public void fillElement(JsonObject jsonObject, Resource resource) {
+
+ DBC.PRE.assertTrue("objectType must be set!", jsonObject.has(Json.OBJECT_TYPE));
+ DBC.PRE.assertEquals("objectType must be the same!", resource.getObjectType(),
+ jsonObject.get(Json.OBJECT_TYPE).getAsString());
+
fillElement(jsonObject, (GroupedParameterizedElement) resource);
parseVersion(resource, jsonObject);
@@ -146,6 +157,11 @@ public class StrolchElementFromJsonVisitor {
}
public void fillElement(JsonObject jsonObject, Activity activity) {
+
+ DBC.PRE.assertTrue("objectType must be set!", jsonObject.has(Json.OBJECT_TYPE));
+ DBC.PRE.assertEquals("objectType must be the same!", activity.getObjectType(),
+ jsonObject.get(Json.OBJECT_TYPE).getAsString());
+
fillElement(jsonObject, (GroupedParameterizedElement) activity);
if (!jsonObject.has(Tags.Json.TIME_ORDERING))
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 be7e4ba39..4cda4353d 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
@@ -27,6 +27,7 @@ import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@@ -55,6 +56,7 @@ import li.strolch.exception.StrolchException;
import li.strolch.model.Order;
import li.strolch.model.Resource;
import li.strolch.model.Tags;
+import li.strolch.model.Tags.Json;
import li.strolch.model.activity.Activity;
import li.strolch.model.json.ActivityFromJsonVisitor;
import li.strolch.model.json.FromFlatJsonVisitor;
@@ -76,6 +78,12 @@ import li.strolch.rest.RestfulStrolchComponent;
import li.strolch.rest.StrolchRestfulConstants;
import li.strolch.rest.helper.RestfulHelper;
import li.strolch.rest.model.Result;
+import li.strolch.service.AddActivityService;
+import li.strolch.service.AddActivityService.AddActivityArg;
+import li.strolch.service.AddOrderService;
+import li.strolch.service.AddOrderService.AddOrderArg;
+import li.strolch.service.AddResourceService;
+import li.strolch.service.AddResourceService.AddResourceArg;
import li.strolch.service.LocatorArgument;
import li.strolch.service.RemoveActivityService;
import li.strolch.service.RemoveOrderService;
@@ -87,6 +95,7 @@ import li.strolch.service.UpdateOrderService.UpdateOrderArg;
import li.strolch.service.UpdateResourceService;
import li.strolch.service.UpdateResourceService.UpdateResourceArg;
import li.strolch.service.api.ServiceResult;
+import li.strolch.utils.helper.StringHelper;
/**
* @author Robert von Burg
@@ -405,7 +414,7 @@ public class Inspector {
RestfulHelper.doOrdering(queryData, resources);
// build JSON response
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, resources, toJsonVisitor);
// marshall result
@@ -453,7 +462,7 @@ public class Inspector {
RestfulHelper.doOrdering(queryData, orders);
// build JSON response
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, orders, toJsonVisitor);
// marshall result
@@ -487,7 +496,7 @@ public class Inspector {
RestfulHelper.doOrdering(queryData, activities);
// build JSON response
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
JsonObject root = RestfulHelper.toJson(queryData, dataSetSize, activities, toJsonVisitor);
// marshall result
@@ -510,7 +519,7 @@ public class Inspector {
throw new StrolchException(MessageFormat.format("No Resource exists for {0}/{1}", type, id)); //$NON-NLS-1$
}
- StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor().withVersion();
if (Boolean.parseBoolean(flat))
visitor.flat();
return Response.ok().entity(toString(resource.accept(visitor))).build();
@@ -536,6 +545,108 @@ public class Inspector {
return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
}
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("{realm}/orders/{type}/{id}")
+ public Response getOrderAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @PathParam("id") String id, @QueryParam("flat") String flat) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Order order;
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ order = tx.getOrderMap().getBy(tx, type, id);
+ }
+ if (order == null) {
+ throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$
+ }
+
+ StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor().withVersion();
+ if (Boolean.parseBoolean(flat))
+ visitor.flat();
+ return Response.ok().entity(toString(order.accept(visitor))).build();
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_XML)
+ @Path("{realm}/orders/{type}/{id}")
+ public Response getOrderAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @PathParam("id") String id) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Order order;
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ order = tx.getOrderMap().getBy(tx, type, id);
+ }
+ if (order == null) {
+ throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$
+ }
+
+ String asXml = order.accept(new StrolchElementToXmlStringVisitor());
+ return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
+ }
+
+ /**
+ *
+ * Activity inspector
+ *
+ *
+ *
+ * Returns the activity with the given id
+ *
+ *
+ * @param realm
+ * the realm for which the activity is to be returned
+ * @param type
+ * the type of the activity
+ * @param id
+ * the id of the activity
+ *
+ * @return the activity with the given id
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("{realm}/activities/{type}/{id}")
+ public Response getActivityAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @PathParam("id") String id, @QueryParam("flat") String flat) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Activity activity;
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ activity = tx.getActivityMap().getBy(tx, type, id);
+ }
+ if (activity == null) {
+ throw new StrolchException(MessageFormat.format("No Activity exists for {0}/{1}", type, id)); //$NON-NLS-1$
+ }
+
+ StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor().withVersion();
+ if (Boolean.parseBoolean(flat))
+ visitor.flat();
+ return Response.ok().entity(toString(activity.accept(visitor))).build();
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_XML)
+ @Path("{realm}/activities/{type}/{id}")
+ public Response getActivityAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @PathParam("id") String id) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Activity activity;
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ activity = tx.getActivityMap().getBy(tx, type, id);
+ }
+ if (activity == null) {
+ throw new StrolchException(MessageFormat.format("No Activity exists for {0}/{1}", type, id)); //$NON-NLS-1$
+ }
+
+ String asXml = activity.accept(new StrolchElementToXmlStringVisitor());
+ return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
+ }
+
@PUT
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
@@ -545,25 +656,7 @@ public class Inspector {
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
- Resource resource;
- try {
- SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
- SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
-
- if (listener.getResources().size() == 0)
- throw new StrolchPersistenceException(
- MessageFormat.format("No Resources parsed from xml value for {0} / {1}", id, type));
- if (listener.getResources().size() > 1)
- throw new StrolchPersistenceException(
- MessageFormat.format("Multiple Resources parsed from xml value for {0} / {1}", id, type));
-
- resource = listener.getResources().get(0);
-
- } catch (Exception e) {
- throw new StrolchPersistenceException(
- MessageFormat.format("Failed to extract Resources from xml value for {0} / {1}", id, type), e);
- }
+ Resource resource = parseResourceFromXml(type, data);
UpdateResourceService svc = new UpdateResourceService();
UpdateResourceArg arg = new UpdateResourceArg();
@@ -620,7 +713,7 @@ public class Inspector {
// do service
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
if (result.isOk()) {
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
if (flat)
toJsonVisitor.flat();
return Response.ok().entity(toString(resource.accept(toJsonVisitor))).build();
@@ -629,48 +722,6 @@ public class Inspector {
return Result.toResponse(result);
}
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{realm}/orders/{type}/{id}")
- public Response getOrderAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
- @PathParam("type") String type, @PathParam("id") String id, @QueryParam("flat") String flat) {
-
- Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
-
- Order order;
- try (StrolchTransaction tx = openTx(cert, realm)) {
- order = tx.getOrderMap().getBy(tx, type, id);
- }
- if (order == null) {
- throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$
- }
-
- StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor();
- if (Boolean.parseBoolean(flat))
- visitor.flat();
- return Response.ok().entity(toString(order.accept(visitor))).build();
- }
-
- @GET
- @Produces(MediaType.APPLICATION_XML)
- @Path("{realm}/orders/{type}/{id}")
- public Response getOrderAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
- @PathParam("type") String type, @PathParam("id") String id) {
-
- Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
-
- Order order;
- try (StrolchTransaction tx = openTx(cert, realm)) {
- order = tx.getOrderMap().getBy(tx, type, id);
- }
- if (order == null) {
- throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$
- }
-
- String asXml = order.accept(new StrolchElementToXmlStringVisitor());
- return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
- }
-
@PUT
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
@@ -680,25 +731,7 @@ public class Inspector {
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
- Order order;
- try {
- SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
- SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
-
- if (listener.getOrders().size() == 0)
- throw new StrolchPersistenceException(
- MessageFormat.format("No Orders parsed from xml value for {0} / {1}", id, type));
- if (listener.getOrders().size() > 1)
- throw new StrolchPersistenceException(
- MessageFormat.format("Multiple Orders parsed from xml value for {0} / {1}", id, type));
-
- order = listener.getOrders().get(0);
-
- } catch (Exception e) {
- throw new StrolchPersistenceException(
- MessageFormat.format("Failed to extract Order from xml value for {0} / {1}", id, type), e);
- }
+ Order order = parseOrderFromXml(type, data);
UpdateOrderService svc = new UpdateOrderService();
UpdateOrderArg arg = new UpdateOrderArg();
@@ -755,7 +788,7 @@ public class Inspector {
// do service
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
if (result.isOk()) {
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
if (flat)
toJsonVisitor.flat();
return Response.ok().entity(toString(order.accept(toJsonVisitor))).build();
@@ -764,66 +797,6 @@ public class Inspector {
return Result.toResponse(result);
}
- /**
- *
- * Activity inspector
- *
- *
- *
- * Returns the activity with the given id
- *
- *
- * @param realm
- * the realm for which the activity is to be returned
- * @param type
- * the type of the activity
- * @param id
- * the id of the activity
- *
- * @return the activity with the given id
- */
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{realm}/activities/{type}/{id}")
- public Response getActivityAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
- @PathParam("type") String type, @PathParam("id") String id, @QueryParam("flat") String flat) {
-
- Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
-
- Activity activity;
- try (StrolchTransaction tx = openTx(cert, realm)) {
- activity = tx.getActivityMap().getBy(tx, type, id);
- }
- if (activity == null) {
- throw new StrolchException(MessageFormat.format("No Activity exists for {0}/{1}", type, id)); //$NON-NLS-1$
- }
-
- StrolchElementToJsonVisitor visitor = new StrolchElementToJsonVisitor();
- if (Boolean.parseBoolean(flat))
- visitor.flat();
- return Response.ok().entity(toString(activity.accept(visitor))).build();
- }
-
- @GET
- @Produces(MediaType.APPLICATION_XML)
- @Path("{realm}/activities/{type}/{id}")
- public Response getActivityAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
- @PathParam("type") String type, @PathParam("id") String id) {
-
- Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
-
- Activity activity;
- try (StrolchTransaction tx = openTx(cert, realm)) {
- activity = tx.getActivityMap().getBy(tx, type, id);
- }
- if (activity == null) {
- throw new StrolchException(MessageFormat.format("No Activity exists for {0}/{1}", type, id)); //$NON-NLS-1$
- }
-
- String asXml = activity.accept(new StrolchElementToXmlStringVisitor());
- return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
- }
-
@PUT
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
@@ -833,25 +806,7 @@ public class Inspector {
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
- Activity activity;
- try {
- SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
- SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
-
- if (listener.getActivities().size() == 0)
- throw new StrolchPersistenceException(
- MessageFormat.format("No Activities parsed from xml value for {0} / {1}", id, type));
- if (listener.getActivities().size() > 1)
- throw new StrolchPersistenceException(
- MessageFormat.format("Multiple Activities parsed from xml value for {0} / {1}", id, type));
-
- activity = listener.getActivities().get(0);
-
- } catch (Exception e) {
- throw new StrolchPersistenceException(
- MessageFormat.format("Failed to extract Activities from xml value for {0} / {1}", id, type), e);
- }
+ Activity activity = parseActivityFromXml(type, data);
UpdateActivityService svc = new UpdateActivityService();
UpdateActivityArg arg = new UpdateActivityArg();
@@ -908,7 +863,248 @@ public class Inspector {
// do service
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
if (result.isOk()) {
- StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor();
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ if (flat)
+ toJsonVisitor.flat();
+ return Response.ok().entity(toString(activity.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes(MediaType.APPLICATION_XML)
+ @Path("{realm}/resources")
+ public Response addResourceAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Resource resource = parseResourceFromXml(null, data);
+
+ AddResourceService svc = new AddResourceService();
+ AddResourceArg arg = new AddResourceArg();
+ arg.resource = resource;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ String asXml = resource.accept(new StrolchElementToXmlStringVisitor());
+ return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/resources")
+ public Response addResourceAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ // parse from complete JSON
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ ResourceFromJsonVisitor visitor = new ResourceFromJsonVisitor();
+ Resource resource = visitor.visit(jsonObject);
+
+ AddResourceService svc = new AddResourceService();
+ AddResourceArg arg = new AddResourceArg();
+ arg.resource = resource;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ return Response.ok().entity(toString(resource.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/resources/{type}")
+ public Response addResourceAsJsonFlat(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @QueryParam("flat") String flatS, String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+ boolean flat = Boolean.parseBoolean(flatS);
+
+ Resource resource = parseNewResourceFromJson(cert, realm, type, data, flat);
+
+ AddResourceService svc = new AddResourceService();
+ AddResourceArg arg = new AddResourceArg();
+ arg.resource = resource;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ if (flat)
+ toJsonVisitor.flat();
+ return Response.ok().entity(toString(resource.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes(MediaType.APPLICATION_XML)
+ @Path("{realm}/orders")
+ public Response addOrderAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm, String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Order order = parseOrderFromXml(null, data);
+
+ AddOrderService svc = new AddOrderService();
+ AddOrderArg arg = new AddOrderArg();
+ arg.order = order;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ String asXml = order.accept(new StrolchElementToXmlStringVisitor());
+ return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/orders")
+ public Response addOrderAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm, String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ // parse from complete JSON
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ OrderFromJsonVisitor visitor = new OrderFromJsonVisitor();
+ Order order = visitor.visit(jsonObject);
+
+ AddOrderService svc = new AddOrderService();
+ AddOrderArg arg = new AddOrderArg();
+ arg.order = order;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ return Response.ok().entity(toString(order.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/orders/{type}")
+ public Response addOrderAsJsonFlat(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @QueryParam("flat") String flatS, String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+ boolean flat = Boolean.parseBoolean(flatS);
+
+ Order order = parseNewOrderFromJson(cert, realm, type, data, flat);
+
+ AddOrderService svc = new AddOrderService();
+ AddOrderArg arg = new AddOrderArg();
+ arg.order = order;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ if (flat)
+ toJsonVisitor.flat();
+ return Response.ok().entity(toString(order.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes(MediaType.APPLICATION_XML)
+ @Path("{realm}/activities")
+ public Response addActivitiyAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ Activity activity = parseActivityFromXml(null, data);
+
+ AddActivityService svc = new AddActivityService();
+ AddActivityArg arg = new AddActivityArg();
+ arg.activity = activity;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ String asXml = activity.accept(new StrolchElementToXmlStringVisitor());
+ return Response.ok().type(MediaType.APPLICATION_XML).entity(asXml).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/activities")
+ public Response addActivitiyAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+
+ // parse from complete JSON
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ ActivityFromJsonVisitor visitor = new ActivityFromJsonVisitor();
+ Activity activity = visitor.visit(jsonObject);
+
+ AddActivityService svc = new AddActivityService();
+ AddActivityArg arg = new AddActivityArg();
+ arg.activity = activity;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
+ return Response.ok().entity(toString(activity.accept(toJsonVisitor))).build();
+ }
+
+ return Result.toResponse(result);
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("{realm}/activities/{type}")
+ public Response addActivitiyAsJsonFlat(@Context HttpServletRequest request, @PathParam("realm") String realm,
+ @PathParam("type") String type, @QueryParam("flat") String flatS, String data) {
+
+ Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
+ boolean flat = Boolean.parseBoolean(flatS);
+
+ Activity activity = parseNewActivityFromJson(cert, realm, type, data, flat);
+
+ AddActivityService svc = new AddActivityService();
+ AddActivityArg arg = new AddActivityArg();
+ arg.activity = activity;
+ arg.realm = realm;
+
+ ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
+ if (result.isOk()) {
+ StrolchElementToJsonVisitor toJsonVisitor = new StrolchElementToJsonVisitor().withVersion();
if (flat)
toJsonVisitor.flat();
return Response.ok().entity(toString(activity.accept(toJsonVisitor))).build();
@@ -967,4 +1163,145 @@ public class Inspector {
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
return Result.toResponse(result);
}
+
+ private Resource parseResourceFromXml(String type, String data) {
+ Resource resource;
+ try {
+ SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
+ SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+ parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
+
+ if (listener.getResources().size() == 0)
+ throw new StrolchPersistenceException("No Resource parsed from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+ if (listener.getResources().size() > 1)
+ throw new StrolchPersistenceException("Multiple Resources parsed from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+
+ resource = listener.getResources().get(0);
+
+ } catch (Exception e) {
+ throw new StrolchPersistenceException("Failed to extract Resource from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""), e);
+ }
+ return resource;
+ }
+
+ private Order parseOrderFromXml(String type, String data) {
+ Order order;
+ try {
+ SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
+ SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+ parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
+
+ if (listener.getOrders().size() == 0)
+ throw new StrolchPersistenceException(
+ "No Order parsed from xml value" + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+ if (listener.getOrders().size() > 1)
+ throw new StrolchPersistenceException("Multiple Orders parsed from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+
+ order = listener.getOrders().get(0);
+
+ } catch (Exception e) {
+ throw new StrolchPersistenceException("Failed to extract Order from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""), e);
+ }
+ return order;
+ }
+
+ private Activity parseActivityFromXml(String type, String data) {
+ Activity activity;
+ try {
+ SimpleStrolchElementListener listener = new SimpleStrolchElementListener();
+ SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+ parser.parse(new InputSource(new StringReader(data)), new XmlModelSaxReader(listener));
+
+ if (listener.getActivities().size() == 0)
+ throw new StrolchPersistenceException("No Activity parsed from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+ if (listener.getActivities().size() > 1)
+ throw new StrolchPersistenceException("Multiple Activities parsed from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""));
+
+ activity = listener.getActivities().get(0);
+
+ } catch (Exception e) {
+ throw new StrolchPersistenceException("Failed to extract Activity from xml value"
+ + (StringHelper.isNotEmpty(type) ? " for type " + type : ""), e);
+ }
+ return activity;
+ }
+
+ private Resource parseNewResourceFromJson(Certificate cert, String realm, String type, String data, boolean flat) {
+
+ // parse JSON string
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ Resource resource;
+ if (flat) {
+
+ // parse from flat JSON
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ resource = tx.getResourceTemplate(type, true);
+ }
+ resource.setId(jsonObject.get(Json.ID).getAsString());
+ new FromFlatJsonVisitor().visit(resource, jsonObject);
+
+ } else {
+
+ // parse from complete JSON
+ ResourceFromJsonVisitor visitor = new ResourceFromJsonVisitor();
+ resource = visitor.visit(jsonObject);
+ }
+
+ return resource;
+ }
+
+ private Order parseNewOrderFromJson(Certificate cert, String realm, String type, String data, boolean flat) {
+
+ // parse JSON string
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ Order order;
+ if (flat) {
+
+ // parse from flat JSON
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ order = tx.getOrderTemplate(type, true);
+ }
+ order.setId(jsonObject.get(Json.ID).getAsString());
+ new FromFlatJsonVisitor().visit(order, jsonObject);
+
+ } else {
+
+ // parse from complete JSON
+ OrderFromJsonVisitor visitor = new OrderFromJsonVisitor();
+ order = visitor.visit(jsonObject);
+ }
+
+ return order;
+ }
+
+ private Activity parseNewActivityFromJson(Certificate cert, String realm, String type, String data, boolean flat) {
+
+ // parse JSON string
+ JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
+ Activity activity;
+ if (flat) {
+
+ // parse from flat JSON
+ try (StrolchTransaction tx = openTx(cert, realm)) {
+ activity = tx.getActivityTemplate(type, true);
+ }
+ activity.setId(jsonObject.get(Json.ID).getAsString());
+ new FromFlatJsonVisitor().visit(activity, jsonObject);
+
+ } else {
+
+ // parse from complete JSON
+ ActivityFromJsonVisitor visitor = new ActivityFromJsonVisitor();
+ activity = visitor.visit(jsonObject);
+ }
+
+ return activity;
+ }
}