# HG changeset patch # User Raimund Renkert # Date 1436454735 -7200 # Node ID b8afbf6c1b5dda4f406a4256c356f11e4d872bdf # Parent c0da629ba69dc5b1eb465fea7c1c8564f06de32a Find the umw_id for probe objects. diff -r c0da629ba69d -r b8afbf6c1b5d src/main/java/de/intevation/lada/factory/ProbeFactory.java --- a/src/main/java/de/intevation/lada/factory/ProbeFactory.java Wed Jul 08 09:42:22 2015 +0200 +++ b/src/main/java/de/intevation/lada/factory/ProbeFactory.java Thu Jul 09 17:12:15 2015 +0200 @@ -25,6 +25,8 @@ import de.intevation.lada.model.land.MessprogrammMmt; import de.intevation.lada.model.land.MessungTranslation; import de.intevation.lada.model.land.ProbeTranslation; +import de.intevation.lada.model.stamm.DeskriptorUmwelt; +import de.intevation.lada.model.stamm.Deskriptoren; import de.intevation.lada.model.stamm.SOrt; import de.intevation.lada.util.annotation.RepositoryConfig; import de.intevation.lada.util.data.QueryBuilder; @@ -284,4 +286,181 @@ return 0; } } + + public LProbe findUmwelt(LProbe probe) { + String[] mediaDesk = probe.getMediaDesk().split(" "); + if (mediaDesk.length <= 1) { + return null; + } + List mediaIds = new ArrayList(); + boolean zebs = false; + Integer parent = null; + Integer hdParent = null; + Integer ndParent = null; + if ("01".equals(mediaDesk[1])) { + zebs = true; + } + for (int i = 1; i < mediaDesk.length; i++) { + if ("00".equals(mediaDesk[i])) { + mediaIds.add(-1); + continue; + } + if (zebs && i < 5) { + parent = hdParent; + } + else if (!zebs && i < 3) { + parent = hdParent; + } + else { + parent = ndParent; + } + QueryBuilder builder = new QueryBuilder( + repository.entityManager("stamm"), Deskriptoren.class); + if (parent != null) { + builder.and("vorgaenger", parent); + } + builder.and("sn", mediaDesk[i]); + builder.and("ebene", i - 1); + Response response = repository.filter(builder.getQuery(), "stamm"); + @SuppressWarnings("unchecked") + List data = (List)response.getData(); + if (data.isEmpty()) { + return probe; + } + hdParent = data.get(0).getId(); + mediaIds.add(data.get(0).getId()); + if (i == 2) { + ndParent = data.get(0).getId(); + } + } + return getUmwelt(probe, mediaIds, zebs); + } + + private LProbe getUmwelt(LProbe probe, List media, boolean isZebs) { + QueryBuilder builder = + new QueryBuilder( + repository.entityManager("stamm"), DeskriptorUmwelt.class); + + if (media.size() == 0) { + return probe; + } + + int size = 1; + if (isZebs) { + size = 2; + } + for (int i = size; i >= 0; i--) { + if (media.get(i) == -1) { + continue; + } + String field = "s" + (i > 9 ? i : "0" + i); + builder.and(field, media.get(i)); + } + Response response = repository.filter(builder.getQuery(), "stamm"); + @SuppressWarnings("unchecked") + List data = (List)response.getData(); + if (data.isEmpty()) { + return probe; + } + + boolean unique = isUnique(data); + if (unique) { + probe.setUmwId(data.get(0).getUmwId()); + return probe; + } + else { + boolean found = false; + for (int i = 0; i < data.size(); i++) { + for (int j = size + 1; j < 13; j++) { + switch(j) { + case 2: if (data.get(i).getS02() == null || + data.get(i).getS02().equals(media.get(2))) + found = true; + else + found = false; + break; + case 3: if (data.get(i).getS03() == null || + data.get(i).getS03().equals(media.get(3))) + found = true; + else + found = false; + break; + case 4: if (data.get(i).getS04() == null || + data.get(i).getS04().equals(media.get(4))) + found = true; + else + found = false; + break; + case 5: if (data.get(i).getS05() == null || + data.get(i).getS05().equals(media.get(5))) + found = true; + else + found = false; + break; + case 6: if (data.get(i).getS06() == null || + data.get(i).getS06().equals(media.get(6))) + found = true; + else + found = false; + break; + case 7: if (data.get(i).getS07() == null || + data.get(i).getS07().equals(media.get(7))) + found = true; + else + found = false; + break; + case 8: if (data.get(i).getS08() == null || + data.get(i).getS08().equals(media.get(8))) + found = true; + else + found = false; + break; + case 9: if (data.get(i).getS09() == null || + data.get(i).getS09().equals(media.get(9))) + found = true; + else + found = false; + break; + case 10: if (data.get(i).getS10() == null || + data.get(i).getS10().equals(media.get(10))) + found = true; + else + found = false; + break; + case 11: if (data.get(i).getS11() == null || + data.get(i).getS11().equals(media.get(11))) + found = true; + else + found = false; + break; + case 12: if (data.get(i).getS12() == null || + data.get(i).getS12().equals(media.get(12))) + found = true; + else + found = false; + break; + } + if (found) { + probe.setUmwId(data.get(i).getUmwId()); + return probe; + } + } + } + return probe; + } + } + + private boolean isUnique(List list) { + if (list.isEmpty()) { + return false; + } + String element = list.get(0).getUmwId(); + for (int i = 1; i < list.size(); i++) { + if (!element.equals(list.get(i))) { + return false; + } + } + return true; + } + } diff -r c0da629ba69d -r b8afbf6c1b5d src/main/java/de/intevation/lada/rest/ProbeService.java --- a/src/main/java/de/intevation/lada/rest/ProbeService.java Wed Jul 08 09:42:22 2015 +0200 +++ b/src/main/java/de/intevation/lada/rest/ProbeService.java Thu Jul 09 17:12:15 2015 +0200 @@ -327,6 +327,9 @@ response.setWarnings(violation.getWarnings()); return response; } + if (probe.getUmwId() == null || probe.getUmwId().equals("")) { + probe = factory.findUmwelt(probe); + } /* Persist the new probe object*/ Response newProbe = defaultRepo.create(probe, "land"); LProbe ret = (LProbe)newProbe.getData();