Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/validation/rules/probe/DeskriptorToUmwelt.java @ 664:0002475bc23d
Fixed Index out of Bounds exception in validation.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Wed, 13 May 2015 13:57:23 +0200 |
parents | fa149968e60d |
children | 3118fbbe6292 |
rev | line source |
---|---|
661
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.lada.validation.rules.probe; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
2 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
3 import java.util.ArrayList; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
4 import java.util.List; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
5 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
6 import javax.inject.Inject; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
7 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 import de.intevation.lada.model.land.LProbe; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 import de.intevation.lada.model.stamm.DeskriptorUmwelt; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 import de.intevation.lada.model.stamm.Deskriptoren; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
11 import de.intevation.lada.util.annotation.RepositoryConfig; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import de.intevation.lada.util.data.QueryBuilder; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 import de.intevation.lada.util.data.Repository; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import de.intevation.lada.util.data.RepositoryType; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import de.intevation.lada.util.rest.Response; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 import de.intevation.lada.validation.Violation; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import de.intevation.lada.validation.annotation.ValidationRule; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 import de.intevation.lada.validation.rules.Rule; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
20 @ValidationRule("Probe") |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
21 public class DeskriptorToUmwelt implements Rule { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
22 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
23 @Inject |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 @RepositoryConfig(type=RepositoryType.RO) |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 private Repository repository; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 @Override |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 public Violation execute(Object object) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 LProbe probe = (LProbe)object; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 String[] mediaDesk = probe.getMediaDesk().split(" "); |
664
0002475bc23d
Fixed Index out of Bounds exception in validation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
661
diff
changeset
|
31 if (mediaDesk.length <= 1) { |
0002475bc23d
Fixed Index out of Bounds exception in validation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
661
diff
changeset
|
32 return null; |
0002475bc23d
Fixed Index out of Bounds exception in validation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
661
diff
changeset
|
33 } |
661
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 List<Integer> mediaIds = new ArrayList<Integer>(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 boolean zebs = false; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
36 Integer parent = null; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 Integer hdParent = null; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 Integer ndParent = null; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 if ("01".equals(mediaDesk[1])) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 zebs = true; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
41 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 for (int i = 1; i < mediaDesk.length; i++) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 if ("00".equals(mediaDesk[i])) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
44 continue; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
46 if (zebs && i < 5) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
47 parent = hdParent; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
48 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 else if (!zebs && i < 3) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
50 parent = hdParent; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 else { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 parent = ndParent; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
54 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
55 QueryBuilder<Deskriptoren> builder = new QueryBuilder<Deskriptoren>( |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
56 repository.entityManager("stamm"), Deskriptoren.class); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 if (parent != null) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 builder.and("vorgaenger", parent); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 builder.and("sn", mediaDesk[i]); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 builder.and("ebene", i - 1); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 Response response = repository.filter(builder.getQuery(), "stamm"); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 List<Deskriptoren> data = (List<Deskriptoren>)response.getData(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 if (data.isEmpty()) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 Violation violation = new Violation(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 violation.addWarning("mediaDesk", 633); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 return violation; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 hdParent = data.get(0).getId(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
70 mediaIds.add(data.get(0).getId()); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 if (i == 2) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
72 ndParent = data.get(0).getId(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
73 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 Violation violation = validateUmwelt(mediaIds, probe); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
76 return violation; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
77 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 private Violation validateUmwelt(List<Integer> media, LProbe probe) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 QueryBuilder<DeskriptorUmwelt> builder = |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 new QueryBuilder<DeskriptorUmwelt>( |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 repository.entityManager("stamm"), DeskriptorUmwelt.class); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 for (int i = media.size() - 1; i > 0; i--) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 String field = "s" + (i > 9 ? i : "0" + i); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 builder.and(field, media.get(i)); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 Response response = repository.filter(builder.getQuery(), "stamm"); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 List<DeskriptorUmwelt> data = (List<DeskriptorUmwelt>)response.getData(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 if (data.isEmpty() || !data.get(0).getUmwId().equals(probe.getUmwId())) { |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 Violation violation = new Violation(); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 violation.addWarning("umwId", 632); |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 return violation; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 return null; |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 } |
fa149968e60d
Added validation rules for probe deskriptor.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 } |