comparison src/main/java/de/intevation/lada/data/importer/AttributeMapper.java @ 337:cb47c33b119d

Imporved error/warning handling and fixed some bugs in the importer module.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 28 Aug 2013 15:11:50 +0200
parents 5d11428e6a09
children d39d3886b97d
comparison
equal deleted inserted replaced
336:53417b61391c 337:cb47c33b119d
15 import javax.ejb.Stateless; 15 import javax.ejb.Stateless;
16 import javax.inject.Inject; 16 import javax.inject.Inject;
17 import javax.inject.Named; 17 import javax.inject.Named;
18 import javax.persistence.EntityManager; 18 import javax.persistence.EntityManager;
19 19
20 import de.intevation.lada.data.QueryBuilder;
20 import de.intevation.lada.data.Repository; 21 import de.intevation.lada.data.Repository;
21 import de.intevation.lada.model.LKommentarM; 22 import de.intevation.lada.model.LKommentarM;
22 import de.intevation.lada.model.LKommentarP; 23 import de.intevation.lada.model.LKommentarP;
23 import de.intevation.lada.model.LMessung; 24 import de.intevation.lada.model.LMessung;
24 import de.intevation.lada.model.LMessungId; 25 import de.intevation.lada.model.LMessungId;
25 import de.intevation.lada.model.LMesswert; 26 import de.intevation.lada.model.LMesswert;
26 import de.intevation.lada.model.LOrt; 27 import de.intevation.lada.model.LOrt;
27 import de.intevation.lada.model.LProbe; 28 import de.intevation.lada.model.LProbe;
28 import de.intevation.lada.model.LProbeInfo; 29 import de.intevation.lada.model.LProbeInfo;
30 import de.intevation.lada.model.LZusatzWert;
31 import de.intevation.lada.model.Ort;
32 import de.intevation.lada.model.SDatenbasis;
29 import de.intevation.lada.model.SMessEinheit; 33 import de.intevation.lada.model.SMessEinheit;
30 import de.intevation.lada.model.SMessgroesse; 34 import de.intevation.lada.model.SMessgroesse;
35 import de.intevation.lada.model.SProbenZusatz;
36 import de.intevation.lada.model.SProbenart;
37 import de.intevation.lada.model.SUmwelt;
31 import de.intevation.lada.rest.Response; 38 import de.intevation.lada.rest.Response;
32 39
33 @Stateless 40 @Stateless
34 public class AttributeMapper 41 public class AttributeMapper
35 { 42 {
39 @Inject 46 @Inject
40 @Named("lproberepository") 47 @Named("lproberepository")
41 private Repository probeRepo; 48 private Repository probeRepo;
42 49
43 @Inject 50 @Inject
51 @Named("ortrepository")
52 private Repository ortRepo;
53
54 @Inject
44 @Named("readonlyrepository") 55 @Named("readonlyrepository")
45 private Repository sRepository; 56 private Repository sRepository;
46 57
47 private List<ReportData> warnings; 58 private List<ReportData> warnings;
48 private List<ReportData> errors; 59 private List<ReportData> errors;
51 this.warnings = new ArrayList<ReportData>(); 62 this.warnings = new ArrayList<ReportData>();
52 this.errors = new ArrayList<ReportData>(); 63 this.errors = new ArrayList<ReportData>();
53 } 64 }
54 public LProbe addAttribute(String key, Object value, LProbe probe) { 65 public LProbe addAttribute(String key, Object value, LProbe probe) {
55 DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm"); 66 DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm");
56 if ("datenbasis_s".equals(key)) { 67 if ("datenbasis_s".equals(key) && probe.getDatenbasisId() == null) {
57 Integer v = Integer.valueOf(value.toString()); 68 Integer v = Integer.valueOf(value.toString());
58 probe.setDatenbasisId(v); 69 probe.setDatenbasisId(v);
59 } 70 }
60 else if ("probe_id".equals(key)) { 71 else if ("datenbasis_s".equals(key) && probe.getDatenbasisId() != null){
61 if (probeRepo.findById(LProbeInfo.class, value.toString()) != null) { 72 this.warnings.add(new ReportData(key, value.toString(), 672));
62 errors.add(new ReportData("probe_id", value.toString(), 662)); 73 }
74
75 if ("datenbasis".equals(key) && probe.getDatenbasisId() == null) {
76 QueryBuilder<SDatenbasis> builder =
77 new QueryBuilder<SDatenbasis>(
78 this.sRepository.getEntityManager(), SDatenbasis.class);
79 builder.and("datenbasis", value.toString());
80 Response response = sRepository.filter(builder.getQuery());
81 List<SDatenbasis> datenbasis = (List<SDatenbasis>)response.getData();
82 Integer v = Integer.valueOf(datenbasis.get(0).getDatenbasisId());
83 probe.setDatenbasisId(v);
84 }
85 else if ("datenbasis".equals(key) && probe.getDatenbasisId() != null){
86 this.warnings.add(new ReportData(key, value.toString(), 672));
87 }
88
89 if ("probe_id".equals(key)) {
90 Response response =
91 probeRepo.findById(LProbeInfo.class, value.toString());
92 List<LProbeInfo> info = (List<LProbeInfo>)response.getData();
93 if (info != null && info.size() > 0) {
94 errors.add(new ReportData("probe_id", value.toString(), 671));
63 return null; 95 return null;
64 } 96 }
65 probe.setProbeId(value.toString()); 97 probe.setProbeId(value.toString());
66 } 98 }
67 else if ("hauptprobennummer".equals(key)) { 99
100 if ("hauptprobennummer".equals(key)) {
68 probe.setHauptprobenNr(value.toString()); 101 probe.setHauptprobenNr(value.toString());
69 } 102 }
70 else if ("mpr_id".equals(key)) { 103
104 if ("mpr_id".equals(key)) {
71 Integer v = Integer.valueOf(value.toString()); 105 Integer v = Integer.valueOf(value.toString());
72 probe.setMprId(v); 106 probe.setMprId(v);
73 } 107 }
74 else if ("netzkennung".equals(key)) { 108
109 if ("netzkennung".equals(key)) {
75 probe.setNetzbetreiberId(value.toString()); 110 probe.setNetzbetreiberId(value.toString());
76 } 111 }
77 else if ("messprogramm_land".equals(key)) { 112
78 probe.setMplId(value.toString()); 113 if ("messstelle".equals(key)) {
79 }
80 else if ("messstelle".equals(key)) {
81 probe.setMstId(value.toString()); 114 probe.setMstId(value.toString());
82 } 115 }
83 else if ("betriebsart".equals(key)) { 116
117 if ("messprogramm_s".equals(key) && probe.getBaId() == null) {
84 probe.setBaId(value.toString()); 118 probe.setBaId(value.toString());
85 } 119 }
86 else if ("soll_datum_uhrzeit_a".equals(key)) { 120 else if ("messprogramm_s".equals(key) && probe.getBaId() != null){
121 this.warnings.add(new ReportData(key, value.toString(), 672));
122 }
123
124 if ("soll_datum_uhrzeit_a".equals(key)) {
87 try { 125 try {
88 Date d = format.parse(value.toString()); 126 Date d = format.parse(value.toString());
89 probe.setSolldatumBeginn(d); 127 probe.setSolldatumBeginn(d);
90 } 128 }
91 catch (ParseException e) { 129 catch (ParseException e) {
92 //TODO handle warning. 130 this.warnings.add(new ReportData(key, value.toString(), 674));
93 } 131 }
94 } 132 }
95 else if ("soll_datum_uhrzeit_e".equals(key)) { 133 if ("soll_datum_uhrzeit_e".equals(key)) {
96 try { 134 try {
97 Date d = format.parse(value.toString()); 135 Date d = format.parse(value.toString());
98 probe.setSolldatumEnde(d); 136 probe.setSolldatumEnde(d);
99 } 137 }
100 catch (ParseException e) { 138 catch (ParseException e) {
101 //TODO handle warning. 139 this.warnings.add(new ReportData(key, value.toString(), 674));
102 } 140 }
103 } 141 }
104 else if ("probenahme_datum_uhrzeit_a".equals(key)) { 142 if ("probenahme_datum_uhrzeit_a".equals(key)) {
105 try { 143 try {
106 Date d = format.parse(value.toString()); 144 Date d = format.parse(value.toString());
107 probe.setProbeentnahmeBeginn(d); 145 probe.setProbeentnahmeBeginn(d);
108 } 146 }
109 catch (ParseException e) { 147 catch (ParseException e) {
110 //TODO handle warning. 148 this.warnings.add(new ReportData(key, value.toString(), 674));
111 } 149 }
112 } 150 }
113 else if ("probenahme_datum_uhrzeit_e".equals(key)) { 151 if ("probenahme_datum_uhrzeit_e".equals(key)) {
114 try { 152 try {
115 Date d = format.parse(value.toString()); 153 Date d = format.parse(value.toString());
116 probe.setProbeentnahmeEnde(d); 154 probe.setProbeentnahmeEnde(d);
117 } 155 }
118 catch (ParseException e) { 156 catch (ParseException e) {
119 //TODO handle warning. 157 this.warnings.add(new ReportData(key, value.toString(), 674));
120 } 158 }
121 } 159 }
122 else if ("umweltbereich_s".equals(key)) { 160
161 if ("umweltbereich_s".equals(key) && probe.getUmwId() == null) {
123 probe.setUmwId(value.toString()); 162 probe.setUmwId(value.toString());
124 } 163 }
125 else if ("deskriptoren".equals(key)) { 164 else if ("umweltbereich_s".equals(key) && probe.getUmwId() != null){
165 this.warnings.add(new ReportData(key, value.toString(), 672));
166 }
167 if ("umweltbereich_c".equals(key) && probe.getUmwId() == null) {
168 QueryBuilder<SUmwelt> builder =
169 new QueryBuilder<SUmwelt>(
170 sRepository.getEntityManager(), SUmwelt.class);
171 int length = value.toString().length() > 80 ? 80 : value.toString().length();
172 builder.and("umweltBereich", value.toString().substring(0, length));
173 Response response = sRepository.filter(builder.getQuery());
174 List<SUmwelt> umw = (List<SUmwelt>)response.getData();
175 probe.setUmwId(umw.get(0).getUmwId());
176 }
177 else if ("umweltbereich_c".equals(key) && probe.getUmwId() != null){
178 this.warnings.add(new ReportData(key, value.toString(), 672));
179 }
180
181 if ("deskriptoren".equals(key)) {
126 probe.setMediaDesk(value.toString()); 182 probe.setMediaDesk(value.toString());
127 } 183 }
128 else if ("testdaten".equals(key)) { 184
185 if ("testdaten".equals(key)) {
129 if (!value.toString().equals("0")) { 186 if (!value.toString().equals("0")) {
130 probe.setTest(true); 187 probe.setTest(true);
131 } 188 }
132 else { 189 else {
133 probe.setTest(false); 190 probe.setTest(false);
134 } 191 }
135 } 192 }
136 193
137 probe.setProbenartId(1); 194 if ("medium".equals(key)) {
195 probe.setMedia(value.toString());
196 }
197
198 if ("probenart".equals(key)) {
199 QueryBuilder<SProbenart> builder =
200 new QueryBuilder<SProbenart>(
201 sRepository.getEntityManager(), SProbenart.class);
202 builder.and("probenart", value.toString());
203 Response response = sRepository.filter(builder.getQuery());
204 List<SProbenart> art = (List<SProbenart>)response.getData();
205 probe.setProbenartId(Integer.valueOf(art.get(0).getProbenartId()));
206 }
138 return probe; 207 return probe;
139 } 208 }
140 209
141 public LKommentarP addAttribute( 210 public LKommentarP addAttribute(
142 String key, 211 String key,
151 try { 220 try {
152 d = format.parse(date); 221 d = format.parse(date);
153 kommentar.setKDatum(d); 222 kommentar.setKDatum(d);
154 } 223 }
155 catch (ParseException e) { 224 catch (ParseException e) {
156 //TODO: handle warning. 225 this.warnings.add(new ReportData(key, values.toString(), 674));
157 } 226 }
158 String text = v.substring(23, v.length() -1); 227 String text = v.substring(23, v.length() -1);
159 kommentar.setErzeuger(erzeuger); 228 kommentar.setErzeuger(erzeuger);
160 kommentar.setKText(text); 229 kommentar.setKText(text);
161 return kommentar; 230 return kommentar;
174 try { 243 try {
175 d = format.parse(date); 244 d = format.parse(date);
176 kommentar.setKDatum(d); 245 kommentar.setKDatum(d);
177 } 246 }
178 catch (ParseException e) { 247 catch (ParseException e) {
179 //TODO: handle warning. 248 this.warnings.add(new ReportData(key, values.toString(), 674));
180 } 249 }
181 String text = v.substring(23, v.length() -1); 250 String text = v.substring(23, v.length() -1);
182 kommentar.setErzeuger(erzeuger); 251 kommentar.setErzeuger(erzeuger);
183 kommentar.setKText(text); 252 kommentar.setKText(text);
184 return kommentar; 253 return kommentar;
204 try { 273 try {
205 Date d = format.parse(values.toString()); 274 Date d = format.parse(values.toString());
206 messung.setMesszeitpunkt(d); 275 messung.setMesszeitpunkt(d);
207 } 276 }
208 catch (ParseException e) { 277 catch (ParseException e) {
209 //TODO: handle warnings. 278 this.warnings.add(new ReportData(key, values.toString(), 674));
210 } 279 }
211 } 280 }
212 else if ("messzeit_sekunden".equals(key)) { 281 else if ("messzeit_sekunden".equals(key)) {
213 Integer i = Integer.valueOf(values.toString()); 282 Integer i = Integer.valueOf(values.toString());
214 messung.setMessdauer(i); 283 messung.setMessdauer(i);
262 foundEinheit = true; 331 foundEinheit = true;
263 messwert.setMehId((int) e.getMehId()); 332 messwert.setMehId((int) e.getMehId());
264 } 333 }
265 } 334 }
266 if (!foundEinheit) { 335 if (!foundEinheit) {
336 this.errors.add(new ReportData("messeinheit", "null", 673));
267 return null; 337 return null;
268 //TODO: handle warning!
269 } 338 }
270 Response responseGroesse = sRepository.findAll(SMessgroesse.class); 339 Response responseGroesse = sRepository.findAll(SMessgroesse.class);
271 List<SMessgroesse> messgroessen = 340 List<SMessgroesse> messgroessen =
272 (List<SMessgroesse>)responseGroesse.getData(); 341 (List<SMessgroesse>)responseGroesse.getData();
273 boolean foundGroesse = false; 342 boolean foundGroesse = false;
277 messwert.setMessgroesseId(g.getMessgroesseId()); 346 messwert.setMessgroesseId(g.getMessgroesseId());
278 messwert.getId().setMessgroesseId(g.getMessgroesseId()); 347 messwert.getId().setMessgroesseId(g.getMessgroesseId());
279 } 348 }
280 } 349 }
281 if (!foundGroesse) { 350 if (!foundGroesse) {
351 this.errors.add(new ReportData("messgroesse", "null", 673));
282 return null; 352 return null;
283 //TODO: handle warning!
284 } 353 }
285 } 354 }
286 //TODO: Match the other values. 355 //TODO: Match the other values.
287 return messwert; 356 return messwert;
288 } 357 }
294 ) { 363 ) {
295 if ("ort_id".equals(key)) { 364 if ("ort_id".equals(key)) {
296 Integer v = Integer.valueOf(values.toString()); 365 Integer v = Integer.valueOf(values.toString());
297 ort.setOrtId(v); 366 ort.setOrtId(v);
298 } 367 }
299 else if ("ort_typ".equals(key)) { 368 if ("ort_code".equals(key)) {
369 QueryBuilder<Ort> builder =
370 new QueryBuilder<Ort>(ortRepo.getEntityManager(), Ort.class);
371 builder.and("bezeichnung", values.toString());
372 Response response = ortRepo.filter(builder.getQuery());
373 List<Ort> orte = (List<Ort>)response.getData();
374 Integer v = Integer.valueOf(orte.get(0).getOrtId());
375 ort.setOrtId(v);
376 }
377 if ("ort_typ".equals(key)) {
300 ort.setOrtsTyp(values.toString()); 378 ort.setOrtsTyp(values.toString());
301 } 379 }
380 if ("ort_zusatz".equals(key)) {
381 ort.setOrtszusatztext(values.toString());
382 }
302 return ort; 383 return ort;
303 } 384 }
304 385
386 public LZusatzWert addAttribute(
387 String lKey,
388 Object values,
389 LZusatzWert wert
390 ) {
391 String v = values.toString().substring(1);
392 int ndx = v.indexOf("\"");
393 String groesse = v.substring(0, ndx);
394 v = v.substring(ndx + 2);
395 ndx = v.indexOf(" ");
396 String w = v.substring(0, ndx);
397 v = v.substring(ndx + 2);
398 ndx = v.indexOf("\"");
399 String einheit = v.substring(0, ndx);
400 String fehler = v.substring(ndx + 2);
401 QueryBuilder<SProbenZusatz> builder =
402 new QueryBuilder<SProbenZusatz>(
403 sRepository.getEntityManager(), SProbenZusatz.class);
404 builder.and("zusatzwert", groesse);
405 Response response = sRepository.filter(builder.getQuery());
406 List<SProbenZusatz> list = (List<SProbenZusatz>)response.getData();
407 if (list == null || list.isEmpty()) {
408 this.errors.add(new ReportData(lKey, "zusatzwert", 673));
409 return null;
410 }
411 wert.getId().setPzsId(list.get(0).getPzsId());
412 wert.setPzsId(list.get(0).getPzsId());
413 wert.setMesswertPzs(Float.valueOf(w));
414 wert.setMessfehler(Float.valueOf(fehler));
415 return wert;
416 }
417
418 public LZusatzWert addAttributeS(
419 String lKey,
420 Object values,
421 LZusatzWert wert
422 ) {
423 String v = values.toString().substring(1);
424 int ndx = v.indexOf("\"");
425 String groesse = v.substring(0, ndx);
426 v = v.substring(ndx + 2);
427 ndx = v.indexOf(" ");
428 String w = v.substring(0, ndx);
429 v = v.substring(ndx + 2);
430 ndx = v.indexOf(" ");
431 String einheit = v.substring(0, ndx);
432 String fehler = v.substring(ndx + 2);
433 wert.getId().setPzsId(groesse);
434 wert.setPzsId(groesse);
435 wert.setMesswertPzs(Float.valueOf(w));
436 wert.setMessfehler(Float.valueOf(fehler));
437 return wert;
438 }
305 /** 439 /**
306 * @return the warnings 440 * @return the warnings
307 */ 441 */
308 public List<ReportData> getWarnings() { 442 public List<ReportData> getWarnings() {
309 return warnings; 443 return warnings;
315 public List<ReportData> getErrors() { 449 public List<ReportData> getErrors() {
316 return errors; 450 return errors;
317 } 451 }
318 452
319 public void reset() { 453 public void reset() {
320 errors.clear(); 454 errors = new ArrayList<ReportData>();
321 warnings.clear(); 455 warnings = new ArrayList<ReportData>();
322 } 456 }
323 } 457 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)