# HG changeset patch # User Raimund Renkert # Date 1447326918 -3600 # Node ID c151b09af33b7899ae4cf3718d60fffd0322603b # Parent 46e0523bbd80c55e1729cac0b77665a6618db703 Return only reachable status values. diff -r 46e0523bbd80 -r c151b09af33b src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java --- a/src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java Thu Nov 12 12:14:46 2015 +0100 +++ b/src/main/java/de/intevation/lada/rest/stamm/StatusWertService.java Thu Nov 12 12:15:18 2015 +0100 @@ -23,12 +23,20 @@ import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; +import org.apache.log4j.Logger; + +import de.intevation.lada.model.bund.StatusProtokoll; +import de.intevation.lada.model.land.LMessung; +import de.intevation.lada.model.stamm.StatusErreichbar; +import de.intevation.lada.model.stamm.StatusKombi; +import de.intevation.lada.model.stamm.StatusReihenfolge; import de.intevation.lada.model.stamm.StatusWert; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.annotation.RepositoryConfig; import de.intevation.lada.util.auth.Authorization; import de.intevation.lada.util.auth.AuthorizationType; import de.intevation.lada.util.auth.UserInfo; +import de.intevation.lada.util.data.QueryBuilder; import de.intevation.lada.util.data.Repository; import de.intevation.lada.util.data.RepositoryType; import de.intevation.lada.util.rest.Response; @@ -61,6 +69,8 @@ @RequestScoped public class StatusWertService { + @Inject + private Logger logger = Logger.getLogger(StatusWertService.class); /** * The data repository granting read access. */ @@ -122,8 +132,37 @@ private List getReachable(int messungsId, UserInfo user) { List list = new ArrayList(); - // TODO get reachable status values from db using the current status and - // the user info. + LMessung messung = + defaultRepo.getByIdPlain(LMessung.class, messungsId, "land"); + StatusProtokoll status = defaultRepo.getByIdPlain( + StatusProtokoll.class, + messung.getStatus(), + "land"); + boolean allowed = false; + for (int i = 0; i < user.getFunktionen().size(); i++) { + if (user.getFunktionen().get(i) >= status.getStatusStufe()) { + allowed = true; + break; + } + } + if (!allowed) { + return list; + } + QueryBuilder errFilter = + new QueryBuilder( + defaultRepo.entityManager("stamm"), + StatusErreichbar.class); + errFilter.and("curStufe", status.getStatusStufe()); + errFilter.and("curWert", status.getStatusWert()); + List erreichbare = defaultRepo.filterPlain(errFilter.getQuery(), "stamm"); + QueryBuilder werteFilter = + new QueryBuilder( + defaultRepo.entityManager("stamm"), + StatusWert.class); + for (int i = 0; i < erreichbare.size(); i++) { + werteFilter.or("id", erreichbare.get(i).getWertId()); + } + list = defaultRepo.filterPlain(werteFilter.getQuery(), "stamm"); return list; } }