# HG changeset patch # User Raimund Renkert # Date 1474280086 -7200 # Node ID 28d2d5be7e03e3acfc885bc3bb764c1e50dcc83a # Parent 625b0adcba45557a26aa02b5f8b2bd2fdecc274e Added unit tests for importer update path. diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/java/de/intevation/lada/ImporterTest.java --- a/src/test/java/de/intevation/lada/ImporterTest.java Mon Sep 19 12:14:01 2016 +0200 +++ b/src/test/java/de/intevation/lada/ImporterTest.java Mon Sep 19 12:14:46 2016 +0200 @@ -7,7 +7,9 @@ */ package de.intevation.lada; +import java.sql.Timestamp; import java.util.ArrayList; +import java.util.List; import javax.inject.Inject; import javax.persistence.EntityManager; @@ -15,9 +17,11 @@ import org.apache.log4j.Logger; import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.junit.InSequence; import org.jboss.arquillian.persistence.Cleanup; import org.jboss.arquillian.persistence.CleanupStrategy; import org.jboss.arquillian.persistence.DataSource; +import org.jboss.arquillian.persistence.ShouldMatchDataSet; import org.jboss.arquillian.persistence.TestExecutionPhase; import org.jboss.arquillian.persistence.UsingDataSet; import org.junit.Assert; @@ -27,8 +31,17 @@ import de.intevation.lada.importer.Identified; import de.intevation.lada.importer.Identifier; import de.intevation.lada.importer.IdentifierConfig; +import de.intevation.lada.importer.ObjectMerger; +import de.intevation.lada.model.land.KommentarM; +import de.intevation.lada.model.land.KommentarP; import de.intevation.lada.model.land.Messung; +import de.intevation.lada.model.land.Messwert; import de.intevation.lada.model.land.Probe; +import de.intevation.lada.model.land.ZusatzWert; +import de.intevation.lada.util.annotation.RepositoryConfig; +import de.intevation.lada.util.data.QueryBuilder; +import de.intevation.lada.util.data.Repository; +import de.intevation.lada.util.data.RepositoryType; /** * Class to test the Lada-Importer @@ -52,6 +65,13 @@ @IdentifierConfig(type="Messung") Identifier messungIdentifier; + @Inject + @RepositoryConfig(type=RepositoryType.RW) + Repository repository; + + @Inject + ObjectMerger merger; + public ImporterTest() { testProtocol = new ArrayList(); } @@ -60,6 +80,7 @@ * PROBE IDENTIFIER */ @Test + @InSequence(0) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -81,6 +102,7 @@ } @Test + @InSequence(1) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -102,6 +124,7 @@ } @Test + @InSequence(2) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -122,6 +145,7 @@ } @Test + @InSequence(3) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -142,6 +166,7 @@ } @Test + @InSequence(4) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -164,6 +189,7 @@ } @Test + @InSequence(5) @UsingDataSet("datasets/dbUnit_probe_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -189,6 +215,7 @@ * MESSUNG IDENTIFIER */ @Test + @InSequence(6) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -210,6 +237,7 @@ } @Test + @InSequence(7) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -231,6 +259,7 @@ } @Test + @InSequence(8) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -252,6 +281,7 @@ } @Test + @InSequence(9) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -273,6 +303,7 @@ } @Test + @InSequence(10) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -295,6 +326,7 @@ } @Test + @InSequence(11) @UsingDataSet("datasets/dbUnit_messung_import.json") @DataSource("java:jboss/lada-land") @Cleanup(phase=TestExecutionPhase.AFTER, @@ -315,4 +347,232 @@ protocol.setPassed(true); testProtocol.add(protocol); } + + /** + * MERGE OBJECTS + */ + @Test + @InSequence(12) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match.json", + excludeColumns={"letzte_aenderung", "tree_modified"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeProbe() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge probe"); + protocol.addInfo("import", "Merge objects"); + + Probe probe = new Probe(); + probe.setIdAlt("T001"); + probe.setHauptprobenNr("120510002"); + probe.setMstId("06010"); + probe.setBaId(1); + probe.setDatenbasisId(9); + probe.setMedia("Trinkwasser Zentralversorgung Oberflächenwasser aufbereitet"); + probe.setMediaDesk("D: 59 04 01 00 05 05 01 02 00 00 00 00"); + probe.setMprId(1000); + probe.setProbeNehmerId(726); + probe.setTest(false); + probe.setLaborMstId("06010"); + probe.setProbenartId(2); + probe.setUmwId("A6"); + probe.setSolldatumBeginn(Timestamp.valueOf("2013-05-01 16:00:00")); + probe.setSolldatumEnde(Timestamp.valueOf("2013-05-05 16:00:00")); + probe.setProbeentnahmeBeginn(Timestamp.valueOf("2012-05-03 13:07:00")); + Probe dbProbe = repository.getByIdPlain(Probe.class, 1000, "land"); + merger.merge(dbProbe, probe); + + protocol.setPassed(true); + testProtocol.add(protocol); + } + + @Test + @InSequence(13) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match_messung.json", + excludeColumns={"letzte_aenderung", "tree_modified"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeMessung() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge messung"); + protocol.addInfo("import", "Merge objects"); + + Messung messung = new Messung(); + messung.setNebenprobenNr("06A0"); + messung.setGeplant(true); + messung.setFertig(false); + messung.setMessdauer(1000); + messung.setMmtId("A3"); + messung.setMesszeitpunkt(Timestamp.valueOf("2012-05-06 14:00:00")); + Messung dbMessung = repository.getByIdPlain(Messung.class, 1200, "land"); + merger.mergeMessung(dbMessung, messung); + + protocol.setPassed(true); + testProtocol.add(protocol); + } + + @Test + @InSequence(14) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match_zusatzwert.json", + excludeColumns={"id", "letzte_aenderung", "tree_modified"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeZusatzwert() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge zusatzwert"); + protocol.addInfo("import", "Merge objects"); + + Probe probe = repository.getByIdPlain(Probe.class, 1000, "land"); + List zusatzwerte = new ArrayList(); + ZusatzWert wert1 = new ZusatzWert(); + wert1.setProbeId(1000); + wert1.setMessfehler(1.2f); + wert1.setMesswertPzs(5.8d); + wert1.setNwgZuMesswert(1.3d); + wert1.setPzsId("A74"); + + ZusatzWert wert2 = new ZusatzWert(); + wert2.setProbeId(1000); + wert2.setMessfehler(0.2f); + wert2.setMesswertPzs(1.8d); + wert2.setNwgZuMesswert(0.3d); + wert2.setPzsId("A75"); + + ZusatzWert wert3 = new ZusatzWert(); + wert3.setProbeId(1000); + wert3.setMessfehler(0.2f); + wert3.setMesswertPzs(1.8d); + wert3.setNwgZuMesswert(0.3d); + wert3.setPzsId("A76"); + + zusatzwerte.add(wert1); + zusatzwerte.add(wert2); + zusatzwerte.add(wert3); + merger.mergeZusatzwerte(probe, zusatzwerte); + + protocol.setPassed(true); + testProtocol.add(protocol); + } + + @Test + @InSequence(15) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match_kommentar.json", + excludeColumns={"id"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeProbeKommentar() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge probe kommentar"); + protocol.addInfo("import", "Merge objects"); + + Probe probe = repository.getByIdPlain(Probe.class, 1000, "land"); + List kommentare = new ArrayList(); + KommentarP komm1 = new KommentarP(); + komm1.setProbeId(1000); + komm1.setDatum(Timestamp.valueOf("2012-05-08 12:00:00")); + komm1.setMstId("06010"); + komm1.setText("Testtext2"); + + KommentarP komm2 = new KommentarP(); + komm2.setProbeId(1000); + komm2.setDatum(Timestamp.valueOf("2012-04-08 12:00:00")); + komm2.setMstId("06010"); + komm2.setText("Testtext3"); + + kommentare.add(komm1); + kommentare.add(komm2); + + merger.mergeKommentare(probe, kommentare); + Assert.assertEquals(2, kommentare.size()); + + protocol.setPassed(true); + testProtocol.add(protocol); + } + + @Test + @InSequence(16) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match_kommentarm.json", + excludeColumns={"id"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeMessungKommentar() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge messung kommentar"); + protocol.addInfo("import", "Merge objects"); + + Messung messung = repository.getByIdPlain(Messung.class, 1200, "land"); + List kommentare = new ArrayList(); + KommentarM komm1 = new KommentarM(); + komm1.setMessungsId(1200); + komm1.setDatum(Timestamp.valueOf("2012-05-08 12:00:00")); + komm1.setMstId("06010"); + komm1.setText("Testtext2"); + + KommentarM komm2 = new KommentarM(); + komm2.setMessungsId(1200); + komm2.setDatum(Timestamp.valueOf("2012-03-08 12:00:00")); + komm2.setMstId("06010"); + komm2.setText("Testtext3"); + + kommentare.add(komm1); + kommentare.add(komm2); + + merger.mergeKommentare(messung, kommentare); + Assert.assertEquals(2, kommentare.size()); + + protocol.setPassed(true); + testProtocol.add(protocol); + } + + @Test + @InSequence(17) + @UsingDataSet("datasets/dbUnit_import_merge.json") + @ShouldMatchDataSet(value="datasets/dbUnit_import_merge_match_messwert.json", + excludeColumns={"id"}) + @DataSource("java:jboss/lada-land") + @Cleanup(phase=TestExecutionPhase.AFTER, + strategy=CleanupStrategy.USED_TABLES_ONLY) + public final void mergeMesswerte() throws Exception { + Protocol protocol = new Protocol(); + protocol.setName("import"); + protocol.setType("merge messwerte"); + protocol.addInfo("import", "Merge objects"); + + Messung messung = repository.getByIdPlain(Messung.class, 1200, "land"); + List messwerte = new ArrayList(); + Messwert wert1 = new Messwert(); + wert1.setMessungsId(1200); + wert1.setMehId(207); + wert1.setMessgroesseId(56); + wert1.setMesswert(1.5d); + messwerte.add(wert1); + + merger.mergeMesswerte(messung, messwerte); + QueryBuilder builder = new QueryBuilder( + repository.entityManager("land"), + Messwert.class + ); + builder.and("messungsId", messung.getId()); + List dbWerte = + repository.filterPlain(builder.getQuery(), "land"); + Assert.assertEquals(1, dbWerte.size()); + + protocol.setPassed(true); + testProtocol.add(protocol); + } } diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/clean_and_seed.sql --- a/src/test/resources/datasets/clean_and_seed.sql Mon Sep 19 12:14:01 2016 +0200 +++ b/src/test/resources/datasets/clean_and_seed.sql Mon Sep 19 12:14:46 2016 +0200 @@ -26,18 +26,26 @@ INSERT INTO ort_typ (id) VALUES (1); INSERT INTO datenbasis (id) VALUES (9); INSERT INTO mess_einheit (id) VALUES (207); +INSERT INTO mess_einheit (id) VALUES (208); INSERT INTO messgroesse (id, messgroesse) VALUES (56, 'Mangan'); +INSERT INTO messgroesse (id, messgroesse) VALUES (57, 'Mangan'); INSERT INTO mess_methode (id) VALUES ('A3'); INSERT INTO netz_betreiber (id) VALUES ('06'); INSERT INTO mess_stelle (id, netzbetreiber_id) VALUES ('06010', '06'); INSERT INTO pflicht_messgroesse (id, mmt_id, datenbasis_id) VALUES (33, 'A3', 9); INSERT INTO probenart (id, probenart, probenart_eudf_id) VALUES (1, 'E', 'A'); +INSERT INTO probenart (id, probenart, probenart_eudf_id) VALUES (2, 'S', 'B'); INSERT INTO proben_zusatz (id, beschreibung, zusatzwert) VALUES ('A74', 'Volumenstrom', 'VOLSTR'); +INSERT INTO proben_zusatz (id, beschreibung, zusatzwert) + VALUES ('A75', 'Volumenstrom', 'VOLSTR'); +INSERT INTO proben_zusatz (id, beschreibung, zusatzwert) + VALUES ('A76', 'Volumenstrom', 'VOLSTR'); INSERT INTO koordinaten_art (id) VALUES (5); INSERT INTO staat (id, staat, hkl_id, staat_iso) VALUES (0, 'Deutschland', 0, 'DE'); INSERT INTO umwelt (id, umwelt_bereich) VALUES ('L6', 'Spurenmessung Luft'); +INSERT INTO umwelt (id, umwelt_bereich) VALUES ('A6', 'Umweltbereich für test'); INSERT INTO verwaltungseinheit ( id, bundesland, bezeichnung, is_bundesland, is_gemeinde, is_landkreis, is_regbezirk) diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,91 @@ +{ + "land.messprogramm": [{ + "id": 1000, + "test": false, + "mst_id": "06010", + "labor_mst_id": "06010", + "datenbasis_id": 9, + "gem_id": "11000000", + "media_desk": "D: 50 90 01 06 02 05 00 00 00 00 00 00", + "umw_id": "L6", + "ort_id": 1000, + "probenart_id": 1, + "probenintervall": "M", + "gueltig_von": 1, + "gueltig_bis": 100, + "teilintervall_von": 1, + "teilintervall_bis": 30, + "letzte_aenderung": "2015-03-01 12:00:00" + }], + "land.probe": [{ + "id": 1000, + "id_alt": "T001", + "ba_id": "1", + "datenbasis_id": 9, + "letzte_aenderung": "2012-05-05 11:12:00", + "media": "Trinkwasser Zentralversorgung Oberflächenwasser aufbereitet", + "media_desk": "D: 59 04 01 00 05 05 01 02 00 00 00 00", + "mst_id": "06010", + "labor_mst_id": "06010", + "probeentnahme_beginn": "2012-05-03 13:07:00", + "probenart_id": 1, + "test": false, + "umw_id":"L6", + "hauptproben_nr": "120510002", + "mpr_id": 1000, + "probe_nehmer_id": 726, + "solldatum_beginn": "2013-05-01 16:00:00", + "solldatum_ende": "2013-05-05 16:00:00", + "tree_modified": "2012-05-08 10:00:00" + }], + "land.messung": [{ + "id": 1200, + "probe_id": 1000, + "nebenproben_nr": "06A0", + "id_alt": 1, + "mmt_id": "A3", + "messdauer": 3600, + "messzeitpunkt": "2012-05-06 14:00:00", + "fertig": false, + "letzte_aenderung": "2012-05-08 12:00:00", + "geplant": true, + "tree_modified": "2012-05-09 12:00:00" + }], + "land.zusatz_wert": [{ + "id": 1000, + "probe_id": 1000, + "pzs_id": "A74", + "messwert_pzs": 1.8, + "messfehler": 0.2, + "nwg_zu_messwert": 0.3, + "letzte_aenderung": "2012-05-08 12:00:00", + "tree_modified": "2012-05-09 12:00:00" + }], + "land.kommentar_p": [{ + "id": 1000, + "probe_id": 1000, + "datum": "2012-05-08 12:00:00", + "mst_id": "06010", + "text": "Testtext" + }], + "land.kommentar_m": [{ + "id": 1000, + "messungs_id": 1200, + "datum": "2012-05-08 12:00:00", + "mst_id": "06010", + "text": "Testtext" + }], + "land.messwert": [{ + "id": 1000, + "messungs_id": 1200, + "messgroesse_id": 56, + "messwert": 1000.8, + "meh_id": 207 + }, { + "id": 1001, + "messungs_id": 1200, + "messgroesse_id": 57, + "messwert": 1000.8, + "meh_id": 208 + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,23 @@ +{ + "land.probe": [{ + "id": 1000, + "id_alt": "T001", + "ba_id": "1", + "datenbasis_id": 9, + "letzte_aenderung": "2012-05-05 11:12:00", + "media": "Trinkwasser Zentralversorgung Oberflächenwasser aufbereitet", + "media_desk": "D: 59 04 01 00 05 05 01 02 00 00 00 00", + "mst_id": "06010", + "labor_mst_id": "06010", + "probeentnahme_beginn": "2012-05-03 13:07:00", + "probenart_id": 2, + "test": false, + "umw_id":"A6", + "hauptproben_nr": "120510002", + "mpr_id": 1000, + "probe_nehmer_id": 726, + "solldatum_beginn": "2013-05-01 16:00:00", + "solldatum_ende": "2013-05-05 16:00:00", + "tree_modified": "2012-05-08 10:00:00" + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match_kommentar.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match_kommentar.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,15 @@ +{ + "land.kommentar_p": [{ + "id": 1000, + "probe_id": 1000, + "datum": "2012-05-08 12:00:00", + "mst_id": "06010", + "text": "Testtext" + }, { + "id": 1001, + "probe_id": 1000, + "datum": "2012-04-08 12:00:00", + "mst_id": "06010", + "text": "Testtext3" + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match_kommentarm.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match_kommentarm.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,15 @@ +{ + "land.kommentar_m": [{ + "id": 1000, + "messungs_id": 1200, + "datum": "2012-05-08 12:00:00", + "mst_id": "06010", + "text": "Testtext" + }, { + "id": 1001, + "messungs_id": 1200, + "datum": "2012-03-08 12:00:00", + "mst_id": "06010", + "text": "Testtext3" + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match_messung.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match_messung.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,15 @@ +{ + "land.messung": [{ + "id": 1200, + "probe_id": 1000, + "nebenproben_nr": "06A0", + "id_alt": 1, + "mmt_id": "A3", + "messdauer": 1000, + "messzeitpunkt": "2012-05-06 14:00:00", + "fertig": false, + "letzte_aenderung": "2012-05-08 12:00:00", + "geplant": true, + "tree_modified": "2012-05-09 12:00:00" + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match_messwert.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match_messwert.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,9 @@ +{ + "land.messwert": [{ + "id": 1003, + "messungs_id": 1200, + "messgroesse_id": 56, + "messwert": 1.5, + "meh_id": 207 + }] +} diff -r 625b0adcba45 -r 28d2d5be7e03 src/test/resources/datasets/dbUnit_import_merge_match_zusatzwert.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/resources/datasets/dbUnit_import_merge_match_zusatzwert.json Mon Sep 19 12:14:46 2016 +0200 @@ -0,0 +1,30 @@ +{ + "land.zusatz_wert": [{ + "id": 1000, + "probe_id": 1000, + "pzs_id": "A74", + "messwert_pzs": 5.8, + "messfehler": 1.2, + "nwg_zu_messwert": 1.3, + "letzte_aenderung": "2012-05-08 12:00:00", + "tree_modified": "2012-05-09 12:00:00" + }, { + "id": 1001, + "probe_id": 1000, + "pzs_id": "A75", + "messwert_pzs": 1.8, + "messfehler": 0.2, + "nwg_zu_messwert": 0.3, + "letzte_aenderung": "2012-05-08 12:00:00", + "tree_modified": "2012-05-09 12:00:00" + }, { + "id": 1002, + "probe_id": 1000, + "pzs_id": "A76", + "messwert_pzs": 1.8, + "messfehler": 0.2, + "nwg_zu_messwert": 0.3, + "letzte_aenderung": "2012-05-08 12:00:00", + "tree_modified": "2012-05-09 12:00:00" + }] +}