# HG changeset patch # User Tom Gottfried # Date 1477673381 -7200 # Node ID 24f374c771b3e789848d4e35acab0d12a0febd7a # Parent 7061388e0af7a5a255d458f0bd6cbb92559cb646 StatusWertService: accept comma separated list of Messung IDs. diff -r 7061388e0af7 -r 24f374c771b3 src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java --- 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 mIds = new ArrayList(); + 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 werte = getReachable(messungsId, user); + List werte = getReachable(mIds, user); Response response = new Response(true, 200, werte); return response; } @@ -125,28 +133,43 @@ "stamm"); } - private List 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 getReachable( + List messIds, + UserInfo user + ) { List list = new ArrayList(); - Messung messung = - defaultRepo.getByIdPlain(Messung.class, messungsId, "land"); - if (messung.getStatus() == null) { - return defaultRepo.getAllPlain(StatusWert.class, "stamm"); + + QueryBuilder messungQuery = new QueryBuilder( + defaultRepo.entityManager("land"), + Messung.class); + messungQuery.orIn("id", messIds); + List messungen = defaultRepo.filterPlain( + messungQuery.getQuery(), "land"); + + List erreichbare = new ArrayList(); + for (Messung messung : messungen) { + StatusProtokoll status = defaultRepo.getByIdPlain( + StatusProtokoll.class, messung.getStatus(), "land"); + StatusKombi kombi = defaultRepo.getByIdPlain( + StatusKombi.class, status.getStatusKombi(), "stamm"); + + QueryBuilder errFilter = + new QueryBuilder( + 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 errFilter = - new QueryBuilder( - 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 erreichbare = defaultRepo.filterPlain( - errFilter.getQuery(), "stamm"); QueryBuilder werteFilter = new QueryBuilder( defaultRepo.entityManager("stamm"),