# HG changeset patch # User Raimund Renkert # Date 1377847023 -7200 # Node ID 02803c0e7bd1a7c622b9287ca5a664e5057cd012 # Parent 17904ad125f3c94175b5fd16696f7e7e0c876f93 More vaidation for messung objects. diff -r 17904ad125f3 -r 02803c0e7bd1 src/main/java/de/intevation/lada/validation/LMessungValidator.java --- a/src/main/java/de/intevation/lada/validation/LMessungValidator.java Thu Aug 29 10:05:27 2013 +0200 +++ b/src/main/java/de/intevation/lada/validation/LMessungValidator.java Fri Aug 30 09:17:03 2013 +0200 @@ -11,8 +11,10 @@ import de.intevation.lada.data.QueryBuilder; import de.intevation.lada.data.Repository; import de.intevation.lada.model.LMessung; +import de.intevation.lada.model.LMesswert; import de.intevation.lada.model.LProbe; import de.intevation.lada.model.LProbeInfo; +import de.intevation.lada.model.SPflichtMessgroesse; import de.intevation.lada.rest.Response; /** @@ -33,6 +35,14 @@ @Named("lmessungrepository") private Repository messungRepository; + @Inject + @Named("lmesswertrepository") + private Repository messwertRepository; + + @Inject + @Named("readonlyrepository") + private Repository readonlyRepository; + /** * Validate a LMessung object. * @@ -56,12 +66,90 @@ validateHasNebenprobenNr(messung, warnings); validateDatum(messung, warnings); + validateHasMesswert(messung, warnings); + validateMessgroesse(messung, warnings); + validatePflichtmessgroessen(messung, warnings); if (!update) { validateUniqueNebenprobenNr(messung, warnings); } return warnings; } + private void validateHasMesswert( + LMessung messung, + Map warnings) { + QueryBuilder wertBuilder = + new QueryBuilder( + messwertRepository.getEntityManager(), LMesswert.class); + wertBuilder.and("messungsId", messung.getMessungsId()) + .and("probeId", messung.getProbeId()); + Response wertResponse = messwertRepository.filter(wertBuilder.getQuery()); + List messwerte = (List)wertResponse.getData(); + if (messwerte == null || messwerte.isEmpty()) { + warnings.put("messwert", 631); + } + } + + private void validatePflichtmessgroessen( + LMessung messung, + Map warnings) { + QueryBuilder builder = + new QueryBuilder( + readonlyRepository.getEntityManager(), + SPflichtMessgroesse.class); + builder.and("mmtId", messung.getMmtId()); + Response response = readonlyRepository.filter(builder.getQuery()); + List pflicht = + (List)response.getData(); + + QueryBuilder wertBuilder = + new QueryBuilder( + messwertRepository.getEntityManager(), LMesswert.class); + wertBuilder.and("messungsId", messung.getMessungsId()) + .and("probeId", messung.getProbeId()); + Response wertResponse = + messwertRepository.filter(wertBuilder.getQuery()); + List messwerte = (List)wertResponse.getData(); + for (SPflichtMessgroesse p : pflicht) { + boolean hit = false; + for (LMesswert wert : messwerte) { + if (p.getMessgroesseId().equals(wert.getMessgroesseId())) { + hit = true; + } + } + if (!hit) { + warnings.put("pflichtmessgroesse", 631); + } + } + } + + private void validateMessgroesse( + LMessung messung, + Map warnings + ) { + String mmt = messung.getMmtId(); + QueryBuilder builder = + new QueryBuilder( + messwertRepository.getEntityManager(), LMesswert.class); + builder.and("messungsId", messung.getMessungsId()) + .and("probeId", messung.getProbeId()); + Response response = messwertRepository.filter(builder.getQuery()); + List messwerte = (List)response.getData(); + String query = "select messgroesse_id from S_mmt_messgroesse where mmt_id = " + mmt; + List results = readonlyRepository.getEntityManager().createNativeQuery(query).getResultList(); + for(LMesswert messwert: messwerte) { + boolean hit = false; + for (Object[] row: results) { + if (messwert.getMessgroesseId().equals(row[0].toString())) { + hit = true; + } + } + if (!hit) { + warnings.put("messgroesse", 632); + } + } + } + /** * Check if the object has a 'Nebenproben Nr.'. *