# HG changeset patch # User Raimund Renkert # 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 filters, + MultivaluedMap params, + EntityManager manager + ) { + Query query = manager.createNativeQuery(sql); + for (String filter: filters) { + List param = params.get(filter); + List clean = new ArrayList(); + for(String p : param) { + clean.add(p.replace(",", "|")); + } + query.setParameter(filter, clean); + } + return query; + } + + public static List> prepareResult( + List result, + List names + ) { + List> ret = new ArrayList>(); + for (Object[] row: result) { + Map set = new HashMap(); + 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 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 filters = new ArrayList(); + List results = new ArrayList(); + 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()); + } + Query query = QueryTools.prepareQuery( + sql, + filters, + params, + defaultRepo.entityManager("land")); + return new Response(true, 200, QueryTools.prepareResult(query.getResultList(), results)); } /**