Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/validation/LOrtValidator.java @ 366:567ce7697fc7 0.5
Code documentation.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 10 Sep 2013 15:55:54 +0200 |
parents | f3c58d3c4bc7 |
children | f3d0894d9bfc |
rev | line source |
---|---|
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.lada.validation; |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
2 |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
3 import java.util.HashMap; |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
4 import java.util.List; |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
5 import java.util.Map; |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
6 |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
7 import javax.enterprise.context.ApplicationScoped; |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
8 import javax.inject.Inject; |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 import javax.inject.Named; |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
11 import com.vividsolutions.jts.geom.Coordinate; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
12 import com.vividsolutions.jts.geom.CoordinateSequence; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
13 import com.vividsolutions.jts.geom.GeometryFactory; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
14 import com.vividsolutions.jts.geom.Point; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
15 import com.vividsolutions.jts.geom.PrecisionModel; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
16 |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
17 import de.intevation.lada.data.QueryBuilder; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
18 import de.intevation.lada.data.Repository; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
19 import de.intevation.lada.model.DeVg; |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
20 import de.intevation.lada.model.LOrt; |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
21 import de.intevation.lada.model.Ort; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
22 import de.intevation.lada.model.SVerwaltungseinheit; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
23 import de.intevation.lada.rest.Response; |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
25 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
26 * Validator for LOrt objects. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
27 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
28 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
29 */ |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
30 @ApplicationScoped |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
31 @Named("lortvalidator") |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 public class LOrtValidator |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 implements Validator |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 { |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
35 @Inject |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
36 @Named("readonlyrepository") |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
37 private Repository readonlyRepo; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
38 |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
39 @Inject |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
40 @Named("ortrepository") |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
41 private Repository ortRepo; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
42 |
263
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
43 /** |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
44 * Validate a LOrt object. |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
45 * |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
46 * @param object The LOrt object. |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
47 * @param update The database operation. |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
48 * TRUE indicates that the object should be updated, FALSE |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
49 * if the object is a new Object. |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
50 * @return Map containing warnings. |
2098db2e8fbd
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
260
diff
changeset
|
51 */ |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 @Override |
260
0de24f5e7c01
Added boolean parameter to validate method to test if update or create was triggered.
Raimund Renkert <rrenkert@intevation.de>
parents:
122
diff
changeset
|
53 public Map<String, Integer> validate(Object object, boolean update) |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 throws ValidationException { |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
55 Map<String, Integer> warnings = new HashMap<String, Integer>(); |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 if (!(object instanceof LOrt)) { |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
57 Map<String, Integer> errors = new HashMap<String, Integer>(); |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 errors.put("lort", 610); |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 throw new ValidationException(errors); |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 } |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
61 LOrt ort = (LOrt)object; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
62 validateVerwaltungseinheit(ort, warnings); |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 //TODO: more validation, see LSB: VI - Konsistenzregeln |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 return warnings; |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 } |
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
66 |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
67 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
68 * Check if the given lat/lon coordinates are within the area of the |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
69 * verwaltungseinheit. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
70 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
71 * @param ort |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
72 * @param warnings |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
360
diff
changeset
|
73 */ |
360
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
74 private void validateVerwaltungseinheit(LOrt ort, Map<String, Integer> warnings) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
75 if (!ort.getOrtsTyp().equals("E")) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
76 return; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
77 } |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
78 QueryBuilder<Ort> ortBuilder = |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
79 new QueryBuilder<Ort>(ortRepo.getEntityManager(), Ort.class); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
80 ortBuilder.and("ortId", ort.getOrtId()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
81 Response response = ortRepo.filter(ortBuilder.getQuery()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
82 List<Ort> orte = (List<Ort>)response.getData(); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
83 QueryBuilder<SVerwaltungseinheit> veBuilder = |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
84 new QueryBuilder<SVerwaltungseinheit>( |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
85 readonlyRepo.getEntityManager(), SVerwaltungseinheit.class); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
86 veBuilder.and("gemId", orte.get(0).getGemId()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
87 Response ver = readonlyRepo.filter(veBuilder.getQuery()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
88 SVerwaltungseinheit ve = ((List<SVerwaltungseinheit>)ver.getData()).get(0); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
89 QueryBuilder<DeVg> vg = |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
90 new QueryBuilder<DeVg>(readonlyRepo.getEntityManager(), DeVg.class); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
91 vg.and("ags", ve.getGemId()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
92 Response rvg = readonlyRepo.filter(vg.getQuery()); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
93 List<DeVg> vgs = (List<DeVg>)rvg.getData(); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
94 if (vgs == null || vgs.isEmpty()) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
95 warnings.put("verwaltungseinheit", 653); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
96 return; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
97 } |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
98 double y = orte.get(0).getLatitude(); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
99 double x = orte.get(0).getLongitude(); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
100 Coordinate c = new Coordinate(x, y); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
101 GeometryFactory gf = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
102 Point p = gf.createPoint(c); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
103 boolean hit = false; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
104 for (DeVg singlevg : vgs) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
105 if(singlevg.getGeom().contains(p)) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
106 hit = true; |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
107 } |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
108 } |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
109 if (!hit) { |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
110 warnings.put("verwaltungseinheit", 651); |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
111 } |
f3c58d3c4bc7
Validate that lat/lon coordinates are within the geometry of verwaltungseinheit.
Raimund Renkert <rrenkert@intevation.de>
parents:
263
diff
changeset
|
112 } |
122
84e4f3aaf9ca
Added validator for LOrt.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
113 } |