[Lada-commits] [PATCH 4 of 4] Updated GET service for probe objects. Service is using filters now
Wald Commits
scm-commit at wald.intevation.org
Wed Feb 11 15:27:15 CET 2015
# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1423664837 -3600
# Node ID 01d6da858394a00ce6bf16143f839fc27cb2f988
# Parent 13ed418234f9a71f791a8cfc4178b6edf219087a
Updated GET service for probe objects. Service is using filters now.
diff -r 13ed418234f9 -r 01d6da858394 src/main/java/de/intevation/lada/query/QueryTools.java
--- a/src/main/java/de/intevation/lada/query/QueryTools.java Wed Feb 11 15:26:06 2015 +0100
+++ b/src/main/java/de/intevation/lada/query/QueryTools.java Wed Feb 11 15:27:17 2015 +0100
@@ -11,13 +11,18 @@
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.json.JsonReader;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.ws.rs.core.MultivaluedMap;
/**
@@ -133,4 +138,37 @@
return null;
}
}
+
+ public static Query prepareQuery(
+ String sql,
+ List<String> filters,
+ MultivaluedMap<String, String> params,
+ EntityManager manager
+ ) {
+ Query query = manager.createNativeQuery(sql);
+ for (String filter: filters) {
+ List<String> param = params.get(filter);
+ List<String> clean = new ArrayList<String>();
+ for(String p : param) {
+ clean.add(p.replace(",", "|"));
+ }
+ query.setParameter(filter, clean);
+ }
+ return query;
+ }
+
+ public static List<Map<String, Object>> prepareResult(
+ List<Object[]> result,
+ List<String> names
+ ) {
+ List<Map<String, Object>> ret = new ArrayList<Map<String, Object>>();
+ for (Object[] row: result) {
+ Map<String, Object> set = new HashMap<String, Object>();
+ for (int i = 0; i < row.length; i++) {
+ set.put(names.get(i), row[i]);
+ }
+ ret.add(set);
+ }
+ return ret;
+ }
}
diff -r 13ed418234f9 -r 01d6da858394 src/main/java/de/intevation/lada/rest/ProbeService.java
--- a/src/main/java/de/intevation/lada/rest/ProbeService.java Wed Feb 11 15:26:06 2015 +0100
+++ b/src/main/java/de/intevation/lada/rest/ProbeService.java Wed Feb 11 15:27:17 2015 +0100
@@ -7,10 +7,15 @@
*/
package de.intevation.lada.rest;
+import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
+import javax.json.JsonArray;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.persistence.Query;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -21,11 +26,14 @@
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import de.intevation.lada.model.land.LProbe;
import de.intevation.lada.model.land.ProbeTranslation;
+import de.intevation.lada.query.QueryTools;
import de.intevation.lada.util.annotation.AuthenticationConfig;
import de.intevation.lada.util.annotation.AuthorizationConfig;
import de.intevation.lada.util.annotation.RepositoryConfig;
@@ -72,15 +80,49 @@
*
* @return Response object containing all probe objects.
*/
+ @SuppressWarnings("unchecked")
@GET
@Path("/")
@Produces("application/json")
- public Response get(@Context HttpHeaders headers) {
+ public Response get(
+ @Context HttpHeaders headers,
+ @Context UriInfo info
+ ) {
if (!authentication.isAuthenticated(headers)) {
logger.debug("User is not authenticated!");
return new Response(false, 699, null);
}
- return defaultRepo.getAll(LProbe.class, "land");
+ MultivaluedMap<String, String> params = info.getQueryParameters();
+ if (params.isEmpty() || !params.containsKey("qid")) {
+ return defaultRepo.getAll(LProbe.class, "land");
+ }
+ String qid = params.getFirst("qid");
+ JsonObject jsonQuery = QueryTools.getQueryById(qid);
+ String sql = "";
+ List<String> filters = new ArrayList<String>();
+ List<String> results = new ArrayList<String>();
+ try {
+ sql = jsonQuery.getString("sql");
+ JsonArray jsonFilters = jsonQuery.getJsonArray("filters");
+ JsonArray jsonResults = jsonQuery.getJsonArray("result");
+ for (int i = 0; i < jsonFilters.size(); i++) {
+ filters.add(
+ jsonFilters.getJsonObject(i).getString("dataIndex"));
+ }
+ for (int i = 0; i < jsonResults.size(); i++) {
+ results.add(
+ jsonResults.getJsonObject(i).getString("dataIndex"));
+ }
+ }
+ catch (JsonException je) {
+ return new Response(false, 603, new ArrayList<Object>());
+ }
+ Query query = QueryTools.prepareQuery(
+ sql,
+ filters,
+ params,
+ defaultRepo.entityManager("land"));
+ return new Response(true, 200, QueryTools.prepareResult(query.getResultList(), results));
}
/**
More information about the Lada-commits
mailing list