Mercurial > lada > lada-server
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 } |