changeset 337:cb47c33b119d

Imporved error/warning handling and fixed some bugs in the importer module.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 28 Aug 2013 15:11:50 +0200 (2013-08-28)
parents 53417b61391c
children b6f770956cae
files src/main/java/de/intevation/lada/data/importer/AttributeMapper.java src/main/java/de/intevation/lada/data/importer/LAFImporter.java src/main/java/de/intevation/lada/data/importer/LAFParser.java src/main/java/de/intevation/lada/data/importer/LAFProducer.java src/main/java/de/intevation/lada/data/importer/Producer.java src/main/java/de/intevation/lada/rest/LAFImportService.java
diffstat 6 files changed, 336 insertions(+), 410 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/intevation/lada/data/importer/AttributeMapper.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/data/importer/AttributeMapper.java	Wed Aug 28 15:11:50 2013 +0200
@@ -17,6 +17,7 @@
 import javax.inject.Named;
 import javax.persistence.EntityManager;
 
+import de.intevation.lada.data.QueryBuilder;
 import de.intevation.lada.data.Repository;
 import de.intevation.lada.model.LKommentarM;
 import de.intevation.lada.model.LKommentarP;
@@ -26,8 +27,14 @@
 import de.intevation.lada.model.LOrt;
 import de.intevation.lada.model.LProbe;
 import de.intevation.lada.model.LProbeInfo;
+import de.intevation.lada.model.LZusatzWert;
+import de.intevation.lada.model.Ort;
+import de.intevation.lada.model.SDatenbasis;
 import de.intevation.lada.model.SMessEinheit;
 import de.intevation.lada.model.SMessgroesse;
+import de.intevation.lada.model.SProbenZusatz;
+import de.intevation.lada.model.SProbenart;
+import de.intevation.lada.model.SUmwelt;
 import de.intevation.lada.rest.Response;
 
 @Stateless
@@ -41,6 +48,10 @@
     private Repository probeRepo;
 
     @Inject
+    @Named("ortrepository")
+    private Repository ortRepo;
+
+    @Inject
     @Named("readonlyrepository")
     private Repository sRepository;
 
@@ -53,79 +64,125 @@
     }
     public LProbe addAttribute(String key, Object value, LProbe probe) {
         DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm");
-        if ("datenbasis_s".equals(key)) {
+        if ("datenbasis_s".equals(key) && probe.getDatenbasisId() == null) {
             Integer v = Integer.valueOf(value.toString());
             probe.setDatenbasisId(v);
         }
-        else if ("probe_id".equals(key)) {
-            if (probeRepo.findById(LProbeInfo.class, value.toString()) != null) {
-                errors.add(new ReportData("probe_id", value.toString(), 662));
+        else if ("datenbasis_s".equals(key) && probe.getDatenbasisId() != null){
+            this.warnings.add(new ReportData(key, value.toString(), 672));
+        }
+
+        if ("datenbasis".equals(key) && probe.getDatenbasisId() == null) {
+            QueryBuilder<SDatenbasis> builder =
+                new QueryBuilder<SDatenbasis>(
+                    this.sRepository.getEntityManager(), SDatenbasis.class);
+            builder.and("datenbasis", value.toString());
+            Response response = sRepository.filter(builder.getQuery());
+            List<SDatenbasis> datenbasis = (List<SDatenbasis>)response.getData();
+            Integer v = Integer.valueOf(datenbasis.get(0).getDatenbasisId());
+            probe.setDatenbasisId(v);
+        }
+        else if ("datenbasis".equals(key) && probe.getDatenbasisId() != null){
+            this.warnings.add(new ReportData(key, value.toString(), 672));
+        }
+
+        if ("probe_id".equals(key)) {
+            Response response =
+                probeRepo.findById(LProbeInfo.class, value.toString());
+            List<LProbeInfo> info = (List<LProbeInfo>)response.getData();
+            if (info != null && info.size() > 0) {
+                errors.add(new ReportData("probe_id", value.toString(), 671));
                 return null;
             }
             probe.setProbeId(value.toString());
         }
-        else if ("hauptprobennummer".equals(key)) {
+
+        if ("hauptprobennummer".equals(key)) {
             probe.setHauptprobenNr(value.toString());
         }
-        else if ("mpr_id".equals(key)) {
+
+        if ("mpr_id".equals(key)) {
             Integer v = Integer.valueOf(value.toString());
             probe.setMprId(v);
         }
-        else if ("netzkennung".equals(key)) {
+
+        if ("netzkennung".equals(key)) {
             probe.setNetzbetreiberId(value.toString());
         }
-        else if ("messprogramm_land".equals(key)) {
-            probe.setMplId(value.toString());
-        }
-        else if ("messstelle".equals(key)) {
+
+        if ("messstelle".equals(key)) {
             probe.setMstId(value.toString());
         }
-        else if ("betriebsart".equals(key)) {
+
+        if ("messprogramm_s".equals(key) && probe.getBaId() == null) {
             probe.setBaId(value.toString());
         }
-        else if ("soll_datum_uhrzeit_a".equals(key)) {
+        else if ("messprogramm_s".equals(key) && probe.getBaId() != null){
+            this.warnings.add(new ReportData(key, value.toString(), 672));
+        }
+
+        if ("soll_datum_uhrzeit_a".equals(key)) {
             try {
                 Date d = format.parse(value.toString());
                 probe.setSolldatumBeginn(d);
             }
             catch (ParseException e) {
-                //TODO handle warning.
+                this.warnings.add(new ReportData(key, value.toString(), 674));
             }
         }
-        else if ("soll_datum_uhrzeit_e".equals(key)) {
+        if ("soll_datum_uhrzeit_e".equals(key)) {
             try {
                 Date d = format.parse(value.toString());
                 probe.setSolldatumEnde(d);
             }
             catch (ParseException e) {
-                //TODO handle warning.
+                this.warnings.add(new ReportData(key, value.toString(), 674));
             }
         }
-        else if ("probenahme_datum_uhrzeit_a".equals(key)) {
+        if ("probenahme_datum_uhrzeit_a".equals(key)) {
             try {
                 Date d = format.parse(value.toString());
                 probe.setProbeentnahmeBeginn(d);
             }
             catch (ParseException e) {
-                //TODO handle warning.
+                this.warnings.add(new ReportData(key, value.toString(), 674));
             }
         }
-        else if ("probenahme_datum_uhrzeit_e".equals(key)) {
+        if ("probenahme_datum_uhrzeit_e".equals(key)) {
             try {
                 Date d = format.parse(value.toString());
                 probe.setProbeentnahmeEnde(d);
             }
             catch (ParseException e) {
-                //TODO handle warning.
+                this.warnings.add(new ReportData(key, value.toString(), 674));
             }
         }
-        else if ("umweltbereich_s".equals(key)) {
+
+        if ("umweltbereich_s".equals(key) && probe.getUmwId() == null) {
             probe.setUmwId(value.toString());
         }
-        else if ("deskriptoren".equals(key)) {
+        else if ("umweltbereich_s".equals(key) && probe.getUmwId() != null){
+            this.warnings.add(new ReportData(key, value.toString(), 672));
+        }
+        if ("umweltbereich_c".equals(key) && probe.getUmwId() == null) {
+            QueryBuilder<SUmwelt> builder =
+                new QueryBuilder<SUmwelt>(
+                    sRepository.getEntityManager(), SUmwelt.class);
+            int length = value.toString().length() > 80 ? 80 : value.toString().length();
+            builder.and("umweltBereich", value.toString().substring(0, length));
+            Response response = sRepository.filter(builder.getQuery());
+            List<SUmwelt> umw = (List<SUmwelt>)response.getData();
+            probe.setUmwId(umw.get(0).getUmwId());
+        }
+        else if ("umweltbereich_c".equals(key) && probe.getUmwId() != null){
+            this.warnings.add(new ReportData(key, value.toString(), 672));
+        }
+
+        if ("deskriptoren".equals(key)) {
             probe.setMediaDesk(value.toString());
         }
-        else if ("testdaten".equals(key)) {
+
+        if ("testdaten".equals(key)) {
             if (!value.toString().equals("0")) {
                 probe.setTest(true);
             }
@@ -133,8 +190,20 @@
                 probe.setTest(false);
             }
         }
-        
-        probe.setProbenartId(1);
+
+        if ("medium".equals(key)) {
+            probe.setMedia(value.toString());
+        }
+
+        if ("probenart".equals(key)) {
+            QueryBuilder<SProbenart> builder =
+                new QueryBuilder<SProbenart>(
+                    sRepository.getEntityManager(), SProbenart.class);
+            builder.and("probenart", value.toString());
+            Response response = sRepository.filter(builder.getQuery());
+            List<SProbenart> art = (List<SProbenart>)response.getData();
+            probe.setProbenartId(Integer.valueOf(art.get(0).getProbenartId()));
+        }
         return probe;
     }
 
@@ -153,7 +222,7 @@
             kommentar.setKDatum(d);
         }
         catch (ParseException e) {
-            //TODO: handle warning.
+            this.warnings.add(new ReportData(key, values.toString(), 674));
         }
         String text = v.substring(23, v.length() -1);
         kommentar.setErzeuger(erzeuger);
@@ -176,7 +245,7 @@
             kommentar.setKDatum(d);
         }
         catch (ParseException e) {
-            //TODO: handle warning.
+            this.warnings.add(new ReportData(key, values.toString(), 674));
         }
         String text = v.substring(23, v.length() -1);
         kommentar.setErzeuger(erzeuger);
@@ -206,7 +275,7 @@
                 messung.setMesszeitpunkt(d);
             }
             catch (ParseException e) {
-                //TODO: handle warnings.
+                this.warnings.add(new ReportData(key, values.toString(), 674));
             }
         }
         else if ("messzeit_sekunden".equals(key)) {
@@ -264,8 +333,8 @@
                 }
             }
             if (!foundEinheit) {
+                this.errors.add(new ReportData("messeinheit", "null", 673));
                 return null;
-                //TODO: handle warning!
             }
             Response responseGroesse = sRepository.findAll(SMessgroesse.class);
             List<SMessgroesse> messgroessen = 
@@ -279,8 +348,8 @@
                 }
             }
             if (!foundGroesse) {
+                this.errors.add(new ReportData("messgroesse", "null", 673));
                 return null;
-                //TODO: handle warning!
             }
         }
         //TODO: Match the other values.
@@ -296,12 +365,77 @@
             Integer v = Integer.valueOf(values.toString());
             ort.setOrtId(v);
         }
-        else if ("ort_typ".equals(key)) {
+        if ("ort_code".equals(key)) {
+            QueryBuilder<Ort> builder =
+                new QueryBuilder<Ort>(ortRepo.getEntityManager(), Ort.class);
+            builder.and("bezeichnung", values.toString());
+            Response response = ortRepo.filter(builder.getQuery());
+            List<Ort> orte = (List<Ort>)response.getData();
+            Integer v = Integer.valueOf(orte.get(0).getOrtId());
+            ort.setOrtId(v);
+        }
+        if ("ort_typ".equals(key)) {
             ort.setOrtsTyp(values.toString());
         }
+        if ("ort_zusatz".equals(key)) {
+            ort.setOrtszusatztext(values.toString());
+        }
         return ort;
     }
 
+    public LZusatzWert addAttribute(
+        String lKey,
+        Object values,
+        LZusatzWert wert
+    ) {
+        String v = values.toString().substring(1);
+        int ndx = v.indexOf("\"");
+        String groesse = v.substring(0, ndx);
+        v = v.substring(ndx + 2);
+        ndx = v.indexOf(" ");
+        String w = v.substring(0, ndx);
+        v = v.substring(ndx + 2);
+        ndx = v.indexOf("\"");
+        String einheit = v.substring(0, ndx);
+        String fehler = v.substring(ndx + 2);
+        QueryBuilder<SProbenZusatz> builder =
+            new QueryBuilder<SProbenZusatz>(
+                sRepository.getEntityManager(), SProbenZusatz.class);
+        builder.and("zusatzwert", groesse);
+        Response response = sRepository.filter(builder.getQuery());
+        List<SProbenZusatz> list = (List<SProbenZusatz>)response.getData();
+        if (list == null || list.isEmpty()) {
+            this.errors.add(new ReportData(lKey, "zusatzwert", 673));
+            return null;
+        }
+        wert.getId().setPzsId(list.get(0).getPzsId());
+        wert.setPzsId(list.get(0).getPzsId());
+        wert.setMesswertPzs(Float.valueOf(w));
+        wert.setMessfehler(Float.valueOf(fehler));
+        return wert;
+    }
+
+    public LZusatzWert addAttributeS(
+        String lKey,
+        Object values,
+        LZusatzWert wert
+    ) {
+        String v = values.toString().substring(1);
+        int ndx = v.indexOf("\"");
+        String groesse = v.substring(0, ndx);
+        v = v.substring(ndx + 2);
+        ndx = v.indexOf(" ");
+        String w = v.substring(0, ndx);
+        v = v.substring(ndx + 2);
+        ndx = v.indexOf(" ");
+        String einheit = v.substring(0, ndx);
+        String fehler = v.substring(ndx + 2);
+        wert.getId().setPzsId(groesse);
+        wert.setPzsId(groesse);
+        wert.setMesswertPzs(Float.valueOf(w));
+        wert.setMessfehler(Float.valueOf(fehler));
+        return wert;
+    }
     /**
      * @return the warnings
      */
@@ -317,7 +451,7 @@
     }
 
     public void reset() {
-        errors.clear();
-        warnings.clear();
+        errors = new ArrayList<ReportData>();
+        warnings = new ArrayList<ReportData>();
     }
 }
--- a/src/main/java/de/intevation/lada/data/importer/LAFImporter.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/data/importer/LAFImporter.java	Wed Aug 28 15:11:50 2013 +0200
@@ -16,6 +16,7 @@
 import javax.persistence.Query;
 
 import de.intevation.lada.auth.AuthenticationResponse;
+import de.intevation.lada.data.QueryBuilder;
 import de.intevation.lada.data.Repository;
 import de.intevation.lada.model.LKommentarM;
 import de.intevation.lada.model.LKommentarP;
@@ -23,6 +24,7 @@
 import de.intevation.lada.model.LMesswert;
 import de.intevation.lada.model.LOrt;
 import de.intevation.lada.model.LProbe;
+import de.intevation.lada.model.LProbeInfo;
 import de.intevation.lada.rest.Response;
 import de.intevation.lada.validation.ValidationException;
 import de.intevation.lada.validation.Validator;
@@ -99,301 +101,24 @@
         this.errors.clear();
         this.parser.reset();
         try {
-            boolean success = parser.parse(content);
-            if (success) {
-                List<LProbe> proben = parser.getProben();
-                List<LMessung> messungen = parser.getMessungen();
-                List<LOrt> orte = parser.getOrte();
-                List<LKommentarP> pKommentare = parser.getProbeKommentare();
-                List<LKommentarM> mKommentare = parser.getMessungKommentare();
-                List<LMesswert> messwerte = parser.getMesswerte();
-                writeProben(auth, proben);
-                writeMessungen(auth, messungen);
-                //writeOrte(auth, orte);
-                writePKommentare(auth, pKommentare);
-                writeMKommentare(auth, mKommentare);
-                writeMesswerte(auth, messwerte);
-            }
-            else {
+            boolean success = parser.parse(auth, content);
+            if (!success) {
                 List<ReportData> report = new ArrayList<ReportData>();
-                report.add( new ReportData("parser", "no success", 660));
+                report.add(new ReportData("parser", "no success", 660));
                 errors.put("parser", report);
+                warnings.put("parser", new ArrayList<ReportData>());
                 return false;
             }
         }
         catch (LAFParserException e) {
             List<ReportData> report = new ArrayList<ReportData>();
-            report.add(new ReportData("parser", e.getMessage(), 660));
+            report.add(new ReportData("parser", e.getMessage(), 670));
             errors.put("parser", report);
+            warnings.put("parser", new ArrayList<ReportData>());
             return false;
         }
-        Map<String, Map<String, List<ReportData>>> data =
-            new HashMap<String, Map<String, List<ReportData>>>();
         this.warnings.putAll(this.parser.getWarnings());
         this.errors.putAll(this.parser.getErrors());
-        data.put("warnings", warnings);
-        data.put("errors", errors);
         return true;
     }
-
-    private void writeMessungen(
-        AuthenticationResponse auth,
-        List<LMessung> messungen
-    ) {
-        for(LMessung messung: messungen) {
-            try {
-
-                Map<String, Integer> warn =
-                    messungValidator.validate(messung, false);
-                messungRepository.create(messung);
-                if (warn != null) {
-                    for (String key : warn.keySet()) {
-                       // warnings.put(messung.getProbeId(),
-                       // new ReportData(key, "", warn.get(key)));
-                    }
-                }
-            }
-            catch (ValidationException e) {
-                //errors.put(messung.getProbeId(), e.getErrors());
-                //warnings.put(
-                //    messung.getProbeId(),
-                //    e.getWarnings());
-            }
-        }
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void writeMesswerte(
-        AuthenticationResponse auth,
-        List<LMesswert> messwerte
-    ) {
-        for(LMesswert messwert: messwerte) {
-            try {
-                Map<String, Integer> warn =
-                    messwertValidator.validate(messwert, false);
-                Response r = messwertRepository.create(messwert);
-                if (warn != null) {
-                //    warnings.put(
-                //        messwert.getProbeId(),
-                //        warn);
-                }
-            }
-            catch (ValidationException e) {
-                //errors.put(messwert.getProbeId(), e.getErrors());
-                //warnings.put(
-                //    messwert.getProbeId(),
-                //    e.getWarnings());
-            }
-        }
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void writePKommentare(
-        AuthenticationResponse auth,
-        List<LKommentarP> kommentare
-    ) {
-        for(LKommentarP kommentar: kommentare) {
-            try {
-                pKommentarRepository.create(kommentar);
-            }
-            catch(Exception e) {
-                Map<String, Integer> err = new HashMap<String, Integer>();
-                err.put(
-                    kommentar.getProbeId() + " - " +
-                    kommentar.getkId(), 661);
-                //errors.put("lkommentarp", err);
-            }
-        }
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void writeMKommentare(
-        AuthenticationResponse auth,
-        List<LKommentarM> kommentare
-    ) {
-        for(LKommentarM kommentar: kommentare) {
-            Query q =
-            em.createNativeQuery(
-                "select nextval('kommentar_m_id_seq')");
-            BigInteger seqId = (BigInteger)q.getSingleResult();
-            kommentar.getId().setKId(seqId.intValue());
-            mKommentarRepository.create(kommentar);
-        }
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void writeOrte(
-        AuthenticationResponse auth,
-        List<LOrt> orte
-    ) {
-        for(LOrt ort: orte) {
-            try {
-                Map<String, Integer> warn =
-                    ortValidator.validate(ort, false);
-                ortRepository.create(ort);
-                if (warn != null) {
-                  //  warnings.put(String.valueOf(ort.getOrtId()), warn);
-                }
-            }
-            catch (ValidationException e) {
-                //errors.put(String.valueOf(ort.getOrtId()), e.getErrors());
-                //warnings.put(
-                //    String.valueOf(ort.getOrtId()),
-                //    e.getWarnings());
-            }
-        }
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void writeProben(AuthenticationResponse auth, List<LProbe> proben) {
-        for (LProbe probe: proben) {
-            if (!authorized(probe, auth)) {
-                Map<String, Integer> err = new HashMap<String, Integer>();
-                err.put("not authorized", 699);
-                //errors.put(probe.getProbeId(), err);
-                continue;
-            }
-            try {
-                Map<String, Integer> warn =
-                    probeValidator.validate(probe, false);
-                if (warn != null) {
-                  //  warnings.put(probe.getProbeId(), warn);
-                }
-            }
-            catch (ValidationException e) {
-                //errors.put(probe.getProbeId(), e.getErrors());
-                //warnings.put(probe.getProbeId(), e.getWarnings());
-                continue;
-            }
-            persist(probe);
-        }
-    }
-
-    private boolean authorized(LProbe probe, AuthenticationResponse auth) {
-        if (auth.getNetzbetreiber().contains(probe.getNetzbetreiberId()) &&
-            auth.getMst().contains(probe.getMstId())) {
-            return true;
-        }
-        return false;
-    }
-
-    @TransactionAttribute(TransactionAttributeType.REQUIRED)
-    private void persist(LProbe probe) {
-        String queryColumns = "insert into l_probe (probe_id, ba_id, test," +
-            " datenbasis_id, netzbetreiber_id, mst_id, probenart_id, umw_id";
-        String queryParameter = " values (:probe_id, :ba_id, :test," +
-            " :datenbasis_id, :netzbetreiber_id, :mst_id, :probenart_id," +
-            " :umw_id";
-        if (probe.getErzeugerId() != null) {
-            queryColumns += ", erzeuger_id";
-            queryParameter += ", :erzeuger_id";
-        }
-        if (probe.getHauptprobenNr() != null) {
-            queryColumns += ", hauptproben_nr";
-            queryParameter += ", :hauptproben_nr";
-        }
-        if (probe.getLetzteAenderung() != null) {
-            queryColumns += ", letzte_aenderung";
-            queryParameter += ", :letzte_aenderung";
-        }
-        if (probe.getMedia() != null) {
-            queryColumns += ", media";
-            queryParameter += ", :media";
-        }
-        if (probe.getMediaDesk() != null) {
-            queryColumns += ", media_desk";
-            queryParameter += ", :media_desk";
-        }
-        if (probe.getMittelungsdauer() != null) {
-            queryColumns += ", mittelungsdauer";
-            queryParameter += ", :mittelungsdauer";
-        }
-        if (probe.getMpKat() != null) {
-            queryColumns += ", mp_kat";
-            queryParameter += ", mp_kat";
-        }
-        if (probe.getMplId() != null) {
-            queryColumns += ", mpl_id";
-            queryParameter += ", :mpl_id";
-        }
-        if (probe.getMprId() != null) {
-            queryColumns += ", mpr_id";
-            queryParameter += ", :mpr_id";
-        }
-        if (probe.getProbeNehmerId() != null) {
-            queryColumns += ", probe_nehmer_id";
-            queryParameter += ", :probe_nehmer_id";
-        }
-        if (probe.getProbeentnahmeBeginn() != null) {
-            queryColumns += ", probeentnahme_beginn";
-            queryParameter += ", :probeentnahme_beginn";
-        }
-        if (probe.getProbeentnahmeEnde() != null) {
-            queryColumns += ", probeentnahme_ende";
-            queryParameter += ", :probeentnahme_ende";
-        }
-        if (probe.getSolldatumBeginn() != null) {
-            queryColumns += ", solldatum_beginn";
-            queryParameter += ", :solldatum_beginn";
-        }
-        if (probe.getSolldatumEnde() != null) {
-            queryColumns += ", solldatum_ende";
-            queryParameter += ", :solldatum_ende";
-        }
-        queryColumns += ") " + queryParameter + ")";
-        
-        Query insert = em.createNativeQuery(queryColumns);
-        insert.setParameter("probe_id", probe.getProbeId());
-        insert.setParameter("ba_id", probe.getBaId());
-        insert.setParameter("datenbasis_id", probe.getDatenbasisId());
-        insert.setParameter("mst_id", probe.getMstId());
-        insert.setParameter("netzbetreiber_id", probe.getNetzbetreiberId());
-        insert.setParameter("probenart_id", probe.getProbenartId());
-        insert.setParameter("test", probe.isTest());
-        insert.setParameter("umw_id", probe.getUmwId());
-        if (probe.getErzeugerId() != null) {
-            insert.setParameter("erzeuger_id", probe.getErzeugerId());
-        }
-        if (probe.getHauptprobenNr() != null) {
-            insert.setParameter("hauptproben_nr", probe.getHauptprobenNr());
-        }
-        if (probe.getLetzteAenderung() != null) {
-            insert.setParameter("letzte_aenderung", probe.getLetzteAenderung());
-        }
-        if (probe.getMedia() != null) {
-            insert.setParameter("media", probe.getMedia());
-        }
-        if (probe.getMediaDesk() != null) {
-            insert.setParameter("media_desk", probe.getMediaDesk());
-        }
-        if (probe.getMittelungsdauer() != null) {
-            insert.setParameter("mittelungsdauer", probe.getMittelungsdauer());
-        }
-        if (probe.getMpKat() != null) {
-            insert.setParameter("mp_kat", probe.getMpKat());
-        }
-        if (probe.getMplId() != null) {
-            insert.setParameter("mpl_id", probe.getMplId());
-        }
-        if (probe.getMprId() != null) {
-            insert.setParameter("mpr_id", probe.getMprId());
-        }
-        if (probe.getProbeNehmerId() != null) {
-            insert.setParameter("probe_nehmer_id", probe.getProbeNehmerId());
-        }
-        if (probe.getProbeentnahmeBeginn() != null) {
-            insert.setParameter("probeentnahme_beginn", probe.getProbeentnahmeBeginn());
-        }
-        if (probe.getProbeentnahmeEnde() != null) {
-            insert.setParameter("probeentnahme_ende", probe.getProbeentnahmeEnde());
-        }
-        if (probe.getSolldatumBeginn() != null) {
-            insert.setParameter("solldatum_beginn", probe.getSolldatumBeginn());
-        }
-        if (probe.getSolldatumEnde() != null) {
-            insert.setParameter("solldatum_ende", probe.getSolldatumEnde());
-        }
-        int res = insert.executeUpdate();
-        int i = res;
-    }
 }
--- a/src/main/java/de/intevation/lada/data/importer/LAFParser.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/data/importer/LAFParser.java	Wed Aug 28 15:11:50 2013 +0200
@@ -2,20 +2,13 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import de.intevation.lada.model.LKommentarM;
-import de.intevation.lada.model.LKommentarP;
-import de.intevation.lada.model.LMessung;
-import de.intevation.lada.model.LMesswert;
-import de.intevation.lada.model.LOrt;
-import de.intevation.lada.model.LProbe;
-import de.intevation.lada.model.LProbe;
+import de.intevation.lada.auth.AuthenticationResponse;
 
 
 public class LAFParser {
@@ -28,12 +21,9 @@
     @Named("lafproducer")
     private Producer producer;
 
-    List<LProbe> proben;
-    List<LMessung> messungen;
-    List<LOrt> orte;
-    List<LMesswert> messwerte;
-    List<LKommentarP> probeKommentare;
-    List<LKommentarM> messungKommentare;
+    @Inject
+    @Named("lafwriter")
+    private Writer writer;
 
     private Map<String, List<ReportData>> warnings;
     private Map<String, List<ReportData>> errors;
@@ -42,25 +32,11 @@
         this.warnings = new HashMap<String, List<ReportData>>();
         this.errors = new HashMap<String, List<ReportData>>();
         this.setDryRun(false);
-        //this.producer = new LAFProducer();
-        this.proben = new ArrayList<LProbe>();
-        this.messungen = new ArrayList<LMessung>();
-        this.orte = new ArrayList<LOrt>();
-        this.messwerte = new ArrayList<LMesswert>();
-        this.probeKommentare = new ArrayList<LKommentarP>();
-        this.messungKommentare = new ArrayList<LKommentarM>();
     }
 
-    public boolean parse(String laf)
+    public boolean parse(AuthenticationResponse auth, String laf)
     throws LAFParserException
     {
-        this.proben.clear();
-        this.messungen.clear();
-        this.orte.clear();
-        this.messwerte.clear();
-        this.probeKommentare.clear();
-        this.messungKommentare.clear();
-
         if (!laf.startsWith("%PROBE%\n")) {
             throw new LAFParserException("No %PROBE% at the begining.");
         }
@@ -74,9 +50,23 @@
                 laf = laf.substring(nextPos + 1);
                 try {
                     readAll(single);
+                    this.warnings.putAll(producer.getWarnings());
+                    this.errors.putAll(producer.getErrors());
+                    writeAll(auth);
+                    this.producer.reset();
                 }
                 catch (LAFParserException lpe) {
-                    this.errors.putAll(producer.getErrors());
+                    Map<String, List<ReportData>> pErr = producer.getErrors();
+                    if (pErr.isEmpty()) {
+                        List<ReportData> err = new ArrayList<ReportData>();
+                        err.add(new ReportData("parser", lpe.getMessage(), 673));
+                        this.errors.put("parser", err);
+                        this.warnings.put("parser", new ArrayList<ReportData>());
+                    }
+                    else {
+                        this.errors.putAll(pErr);
+                        this.warnings.putAll(producer.getWarnings());
+                    }
                     this.producer.reset();
                     continue;
                 }
@@ -84,27 +74,65 @@
             else {
                 try {
                     readAll(laf);
+                    this.warnings.putAll(producer.getWarnings());
+                    this.errors.putAll(producer.getErrors());
+                    writeAll(auth);
+                    this.producer.reset();
                     laf = "";
                 }
                 catch (LAFParserException lpe) {
-                    this.errors.putAll(producer.getErrors());
+                    Map<String, List<ReportData>> pErr = producer.getErrors();
+                    if (pErr.isEmpty()) {
+                        List<ReportData> err = new ArrayList<ReportData>();
+                        err.add(new ReportData("parser", lpe.getMessage(), 673));
+                        this.errors.put("parser", err);
+                        this.warnings.put("parser", new ArrayList<ReportData>());
+                    }
+                    else {
+                        this.errors.putAll(pErr);
+                        this.warnings.putAll(producer.getWarnings());
+                    }
+                    this.producer.reset();
                     laf = "";
                     continue;
                 }
             }
-            if (!this.dryRun) {
-                proben.add(producer.getProbe());
-                messungen.addAll(producer.getMessungen());
-                orte.addAll(producer.getOrte());
-                messwerte.addAll(producer.getMesswerte());
-                probeKommentare.addAll(producer.getProbenKommentare());
-                messungKommentare.addAll(producer.getMessungsKommentare());
-                producer.reset();
-            }
         }
         return parsed;
     }
 
+    private void writeAll(AuthenticationResponse auth) {
+        String probeId = producer.getProbe().getProbeId();
+        boolean p = writer.writeProbe(auth, producer.getProbe());
+        if (!p) {
+            this.errors.put(probeId, writer.getErrors());
+            this.warnings.put(probeId, writer.getWarnings());
+            return;
+        }
+        writer.writeProbenKommentare(auth, producer.getProbenKommentare());
+        boolean m = writer.writeMessungen(auth, producer.getMessungen());
+        if (!m) {
+            return;
+        }
+        writer.writeOrte(auth, producer.getOrte());
+        writer.writeMessungKommentare(auth, producer.getMessungsKommentare());
+        writer.writeMesswerte(auth, producer.getMesswerte());
+        List<ReportData> err = this.errors.get(probeId);
+        if (err == null) {
+            this.errors.put(probeId, writer.getErrors());
+        }
+        else {
+            err.addAll(writer.getErrors());
+        }
+        List<ReportData> warn = this.warnings.get(probeId);
+        if (warn == null) {
+            this.warnings.put(probeId, writer.getWarnings());
+        }
+        else {
+            warn.addAll(writer.getWarnings());
+        }
+    }
+
     private void readAll(String content)
     throws LAFParserException
     {
@@ -140,7 +168,10 @@
                 white = true;
                 continue;
             }
-            else if (current != ' ' && white) {
+            else if (current != ' ' &&
+                current != '\n' &&
+                current != '\r' &&
+                white) {
                 value = true;
                 white = false;
             }
@@ -188,7 +219,7 @@
                 valueString = "";
                 continue;
             }
-            else if ((current == '\n' || current == '\r') && key) {
+            if ((current == '\n' || current == '\r') && (key || white)) {
                 throw new LAFParserException("No value for key: " + keyString);
             }
 
@@ -217,48 +248,6 @@
     }
 
     /**
-     * @return the proben
-     */
-    public List<LProbe> getProben() {
-        return proben;
-    }
-
-    /**
-     * @return the messungen
-     */
-    public List<LMessung> getMessungen() {
-        return messungen;
-    }
-
-    /**
-     * @return the orte
-     */
-    public List<LOrt> getOrte() {
-        return orte;
-    }
-
-    /**
-     * @return the messwerte
-     */
-    public List<LMesswert> getMesswerte() {
-        return messwerte;
-    }
-
-    /**
-     * @return the probeKommentare
-     */
-    public List<LKommentarP> getProbeKommentare() {
-        return probeKommentare;
-    }
-
-    /**
-     * @return the messungKommentare
-     */
-    public List<LKommentarM> getMessungKommentare() {
-        return messungKommentare;
-    }
-
-    /**
      * @return the warnings
      */
     public Map<String, List<ReportData>> getWarnings() {
--- a/src/main/java/de/intevation/lada/data/importer/LAFProducer.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/data/importer/LAFProducer.java	Wed Aug 28 15:11:50 2013 +0200
@@ -9,6 +9,8 @@
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import de.intevation.lada.data.QueryBuilder;
+import de.intevation.lada.data.Repository;
 import de.intevation.lada.model.LKommentarM;
 import de.intevation.lada.model.LKommentarMId;
 import de.intevation.lada.model.LKommentarP;
@@ -19,12 +21,19 @@
 import de.intevation.lada.model.LOrt;
 import de.intevation.lada.model.LProbe;
 import de.intevation.lada.model.LProbe;
+import de.intevation.lada.model.LZusatzWert;
+import de.intevation.lada.model.LZusatzWertId;
+import de.intevation.lada.model.SProbenZusatz;
 
 @Named("lafproducer")
 public class LAFProducer
 implements Producer
 {
 
+    @Inject
+    @Named("readonlyrepository")
+    private Repository sRepository;
+
     private LProbe probe;
     private LMessung messung;
     private LOrt ort;
@@ -34,6 +43,7 @@
     private List<LMessung> messungen;
     private List<LOrt> orte;
     private List<LMesswert> messwerte;
+    private List<LZusatzWert> zusatzwerte;
 
     private List<EntryFormat> probenFormat;
     private List<EntryFormat> messungFormat;
@@ -84,10 +94,42 @@
                 mapper.addAttribute(lKey, values, kommentar));
         }
         else if (lKey.equals("probenzusatzbeschreibung")) {
-            //TODO: implement this!
+            LZusatzWertId zusatzId = new LZusatzWertId();
+            zusatzId.setProbeId(this.probe.getProbeId());
+            LZusatzWert wert = new LZusatzWert();
+            wert.setId(zusatzId);
+            LZusatzWert zusatzWert = mapper.addAttribute(lKey, values, wert);
+            if (zusatzWert != null) {
+                this.zusatzwerte.add(zusatzWert);
+            }
+            else {
+                List<ReportData> err = this.errors.get(probe.getProbeId());
+                if (err == null) {
+                    this.errors.put(probe.getProbeId(), mapper.getErrors());
+                }
+                else {
+                    err.addAll(mapper.getErrors());
+                }
+            }
         }
         else if (lKey.equals("pzb_s")) {
-            //TODO: implement this!
+            LZusatzWertId zusatzId = new LZusatzWertId();
+            zusatzId.setProbeId(this.probe.getProbeId());
+            LZusatzWert wert = new LZusatzWert();
+            wert.setId(zusatzId);
+            LZusatzWert zusatzWert = mapper.addAttributeS(lKey, values, wert);
+            if (zusatzWert != null) {
+                this.zusatzwerte.add(zusatzWert);
+            }
+            else {
+                List<ReportData> err = this.errors.get(probe.getProbeId());
+                if (err == null) {
+                    this.errors.put(probe.getProbeId(), mapper.getErrors());
+                }
+                else {
+                    err.addAll(mapper.getErrors());
+                }
+            }
         }
         else if (lKey.equals("messwert")) {
             LMesswertId id = new LMesswertId();
@@ -101,6 +143,15 @@
             if (wert != null) {
                 this.messwerte.add(wert);
             }
+            else {
+                List<ReportData> err = this.errors.get(probe.getProbeId());
+                if (err == null) {
+                    this.errors.put(probe.getProbeId(), mapper.getErrors());
+                }
+                else {
+                    err.addAll(mapper.getErrors());
+                }
+            }
         }
         else if (isValidMessung(lKey, values.toString())) {
             this.messung = mapper.addAttribute(lKey, values, this.messung);
@@ -181,17 +232,22 @@
     }
 
     @Override
+    public List<LZusatzWert> getZusatzwerte() {
+        return this.zusatzwerte;
+    }
+
+    @Override
     public void reset() {
-        this.errors.clear();
-        this.warnings.clear();
+        this.errors = new HashMap<String, List<ReportData>>();
+        this.warnings = new HashMap<String, List<ReportData>>();
         this.probe = new LProbe();
-        this.messungen.clear();
+        this.messungen = new ArrayList<LMessung>();
         this.messung = null;
-        this.orte.clear();
+        this.orte = new ArrayList<LOrt>();
         this.ort = null;
-        this.messwerte.clear();
-        this.mKommentare.clear();
-        this.pKommentare.clear();
+        this.messwerte = new ArrayList<LMesswert>();
+        this.mKommentare = new ArrayList<LKommentarM>();
+        this.pKommentare = new ArrayList<LKommentarP>();
         mapper.reset();
     }
 
@@ -218,6 +274,16 @@
      * @return the warnings
      */
     public Map<String, List<ReportData>> getWarnings() {
+        if (this.probe == null) {
+            return this.warnings;
+        }
+        List<ReportData> warn = this.warnings.get(probe.getProbeId());
+        if (warn == null) {
+            this.warnings.put(probe.getProbeId(), mapper.getWarnings());
+        }
+        else {
+            warn.addAll(mapper.getWarnings());
+        }
         return this.warnings;
     }
 
@@ -225,6 +291,16 @@
      * @return the errors
      */
     public Map<String, List<ReportData>> getErrors() {
+        if (this.probe == null) {
+            return this.errors;
+        }
+        List<ReportData> err = this.errors.get(this.probe.getProbeId());
+        if (err == null) {
+            this.errors.put(probe.getProbeId(), mapper.getErrors());
+        }
+        else {
+            err.addAll(mapper.getErrors());
+        }
         return this.errors;
     }
 }
--- a/src/main/java/de/intevation/lada/data/importer/Producer.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/data/importer/Producer.java	Wed Aug 28 15:11:50 2013 +0200
@@ -9,6 +9,7 @@
 import de.intevation.lada.model.LMesswert;
 import de.intevation.lada.model.LOrt;
 import de.intevation.lada.model.LProbe;
+import de.intevation.lada.model.LZusatzWert;
 
 
 public interface Producer
@@ -21,6 +22,7 @@
     public List<LKommentarP> getProbenKommentare();
     public List<LKommentarM> getMessungsKommentare();
     public List<LMesswert> getMesswerte();
+    public List<LZusatzWert> getZusatzwerte();
     public void reset();
     public void newMessung();
     public void newOrt();
--- a/src/main/java/de/intevation/lada/rest/LAFImportService.java	Wed Aug 28 15:10:19 2013 +0200
+++ b/src/main/java/de/intevation/lada/rest/LAFImportService.java	Wed Aug 28 15:11:50 2013 +0200
@@ -94,7 +94,7 @@
             respData.put("filename", name);
             int code = 200;
             if (!success) {
-                code = 660;
+                code = 670;
             }
             Response response = new Response(success, code, respData);
             return response;
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)