changeset 1121:24f374c771b3

StatusWertService: accept comma separated list of Messung IDs.
author Tom Gottfried <tom@intevation.de>
date Fri, 28 Oct 2016 18:49:41 +0200
parents 7061388e0af7
children 1ef08710aaeb
files src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java
diffstat 1 files changed, 44 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java	Fri Oct 28 16:49:47 2016 +0200
+++ b/src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java	Fri Oct 28 18:49:41 2016 +0200
@@ -96,9 +96,17 @@
         if (params.isEmpty() || !params.containsKey("messungsId")) {
             return defaultRepo.getAll(StatusWert.class, "stamm");
         }
-        int messungsId = Integer.valueOf(params.getFirst("messungsId"));
+
+        List<Integer> mIds = new ArrayList<Integer>();
+        for (String messId : params.getFirst("messungsId").split(",")) {
+            try {
+                mIds.add(Integer.valueOf(messId));
+            } catch (NumberFormatException nfe) {
+                return new Response(false, 612, null);
+            }
+        }
         UserInfo user = authorization.getInfo(request);
-        List<StatusWert> werte = getReachable(messungsId, user);
+        List<StatusWert> werte = getReachable(mIds, user);
         Response response = new Response(true, 200, werte);
         return response;
     }
@@ -125,28 +133,43 @@
             "stamm");
     }
 
-    private List<StatusWert> getReachable(int messungsId, UserInfo user) {
+    /**
+     * Get the list of possible status values following the actual status
+     * values of the Messungen represented by the given IDs.
+     *
+     * @return Disjunction of possible status values for all Messungen
+     */
+    private List<StatusWert> getReachable(
+        List<Integer> messIds,
+        UserInfo user
+    ) {
         List<StatusWert> list = new ArrayList<StatusWert>();
-        Messung messung =
-            defaultRepo.getByIdPlain(Messung.class, messungsId, "land");
-        if (messung.getStatus() == null) {
-            return defaultRepo.getAllPlain(StatusWert.class, "stamm");
+
+        QueryBuilder<Messung> messungQuery = new QueryBuilder<Messung>(
+            defaultRepo.entityManager("land"),
+            Messung.class);
+        messungQuery.orIn("id", messIds);
+        List<Messung> messungen = defaultRepo.filterPlain(
+            messungQuery.getQuery(), "land");
+
+        List<StatusErreichbar> erreichbare = new ArrayList<StatusErreichbar>();
+        for (Messung messung : messungen) {
+            StatusProtokoll status = defaultRepo.getByIdPlain(
+                StatusProtokoll.class, messung.getStatus(), "land");
+            StatusKombi kombi = defaultRepo.getByIdPlain(
+                StatusKombi.class, status.getStatusKombi(), "stamm");
+
+            QueryBuilder<StatusErreichbar> errFilter =
+                new QueryBuilder<StatusErreichbar>(
+                    defaultRepo.entityManager("stamm"),
+                    StatusErreichbar.class);
+            errFilter.andIn("stufeId", user.getFunktionen());
+            errFilter.and("curStufe", kombi.getStatusStufe().getId());
+            errFilter.and("curWert", kombi.getStatusWert().getId());
+            erreichbare.addAll(defaultRepo.filterPlain(
+                    errFilter.getQuery(), "stamm"));
         }
-        StatusProtokoll status = defaultRepo.getByIdPlain(
-            StatusProtokoll.class,
-            messung.getStatus(),
-            "land");
 
-        QueryBuilder<StatusErreichbar> errFilter =
-            new QueryBuilder<StatusErreichbar>(
-                defaultRepo.entityManager("stamm"),
-                StatusErreichbar.class);
-        StatusKombi kombi = defaultRepo.getByIdPlain(StatusKombi.class, status.getStatusKombi(), "stamm");
-        errFilter.andIn("stufeId", user.getFunktionen());
-        errFilter.and("curStufe", kombi.getStatusStufe().getId());
-        errFilter.and("curWert", kombi.getStatusWert().getId());
-        List<StatusErreichbar> erreichbare = defaultRepo.filterPlain(
-            errFilter.getQuery(), "stamm");
         QueryBuilder<StatusWert> werteFilter =
             new QueryBuilder<StatusWert>(
                 defaultRepo.entityManager("stamm"),
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)