# HG changeset patch # User Raimund Renkert # Date 1453363317 -3600 # Node ID 2fe625c91ab3ffee85955c0bc53c95e6f9b08cc7 # Parent 9dd9a3de7a6178d9cc5c022bb5b7f0e2a0ab43ba# Parent 2203e5d76071eff40e210c9310ffe13aaf2ee12d Merged branches. diff -r 9dd9a3de7a61 -r 2fe625c91ab3 .hgignore --- a/.hgignore Fri Jan 08 12:20:31 2016 +0100 +++ b/.hgignore Thu Jan 21 09:01:57 2016 +0100 @@ -8,6 +8,8 @@ .factorypath .gitignore .project +*.swp +*.swo *~ # intellij support - ignore *.iml, .idea @@ -18,4 +20,3 @@ syntax: regexp ^target/ ^.settings - diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/rest/KommentarMService.java --- a/src/main/java/de/intevation/lada/rest/KommentarMService.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/KommentarMService.java Thu Jan 21 09:01:57 2016 +0100 @@ -87,12 +87,14 @@ /** * Get all KommentarM objects. *

- * The requested objects can be filtered using a URL parameter named + * The requested objects have to be filtered using an URL parameter named * messungsId. *

* Example: http://example.com/mkommentar?messungsId=[ID] * - * @return Response object containing all (filtered) KommentarM objects. + * @return Response object containing filtered KommentarM objects. + * Status-Code 699 if parameter is missing or requested objects are + * not authorized. */ @GET @Path("/") diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/rest/MessprogrammService.java --- a/src/main/java/de/intevation/lada/rest/MessprogrammService.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/MessprogrammService.java Thu Jan 21 09:01:57 2016 +0100 @@ -326,7 +326,9 @@ return new Response(false, 699, null); } messprogramm.setLetzteAenderung(new Timestamp(new Date().getTime())); - messprogramm = factory.findUmweltId(messprogramm); + if (messprogramm.getUmwId() == null || messprogramm.getUmwId().equals("")) { + messprogramm = factory.findUmweltId(messprogramm); + } Response response = defaultRepo.update(messprogramm, "land"); Response updated = defaultRepo.getById( Messprogramm.class, diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/rest/MesswertService.java --- a/src/main/java/de/intevation/lada/rest/MesswertService.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/MesswertService.java Thu Jan 21 09:01:57 2016 +0100 @@ -122,12 +122,14 @@ /** * Get all Messwert objects. *

- * The requested objects can be filtered using a URL parameter named - * probeId. + * The requested objects have to be filtered using an URL parameter named + * messungsId. *

* Example: http://example.com/messwert?messungsId=[ID] * - * @return Response object containing all Messwert objects. + * @return Response object containing filtered Messwert objects. + * Status-Code 699 if parameter is missing or requested objects are + * not authorized. */ @GET @Path("/") diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/rest/ProbeService.java --- a/src/main/java/de/intevation/lada/rest/ProbeService.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/ProbeService.java Thu Jan 21 09:01:57 2016 +0100 @@ -450,7 +450,9 @@ if (lock.isLocked(probe)) { return new Response(false, 697, null); } - probe = factory.findMediaDesk(probe); + if (probe.getMediaDesk() == null || probe.getMediaDesk() == "") { + probe = factory.findMediaDesk(probe); + } Violation violation = validator.validate(probe); if (violation.hasErrors()) { Response response = new Response(false, 604, null); @@ -458,7 +460,9 @@ response.setWarnings(violation.getWarnings()); return response; } - factory.findUmweltId(probe); + if (probe.getUmwId() == null || probe.getUmwId() == "") { + factory.findUmweltId(probe); + } probe.setLetzteAenderung(new Timestamp(new Date().getTime())); Response response = defaultRepo.update(probe, "land"); Response updated = defaultRepo.getById( diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/rest/StatusService.java --- a/src/main/java/de/intevation/lada/rest/StatusService.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/StatusService.java Thu Jan 21 09:01:57 2016 +0100 @@ -7,6 +7,8 @@ */ package de.intevation.lada.rest; +import java.sql.Timestamp; +import java.util.Date; import java.util.List; import javax.enterprise.context.RequestScoped; @@ -31,6 +33,7 @@ import de.intevation.lada.lock.LockType; import de.intevation.lada.lock.ObjectLocker; import de.intevation.lada.model.land.LMessung; +import de.intevation.lada.model.land.LProbe; import de.intevation.lada.model.land.LStatusProtokoll; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.annotation.RepositoryConfig; @@ -115,12 +118,14 @@ /** * Get all Status objects. *

- * The requested objects can be filtered using a URL parameter named + * The requested objects have to be filtered using an URL parameter named * messungsId. *

* Example: http://example.com/status?messungsId=[ID] * - * @return Response object containing all Status objects. + * @return Response object containing filtered Status objects. + * Status-Code 699 if parameter is missing or requested objects are + * not authorized. */ @GET @Path("/") @@ -240,27 +245,71 @@ else { LStatusProtokoll currentStatus = defaultRepo.getByIdPlain( LStatusProtokoll.class, messung.getStatus(), "land"); - for (int i = 0; i < userInfo.getFunktionen().size(); i++) { - if (userInfo.getFunktionen().get(i) > currentStatus.getStatusStufe()) { - next = true; - change = false; - break; + + if (currentStatus.getStatusWert() == 4) { + LProbe probe = defaultRepo.getByIdPlain( + LProbe.class, + messung.getProbeId(), + "land"); + if (userInfo.getFunktionenForMst(probe.getMstId()).contains(1) && + probe.getMstId().equals(status.getErzeuger()) + ) { + status.setStatusStufe(1); } - else if (userInfo.getFunktionen().get(i) == currentStatus.getStatusStufe()) { - change = true; + else { + return new Response(false, 699, null); } } - if ((change || next) && status.getStatusWert() == 4) { - status.setStatusStufe(1); - } - else if (change) { - status.setStatusStufe(currentStatus.getStatusStufe()); - } - else if (next) { - status.setStatusStufe(currentStatus.getStatusStufe() + 1); - } else { - return new Response(false, 699, null); + for (int i = 0; + i < userInfo.getFunktionenForMst(status.getErzeuger()).size(); + i++ + ) { + if (userInfo.getFunktionenForMst( + status.getErzeuger()).get(i) > + currentStatus.getStatusStufe() && + currentStatus.getStatusWert() != 0 + ) { + next = true; + } + else if (userInfo.getFunktionenForMst( + status.getErzeuger()).get(i) == + currentStatus.getStatusStufe() + ) { + change = true; + } + } + if (change && + status.getStatusWert() == 4 && + status.getStatusStufe() > 1 + ) { + status.setStatusStufe(currentStatus.getStatusStufe()); + messung.setFertig(false); + } + else if (change && status.getStatusWert() == 8) { + return authorization.filter( + request, + resetStatus(status, currentStatus, messung), + LStatusProtokoll.class); + } + else if (change && status.getStatusWert() != 0) { + status.setStatusStufe(currentStatus.getStatusStufe()); + if (status.getStatusStufe() == 1) { + messung.setFertig(true); + } + } + else if (next && + (status.getStatusWert() > 0 && + status.getStatusWert() <= 4 || + status.getStatusWert() == 7)) { + status.setStatusStufe(currentStatus.getStatusStufe() + 1); + if (status.getStatusWert() == 4) { + messung.setFertig(false); + } + } + else { + return new Response(false, 699, null); + } } } Violation violation = validator.validate(status); @@ -311,55 +360,7 @@ @Context HttpServletRequest request, LStatusProtokoll status ) { - if (lock.isLocked(status)) { - return new Response(false, 697, null); - } - - UserInfo userInfo = authorization.getInfo(request); - if (!userInfo.getMessstellen().contains(status.getErzeuger())) { - return new Response(false, 699, null); - } - LMessung messung = defaultRepo.getByIdPlain( - LMessung.class, status.getMessungsId(), "land"); - LStatusProtokoll statusNew = new LStatusProtokoll(); - statusNew.setDatum(status.getDatum()); - statusNew.setErzeuger(status.getErzeuger()); - statusNew.setMessungsId(status.getMessungsId()); - statusNew.setStatusStufe(status.getStatusStufe()); - statusNew.setStatusWert(status.getStatusWert()); - statusNew.setText(status.getText()); - Violation violation = validator.validate(statusNew); - if (violation.hasErrors()) { - Response response = new Response(false, 604, statusNew); - response.setErrors(violation.getErrors()); - response.setWarnings(violation.getWarnings()); - return response; - } - - Response response = defaultRepo.create(statusNew, "land"); - LStatusProtokoll created = (LStatusProtokoll)response.getData(); - if (status.getStatusWert() == 0) { - QueryBuilder lastFilter = - new QueryBuilder( - defaultRepo.entityManager("land"), - LStatusProtokoll.class); - - lastFilter.and("messungsId", status.getMessungsId()); - lastFilter.orderBy("datum", false); - List protos = - defaultRepo.filterPlain(lastFilter.getQuery(), "land"); - messung.setStatus(protos.get(protos.size() - 3).getId()); - } - else { - messung.setStatus(created.getId()); - } - - defaultRepo.update(messung, "land"); - - return authorization.filter( - request, - response, - LStatusProtokoll.class); + return new Response(false, 699, null); } /** @@ -397,4 +398,59 @@ /* Delete the object*/ return defaultRepo.delete(obj, "land"); } + + private Response resetStatus( + LStatusProtokoll status, + LStatusProtokoll currentStatus, + LMessung messung + ) { + // Create a new Status with value = 8. + LStatusProtokoll statusNew = new LStatusProtokoll(); + statusNew.setDatum(new Timestamp(new Date().getTime())); + statusNew.setErzeuger(status.getErzeuger()); + statusNew.setMessungsId(status.getMessungsId()); + statusNew.setStatusStufe(status.getStatusStufe()); + statusNew.setStatusWert(8); + statusNew.setText("Reset"); + + defaultRepo.create(statusNew, "land"); + + Response retValue; + if (currentStatus.getStatusStufe() == 1) { + LStatusProtokoll nV = new LStatusProtokoll(); + nV.setDatum(new Timestamp(new Date().getTime())); + nV.setErzeuger(status.getErzeuger()); + nV.setMessungsId(status.getMessungsId()); + nV.setStatusStufe(1); + nV.setStatusWert(0); + nV.setText(""); + retValue = defaultRepo.create(nV, "land"); + messung.setStatus(((LStatusProtokoll)retValue.getData()).getId()); + messung.setFertig(false); + } + else { + QueryBuilder lastFilter = + new QueryBuilder( + defaultRepo.entityManager("land"), + LStatusProtokoll.class); + lastFilter.and("messungsId", status.getMessungsId()); + lastFilter.and("statusStufe", status.getStatusStufe() - 1); + lastFilter.orderBy("datum", true); + List proto = + defaultRepo.filterPlain(lastFilter.getQuery(), "land"); + LStatusProtokoll copy = new LStatusProtokoll(); + LStatusProtokoll orig = proto.get(proto.size() - 1); + copy.setDatum(new Timestamp(new Date().getTime())); + copy.setErzeuger(orig.getErzeuger()); + copy.setMessungsId(orig.getMessungsId()); + copy.setStatusStufe(orig.getStatusStufe()); + copy.setStatusWert(orig.getStatusWert()); + copy.setText(orig.getText()); + retValue = defaultRepo.create(copy, "land"); + LStatusProtokoll createdCopy = (LStatusProtokoll)retValue.getData(); + messung.setStatus(createdCopy.getId()); + } + defaultRepo.update(messung, "land"); + return retValue; + } } diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/util/auth/BaseAuthorizer.java --- a/src/main/java/de/intevation/lada/util/auth/BaseAuthorizer.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/BaseAuthorizer.java Thu Jan 21 09:01:57 2016 +0100 @@ -56,7 +56,7 @@ List messungen = (List) response.getData(); for (int i = 0; i < messungen.size(); i++) { if (messungen.get(i).getStatus() == null) { - return false; + continue; } LStatusProtokoll status = repository.getByIdPlain( LStatusProtokoll.class, messungen.get(i).getStatus(), "land"); diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java --- a/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Thu Jan 21 09:01:57 2016 +0100 @@ -92,9 +92,7 @@ HttpServletRequest request = (HttpServletRequest)source; String roleString = request.getAttribute("lada.user.roles").toString(); - String[] roles = roleString.split(","); UserInfo info = getGroupsFromDB(roleString); - info.setRoles(new ArrayList(Arrays.asList(roles))); info.setName(request.getAttribute("lada.user.name").toString()); return info; } @@ -170,27 +168,8 @@ Response response = repository.filter(builder.getQuery(), "stamm"); @SuppressWarnings("unchecked") List auth = (List)response.getData(); - List netzbetreiber = new ArrayList(); - List messstellen = new ArrayList(); - List funktionen = new ArrayList(); - for (Auth a : auth) { - if (a.getNetzbetreiberId() != null) { - netzbetreiber.add(a.getNetzbetreiberId()); - } - if (a.getMstId() != null) { - messstellen.add(a.getMstId()); - } - if (a.getLaborMstId() != null) { - messstellen.add(a.getLaborMstId()); - } - if (a.getFunktionId() != null) { - funktionen.add(a.getFunktionId()); - } - } UserInfo userInfo = new UserInfo(); - userInfo.setNetzbetreiber(netzbetreiber); - userInfo.setMessstellen(messstellen); - userInfo.setFunktionen(funktionen); + userInfo.setAuth(auth); return userInfo; } @@ -213,7 +192,7 @@ List messungen = (List) response.getData(); for (int i = 0; i < messungen.size(); i++) { if (messungen.get(i).getStatus() == null) { - return false; + continue; } LStatusProtokoll status = repository.getByIdPlain( LStatusProtokoll.class, messungen.get(i).getStatus(), "land"); diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/util/auth/ProbeAuthorizer.java --- a/src/main/java/de/intevation/lada/util/auth/ProbeAuthorizer.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/ProbeAuthorizer.java Thu Jan 21 09:01:57 2016 +0100 @@ -17,14 +17,11 @@ Class clazz ) { LProbe probe = (LProbe)data; - if (method == RequestMethod.POST) { - return getAuthorization(userInfo, probe); - } - else if (method == RequestMethod.PUT || - method == RequestMethod.DELETE) { + if (method == RequestMethod.PUT || + method == RequestMethod.DELETE) { return !isProbeReadOnly(probe.getId()); } - return false; + return getAuthorization(userInfo, probe); } @SuppressWarnings("unchecked") diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/util/auth/TestAuthorization.java --- a/src/main/java/de/intevation/lada/util/auth/TestAuthorization.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/TestAuthorization.java Thu Jan 21 09:01:57 2016 +0100 @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; +import de.intevation.lada.model.stamm.Auth; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.rest.RequestMethod; import de.intevation.lada.util.rest.Response; @@ -21,19 +22,28 @@ public UserInfo getInfo(Object source) { UserInfo info = new UserInfo(); info.setName("testeins"); + List auth = new ArrayList(); + Auth a1 = new Auth(); + a1.setFunktionId(0); + a1.setLdapGroup("mst_06010"); + a1.setMstId("06010"); + a1.setNetzbetreiberId("06"); + auth.add(a1); + Auth a2 = new Auth(); + a2.setFunktionId(0); + a2.setLdapGroup("mst_11010"); + a2.setNetzbetreiberId("11"); + a2.setMstId("11010"); + auth.add(a2); + Auth a3 = new Auth(); + a3.setLdapGroup("Imis_world"); + a3.setFunktionId(0); + auth.add(a3); List roles = new ArrayList(); roles.add("mst_06010"); roles.add("mst_11010"); roles.add("ImisWorld"); - info.setRoles(roles); - List netz = new ArrayList(); - netz.add("06"); - netz.add("11"); - info.setNetzbetreiber(netz); - List mess = new ArrayList(); - mess.add("06010"); - mess.add("11010"); - info.setMessstellen(mess); + info.setAuth(auth); return info; } diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/main/java/de/intevation/lada/util/auth/UserInfo.java --- a/src/main/java/de/intevation/lada/util/auth/UserInfo.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/UserInfo.java Thu Jan 21 09:01:57 2016 +0100 @@ -10,6 +10,8 @@ import java.util.ArrayList; import java.util.List; +import de.intevation.lada.model.stamm.Auth; + /** * Container for user specific information. * @@ -21,6 +23,7 @@ private List netzbetreiber; private List roles; private List funktionen; + private List auth; private Integer statusRole; public UserInfo() { @@ -46,49 +49,63 @@ * @return the messstellen */ public List getMessstellen() { - return messstellen; - } - - /** - * @param messstellen the messstellen to set - */ - public void setMessstellen(List messstellen) { - this.messstellen = messstellen; + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getMstId() != null) { + ret.add(a.getMstId()); + } + } + return ret; } /** * @return the netzbetreiber */ public List getNetzbetreiber() { - return netzbetreiber; - } - - /** - * @param netzbetreiber the netzbetreiber to set - */ - public void setNetzbetreiber(List netzbetreiber) { - this.netzbetreiber = netzbetreiber; + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getNetzbetreiberId() != null) { + ret.add(a.getNetzbetreiberId()); + } + } + return ret; } - /** - * @return the roles - */ - public List getRoles() { - return roles; - } - - /** - * @param roles the roles to set - */ - public void setRoles(List roles) { - this.roles = roles; + public List getFunktionen() { + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getFunktionId() != null) { + ret.add(a.getFunktionId()); + } + } + return ret; } /** * @return the funktionen */ - public List getFunktionen() { - return this.funktionen; + public List getFunktionenForMst(String mstId) { + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getMstId() != null && a.getMstId().equals(mstId)) { + ret.add(a.getFunktionId()); + } + } + return ret; + } + + /** + * @return the funktionen + */ + public List getFunktionenForNetzbetreiber(String nId) { + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getNetzbetreiberId() != null && + a.getNetzbetreiberId().equals(nId)) { + ret.add(a.getFunktionId()); + } + } + return ret; } /** @@ -102,11 +119,14 @@ return retVal; } - /** - * @param funktionen the funktionen to set - */ - public void setFunktionen(List funktionen) { - this.funktionen = funktionen; + public List getRoles() { + List ret = new ArrayList(); + for (Auth a : auth) { + if (a.getLdapGroup() != null) { + ret.add(a.getLdapGroup()); + } + } + return ret; } /** @@ -122,4 +142,8 @@ public void setStatusRole(Integer statusRole) { this.statusRole = statusRole; } + + public void setAuth(List auth) { + this.auth = auth; + } } diff -r 9dd9a3de7a61 -r 2fe625c91ab3 src/test/java/de/intevation/lada/test/ServiceTest.java --- a/src/test/java/de/intevation/lada/test/ServiceTest.java Fri Jan 08 12:20:31 2016 +0100 +++ b/src/test/java/de/intevation/lada/test/ServiceTest.java Thu Jan 21 09:01:57 2016 +0100 @@ -236,6 +236,7 @@ .header("X-SHIB-roles", BaseTest.TEST_ROLES) .post(Entity.entity(create.toString(), MediaType.APPLICATION_JSON)); String entity = response.readEntity(String.class); + System.out.println(entity); /* Try to parse the response*/ JsonReader fromServiceReader = Json.createReader(new StringReader(entity));