# HG changeset patch # User Raimund Renkert # Date 1478509659 -3600 # Node ID cbdeac32465c09d683ebc992990f97370974525a # Parent ee22d0cfbd81885a3bbe7785b38f158e24bb16c8 Implemented merge process for orte. diff -r ee22d0cfbd81 -r cbdeac32465c src/main/java/de/intevation/lada/importer/ObjectMerger.java --- a/src/main/java/de/intevation/lada/importer/ObjectMerger.java Mon Nov 07 10:06:38 2016 +0100 +++ b/src/main/java/de/intevation/lada/importer/ObjectMerger.java Mon Nov 07 10:07:39 2016 +0100 @@ -145,11 +145,6 @@ return this; } - public ObjectMerger mergeOrte(Probe target, List orte) { - // TODO implement me - return this; - } - public ObjectMerger mergeMessungKommentare( Messung target, List kommentare @@ -212,4 +207,58 @@ } return this; } + + public ObjectMerger mergeEntnahmeOrt( + int probeId, + Ortszuordnung ort + ) { + QueryBuilder builder = new QueryBuilder( + repository.entityManager("land"), + Ortszuordnung.class); + builder.and("probeId", probeId); + builder.and("ortszuordnungTyp", "E"); + List found = + repository.filterPlain(builder.getQuery(), "land"); + if (found.isEmpty()) { + repository.create(ort, "land"); + return this; + } + try { + for (int i = 0; i < found.size(); i++) { + repository.delete(found.get(i), "land"); + } + repository.create(ort, "land"); + } catch (SecurityException | + IllegalStateException | + PersistenceException e + ) { + // Restore orte. + logger.debug("exception: ", e); + for (int i = 0; i < found.size(); i++) { + repository.update(found.get(i), "land"); + } + } + return this; + } + + public ObjectMerger mergeUrsprungsOrte( + int probeId, + List orte + ) { + QueryBuilder builder = new QueryBuilder( + repository.entityManager("land"), + Ortszuordnung.class); + for (int i = 0; i < orte.size(); i++) { + builder.and("probeId", probeId); + builder.and("ortszuordnungTyp", "U"); + builder.and("ortId", orte.get(i).getOrtId()); + List found = + repository.filterPlain(builder.getQuery(), "land"); + if (found.isEmpty()) { + repository.create(orte.get(i), "land"); + } + builder = builder.getEmptyBuilder(); + } + return this; + } }