changeset 340:02803c0e7bd1

More vaidation for messung objects.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 30 Aug 2013 09:17:03 +0200
parents 17904ad125f3
children 920520121fd8
files src/main/java/de/intevation/lada/validation/LMessungValidator.java
diffstat 1 files changed, 88 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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<String, Integer> warnings) {
+        QueryBuilder<LMesswert> wertBuilder =
+            new QueryBuilder<LMesswert>(
+                messwertRepository.getEntityManager(), LMesswert.class);
+        wertBuilder.and("messungsId", messung.getMessungsId())
+            .and("probeId", messung.getProbeId());
+        Response wertResponse = messwertRepository.filter(wertBuilder.getQuery());
+        List<LMesswert> messwerte = (List<LMesswert>)wertResponse.getData();
+        if (messwerte == null || messwerte.isEmpty()) {
+            warnings.put("messwert", 631);
+        }
+    }
+
+    private void validatePflichtmessgroessen(
+        LMessung messung,
+        Map<String, Integer> warnings) {
+        QueryBuilder<SPflichtMessgroesse> builder =
+            new QueryBuilder<SPflichtMessgroesse>(
+                readonlyRepository.getEntityManager(),
+                SPflichtMessgroesse.class);
+        builder.and("mmtId", messung.getMmtId());
+        Response response = readonlyRepository.filter(builder.getQuery());
+        List<SPflichtMessgroesse> pflicht =
+            (List<SPflichtMessgroesse>)response.getData();
+
+        QueryBuilder<LMesswert> wertBuilder =
+            new QueryBuilder<LMesswert>(
+                messwertRepository.getEntityManager(), LMesswert.class);
+        wertBuilder.and("messungsId", messung.getMessungsId())
+            .and("probeId", messung.getProbeId());
+        Response wertResponse =
+            messwertRepository.filter(wertBuilder.getQuery());
+        List<LMesswert> messwerte = (List<LMesswert>)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<String, Integer> warnings
+    ) {
+        String mmt = messung.getMmtId();
+        QueryBuilder<LMesswert> builder =
+            new QueryBuilder<LMesswert>(
+                messwertRepository.getEntityManager(), LMesswert.class);
+        builder.and("messungsId", messung.getMessungsId())
+            .and("probeId", messung.getProbeId());
+        Response response = messwertRepository.filter(builder.getQuery());
+        List<LMesswert> messwerte = (List<LMesswert>)response.getData();
+        String query = "select messgroesse_id from S_mmt_messgroesse where mmt_id = " + mmt;
+        List<Object[]> 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.'.
      *
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)