Mercurial > lada > lada-server
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 (2016-10-28) |
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"),