[New] Now also showing activities in model view

This commit is contained in:
Robert von Burg 2016-04-08 18:04:37 +02:00
parent cac24481ee
commit 454b36d659
5 changed files with 122 additions and 59 deletions

View File

@ -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',

View File

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

View File

@ -8,6 +8,8 @@
</li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#model-ordersTab" role="tab">Orders</a>
</li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#model-activitiesTab" role="tab">Activities</a>
</li>
</ul>
<!-- Tab panes -->
@ -58,6 +60,28 @@
</table>
</div>
</div>
<div class="tab-pane" id="model-activitiesTab" role="tabpanel">
<div class="row">
<div class="col-sm-12">
<form>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-8">
<input type="text" class="form-control" id="modelActivityTableSearch"
placeholder="[id:<value>] [name:<value>] [type:<value>] [param:<bagId>:<paramId>] [value]">
</div>
</div>
</form>
</div>
</div>
<div class="row">
<table id="modelActivityTable" class="table table-striped table-bordered hover" cellspacing="0"
width="100%">
<caption>The activities for the current user's realm</caption>
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -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<Activity> parseToActivityQuery(String queryString, boolean withAny) {
QueryParser parser = new QueryParser(new ActivityQuery<>());
Result result = parser.parse(queryString);
ActivityQuery<Activity> query = result.get();
query.setActivityVisitor(new NoStrategyActivityVisitor());
if (!query.hasSelection() && withAny) {
query.withAny();
}
return query;
}
}

View File

@ -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<Activity> activities = new ArrayList<>();
//
// // parse the query string
// ActivityQuery<Activity> 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<String> 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<Activity> activities = new ArrayList<>();
// parse the query string
ActivityQuery<Activity> 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<String> 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 <T extends StrolchRootElement> JsonObject marshall(QueryData queryData, long dataSetSize, List<T> elements,
StrolchElementVisitor<T, JsonObject> toJsonVisitor) {