diff src/main/java/de/intevation/lada/validation/rules/ort/CoordinatesInVE.java @ 677:de47b7193bdb

Fixed validation rules.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 22 May 2015 15:15:14 +0200
parents 881da3d5377b
children 3118fbbe6292
line wrap: on
line diff
--- a/src/main/java/de/intevation/lada/validation/rules/ort/CoordinatesInVE.java	Fri May 22 15:14:54 2015 +0200
+++ b/src/main/java/de/intevation/lada/validation/rules/ort/CoordinatesInVE.java	Fri May 22 15:15:14 2015 +0200
@@ -1,5 +1,23 @@
 package de.intevation.lada.validation.rules.ort;
 
+import java.util.List;
+
+import javax.inject.Inject;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.PrecisionModel;
+
+import de.intevation.lada.model.land.LOrt;
+import de.intevation.lada.model.stamm.DeVg;
+import de.intevation.lada.model.stamm.SOrt;
+import de.intevation.lada.model.stamm.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;
+import de.intevation.lada.util.rest.Response;
 import de.intevation.lada.validation.Violation;
 import de.intevation.lada.validation.annotation.ValidationRule;
 import de.intevation.lada.validation.rules.Rule;
@@ -7,9 +25,58 @@
 @ValidationRule("Ort")
 public class CoordinatesInVE implements Rule {
 
+    @Inject
+    @RepositoryConfig(type=RepositoryType.RO)
+    private Repository repository;
+
     @Override
     public Violation execute(Object object) {
-        // TODO
+        LOrt ort = (LOrt)object;
+        if (!"E".equals(ort.getOrtsTyp())) {
+            return null;
+        }
+        QueryBuilder<SOrt> ortBuilder =
+            new QueryBuilder<SOrt>(repository.entityManager("stamm"), SOrt.class);
+        ortBuilder.and("id", ort.getOrt());
+        Response response = repository.filter(ortBuilder.getQuery(), "stamm");
+        List<SOrt> orte = (List<SOrt>)response.getData();
+        QueryBuilder<Verwaltungseinheit> veBuilder =
+            new QueryBuilder<Verwaltungseinheit>(
+                repository.entityManager("stamm"), Verwaltungseinheit.class);
+        veBuilder.and("id", orte.get(0).getVerwaltungseinheitId());
+        Response ver = repository.filter(veBuilder.getQuery(), "stamm");
+        if (((List<Verwaltungseinheit>)ver.getData()).isEmpty()) {
+            Violation violation = new Violation();
+            violation.addWarning("verwaltungseinheit", 653);
+            return violation;
+        }
+        Verwaltungseinheit ve = ((List<Verwaltungseinheit>)ver.getData()).get(0);
+        QueryBuilder<DeVg> vg =
+            new QueryBuilder<DeVg>(repository.entityManager("stamm"), DeVg.class);
+        vg.and("ags", ve.getId());
+        Response rvg = repository.filter(vg.getQuery(), "stamm");
+        List<DeVg> vgs = (List<DeVg>)rvg.getData();
+        if (vgs == null || vgs.isEmpty()) {
+            Violation violation = new Violation();
+            violation.addWarning("verwaltungseinheit", 653);
+            return violation;
+        }
+        double y = orte.get(0).getLatitude();
+        double x = orte.get(0).getLongitude();
+        Coordinate c = new Coordinate(x, y);
+        GeometryFactory gf = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326);
+        Point p = gf.createPoint(c);
+        boolean hit = false;
+        for (DeVg singlevg : vgs) {
+            if(singlevg.getGeom().contains(p)) {
+                hit = true;
+            }
+        }
+        if (!hit) {
+            Violation violation = new Violation();
+            violation.addWarning("verwaltungseinheit", 651);
+            return violation;
+        }
         return null;
     }
 
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)