Mercurial > lada > lada-server
diff src/main/java/de/intevation/lada/factory/OrtFactory.java @ 1261:dc7dde59bb54
Moved rules to create an ort object to ort factory.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Fri, 27 Jan 2017 15:00:31 +0100 |
parents | a81de70d321d |
children | a851fc69130c |
line wrap: on
line diff
--- a/src/main/java/de/intevation/lada/factory/OrtFactory.java Fri Jan 27 13:27:08 2017 +0100 +++ b/src/main/java/de/intevation/lada/factory/OrtFactory.java Fri Jan 27 15:00:31 2017 +0100 @@ -27,7 +27,10 @@ import de.intevation.lada.importer.ReportItem; import de.intevation.lada.model.stammdaten.Ort; +import de.intevation.lada.model.stammdaten.Staat; +import de.intevation.lada.model.stammdaten.Verwaltungseinheit; 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; @@ -44,7 +47,7 @@ public void transformCoordinates(Ort ort) { errors = new ArrayList<ReportItem>(); - int kda = ort.getKdaId(); + Integer kda = ort.getKdaId(); String epsg = null; String xCoord = null; String yCoord = null; @@ -94,6 +97,141 @@ } } + /** + * Use given attribute to try to add other attributes. + * To set futher attributes at least one of the following attribute set + * need to be present: + * - kda, x, y + * - gemId + * - staat + * + * @param kda The koordinatenart + * @param x The x coordinate + * @param y The y coordinate + * @param gemId The gemeinde id + * @param staat The staat id + */ + public Ort completeOrt(Ort ort) { + QueryBuilder<Ort> builder = + new QueryBuilder<Ort>( + repository.entityManager("stamm"), + Ort.class); + logger.debug("try to make a complete ort"); + if (ort.getKdaId() != null && + ort.getKoordXExtern() != null && + ort.getKoordYExtern() != null + ) { + logger.debug("has koordinates"); + builder.and("kdaId", ort.getKdaId()); + builder.and("koordXExtern", ort.getKoordXExtern()); + builder.and("koordYExtern", ort.getKoordYExtern()); + builder.and("ozId", ort.getOzId()); + builder.and("netzbetreiberId", ort.getNetzbetreiberId()); + List<Ort> orte = repository.filterPlain(builder.getQuery(), "stamm"); + if (orte != null && orte.size() > 0) { + return orte.get(0); + } + } + else if (ort.getGemId() != null) { + logger.debug("has gemid"); + builder.and("gemId", ort.getGemId()); + builder.and("ozId", ort.getOzId()); + builder.and("netzbetreiberId", ort.getNetzbetreiberId()); + List<Ort> orte = repository.filterPlain(builder.getQuery(), "stamm"); + if (orte != null && orte.size() > 0) { + logger.debug("found ort: " + orte.get(0).getId()); + return orte.get(0); + } + } + else if (ort.getStaatId() != null && + ort.getStaatId() != 0 + ) { + logger.debug("has staat"); + builder.and("staatId", ort.getGemId()); + builder.and("ozId", ort.getOzId()); + builder.and("netzbetreiberId", ort.getNetzbetreiberId()); + List<Ort> orte = repository.filterPlain(builder.getQuery(), "stamm"); + if (orte != null && orte.size() > 0) { + return orte.get(0); + } + } + + logger.debug("no ort found"); + return createOrt(ort); + } + + private Ort createOrt(Ort ort) { + boolean hasKoord = false; + boolean hasGem = false; + boolean hasStaat = false; + if (ort.getKdaId() != null && + ort.getKoordXExtern() != null && + ort.getKoordYExtern() != null + ) { + logger.debug("transformCoordinates"); + transformCoordinates(ort); + hasKoord = true; + } + if (ort.getGemId() == null && hasKoord) { + logger.debug("findVerwaltungseinheit"); + findVerwaltungseinheit(ort); + } + if (ort.getGemId() != null){ + if (ort.getStaatId() == null) { + ort.setStaatId(0); + } + Verwaltungseinheit v = repository.getByIdPlain( + Verwaltungseinheit.class, + ort.getGemId(), + "stamm"); + if (!hasKoord) { + logger.debug("add coordinates"); + ort.setMpArt("V"); + ort.setKdaId(4); + ort.setKoordYExtern(String.valueOf(v.getMittelpunkt().getY())); + ort.setKoordXExtern(String.valueOf(v.getMittelpunkt().getX())); + } + if (ort.getKurztext() == null) { + ort.setKurztext(v.getBezeichnung()); + } + if (ort.getLangtext() == null) { + ort.setLangtext(v.getBezeichnung()); + } + if (ort.getBerichtstext() == null) { + ort.setBerichtstext(v.getBezeichnung()); + } + transformCoordinates(ort); + hasGem = true; + } + if (ort.getStaatId() != null && + ort.getStaatId() != 0 && + !hasKoord && + !hasGem + ) { + Staat staat = + repository.getByIdPlain(Staat.class, ort.getStaatId(), "stamm"); + ort.setKdaId(staat.getKdaId()); + ort.setKoordXExtern(staat.getKoordXExtern()); + ort.setKoordYExtern(staat.getKoordYExtern()); + ort.setKurztext(staat.getStaat()); + ort.setLangtext(staat.getStaat()); + if (staat.getStaatIso() != null) { + ort.setOrtId("Staat_" + staat.getStaatIso()); + } + ort.setBerichtstext(staat.getStaat()); + transformCoordinates(ort); + hasStaat = true; + } + return ort; + } + + /** + * Use the geom of an ort object to determine the verwaltungseinheit. + * If verwaltungseinheit was found the gemId is used as reference in the ort + * object. + * + * @param ort The ort object + */ public void findVerwaltungseinheit(Ort ort) { if (ort.getGeom() == null) { return; @@ -132,6 +270,6 @@ } public boolean hasErrors() { - return !errors.isEmpty(); + return !(errors == null) && !errors.isEmpty(); } }