From 454b36d6599d70aefc0f1c187cd2e28bd27ada03 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 8 Apr 2016 18:04:37 +0200 Subject: [PATCH] [New] Now also showing activities in model view --- .../src/main/webapp/js/constants.js | 3 +- .../src/main/webapp/js/parts/model.js | 18 +++ .../src/main/webapp/parts/model.html | 24 ++++ .../model/query/parser/QueryParser.java | 16 +++ .../li/strolch/rest/endpoint/ModelQuery.java | 120 +++++++++--------- 5 files changed, 122 insertions(+), 59 deletions(-) diff --git a/li.strolch.planningwebapp/src/main/webapp/js/constants.js b/li.strolch.planningwebapp/src/main/webapp/js/constants.js index 67f731f9b..dc5ebbe8c 100644 --- a/li.strolch.planningwebapp/src/main/webapp/js/constants.js +++ b/li.strolch.planningwebapp/src/main/webapp/js/constants.js @@ -15,7 +15,8 @@ strolch.const = { auth: 'rest/strolch/authentication', version: 'rest/strolch/version', resources: 'rest/strolch/model/resources', - orders: 'rest/strolch/model/orders' + orders: 'rest/strolch/model/orders', + activities: 'rest/strolch/model/activities' }, auth_token: 'auth_token', diff --git a/li.strolch.planningwebapp/src/main/webapp/js/parts/model.js b/li.strolch.planningwebapp/src/main/webapp/js/parts/model.js index 9fce9d034..6b057d531 100644 --- a/li.strolch.planningwebapp/src/main/webapp/js/parts/model.js +++ b/li.strolch.planningwebapp/src/main/webapp/js/parts/model.js @@ -21,6 +21,7 @@ strolch.parts.model.init = function (domParent) { strolch.parts.model.prepareResourceTable(); strolch.parts.model.prepareOrderTable(); + strolch.parts.model.prepareActivityTable(); strolch.parts.model.registerHandlers(); }; @@ -81,3 +82,20 @@ strolch.parts.model.prepareOrderTable = function () { strolch.fn.initDataTable(data, columns); }; + +strolch.parts.model.prepareActivityTable = function () { + + // prepare query data + var data = strolch.fn.dataTableDefaults(); + data.realmName = ''; + data.url = strolch.fn.url(strolch.const.urls.activities); + data.tableId = 'modelActivityTable'; + data.searchFieldId = 'modelActivityTableSearch'; + + var columns = []; + columns.push({title: 'Id', width: 50, data: 'Id'}); + columns.push({title: 'Name', data: 'Name'}); + columns.push({title: 'Type', data: 'Type'}); + + strolch.fn.initDataTable(data, columns); +}; diff --git a/li.strolch.planningwebapp/src/main/webapp/parts/model.html b/li.strolch.planningwebapp/src/main/webapp/parts/model.html index 49355caf3..a5d95a452 100644 --- a/li.strolch.planningwebapp/src/main/webapp/parts/model.html +++ b/li.strolch.planningwebapp/src/main/webapp/parts/model.html @@ -8,6 +8,8 @@ + @@ -58,6 +60,28 @@ +
+
+
+
+
+
+ +
+
+
+
+
+
+ + + + +
The activities for the current user's realm
+
+
diff --git a/li.strolch.rest/src/main/java/li/strolch/model/query/parser/QueryParser.java b/li.strolch.rest/src/main/java/li/strolch/model/query/parser/QueryParser.java index 1cdb4e05e..1c0046cb7 100644 --- a/li.strolch.rest/src/main/java/li/strolch/model/query/parser/QueryParser.java +++ b/li.strolch.rest/src/main/java/li/strolch/model/query/parser/QueryParser.java @@ -11,6 +11,8 @@ import org.petitparser.tools.CompositeParser; import ch.eitchnet.utils.StringMatchMode; import li.strolch.model.Order; import li.strolch.model.Resource; +import li.strolch.model.activity.Activity; +import li.strolch.model.query.ActivityQuery; import li.strolch.model.query.IdSelection; import li.strolch.model.query.NameSelection; import li.strolch.model.query.OrSelection; @@ -18,6 +20,7 @@ import li.strolch.model.query.OrderQuery; import li.strolch.model.query.ResourceQuery; import li.strolch.model.query.StrolchElementQuery; import li.strolch.model.query.StrolchTypeNavigation; +import li.strolch.model.visitor.NoStrategyActivityVisitor; import li.strolch.model.visitor.NoStrategyOrderVisitor; import li.strolch.model.visitor.NoStrategyResourceVisitor; @@ -118,4 +121,17 @@ public class QueryParser extends CompositeParser { return query; } + + public static ActivityQuery parseToActivityQuery(String queryString, boolean withAny) { + QueryParser parser = new QueryParser(new ActivityQuery<>()); + Result result = parser.parse(queryString); + ActivityQuery query = result.get(); + query.setActivityVisitor(new NoStrategyActivityVisitor()); + + if (!query.hasSelection() && withAny) { + query.withAny(); + } + + return query; + } } 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 3a6c7f4b7..c9f00d80c 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 @@ -24,14 +24,18 @@ import com.google.gson.JsonObject; import ch.eitchnet.privilege.model.Certificate; import ch.eitchnet.utils.collections.Paging; import ch.eitchnet.utils.helper.StringHelper; +import li.strolch.agent.api.ActivityMap; import li.strolch.agent.api.OrderMap; import li.strolch.agent.api.ResourceMap; import li.strolch.model.Order; import li.strolch.model.Resource; import li.strolch.model.StrolchRootElement; 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.query.ActivityQuery; import li.strolch.model.query.OrderQuery; import li.strolch.model.query.ResourceQuery; import li.strolch.model.query.StrolchTypeNavigation; @@ -164,64 +168,64 @@ public class ModelQuery { return Response.ok(entity).build(); } -// /** -// * Query {@link Activity Activities} by parsing the query string in {@link QueryData#getQuery()} using -// * {@link QueryParser} -// * -// * @param queryData -// * the data from the client -// * @param request -// * the {@link HttpServletRequest} on which to get the {@link Certificate} -// * -// * @return {@link Response} containing the JSONified {@link Activity Activities} queried -// */ -// @GET -// @Produces(MediaType.APPLICATION_JSON) -// @Path("orders") -// public Response queryActivities(@BeanParam QueryData queryData, @Context HttpServletRequest request) { -// Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); -// -// // see if a special realm was requested -// String realmName = getRealmName(queryData); -// -// List activities = new ArrayList<>(); -// -// // parse the query string -// ActivityQuery query = QueryParser.parseToActivityQuery(queryData.getQuery(), true); -// -// // query the data -// long dataSetSize = 0L; -// try (StrolchTransaction tx = openTx(cert, realmName)) { -// ActivityMap activityMap = tx.getActivityMap(); -// -// if (query.hasNavigation()) { -// String type = ((StrolchTypeNavigation) query.getNavigation()).getType(); -// dataSetSize = activityMap.querySize(tx, type); -// activities.addAll(tx.doQuery(query)); -// } else { -// Set types = activityMap.getTypes(tx); -// dataSetSize = activityMap.querySize(tx); -// for (String type : types) { -// query.setNavigation(new StrolchTypeNavigation(type)); -// activities.addAll(tx.doQuery(query)); -// } -// } -// -// tx.doNothingOnClose(); -// } -// -// // do ordering -// doOrdering(queryData, activities); -// -// // build JSON response -// ActivityToJsonVisitor toJsonVisitor = new ActivityToJsonVisitor(); -// JsonObject root = marshall(queryData, dataSetSize, activities, toJsonVisitor); -// -// // marshall result -// Gson gson = new GsonBuilder().setPrettyPrinting().create(); -// String entity = gson.toJson(root); -// return Response.ok(entity).build(); -// } + /** + * Query {@link Activity Activities} by parsing the query string in {@link QueryData#getQuery()} using + * {@link QueryParser} + * + * @param queryData + * the data from the client + * @param request + * the {@link HttpServletRequest} on which to get the {@link Certificate} + * + * @return {@link Response} containing the JSONified {@link Activity Activities} queried + */ + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("activities") + public Response queryActivities(@BeanParam QueryData queryData, @Context HttpServletRequest request) { + Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); + + // see if a special realm was requested + String realmName = getRealmName(queryData); + + List activities = new ArrayList<>(); + + // parse the query string + ActivityQuery query = QueryParser.parseToActivityQuery(queryData.getQuery(), true); + + // query the data + long dataSetSize = 0L; + try (StrolchTransaction tx = openTx(cert, realmName)) { + ActivityMap activityMap = tx.getActivityMap(); + + if (query.hasNavigation()) { + String type = ((StrolchTypeNavigation) query.getNavigation()).getType(); + dataSetSize = activityMap.querySize(tx, type); + activities.addAll(tx.doQuery(query)); + } else { + Set types = activityMap.getTypes(tx); + dataSetSize = activityMap.querySize(tx); + for (String type : types) { + query.setNavigation(new StrolchTypeNavigation(type)); + activities.addAll(tx.doQuery(query)); + } + } + + tx.doNothingOnClose(); + } + + // do ordering + doOrdering(queryData, activities); + + // build JSON response + ActivityToJsonVisitor toJsonVisitor = new ActivityToJsonVisitor(); + JsonObject root = marshall(queryData, dataSetSize, activities, toJsonVisitor); + + // marshall result + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + String entity = gson.toJson(root); + return Response.ok(entity).build(); + } private JsonObject marshall(QueryData queryData, long dataSetSize, List elements, StrolchElementVisitor toJsonVisitor) {