Mercurial > lada > lada-server
comparison src/main/java/de/intevation/lada/data/importer/LAFImporter.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 | e0bbb54f2f7c |
comparison
equal
deleted
inserted
replaced
336:53417b61391c | 337:cb47c33b119d |
---|---|
14 import javax.inject.Named; | 14 import javax.inject.Named; |
15 import javax.persistence.EntityManager; | 15 import javax.persistence.EntityManager; |
16 import javax.persistence.Query; | 16 import javax.persistence.Query; |
17 | 17 |
18 import de.intevation.lada.auth.AuthenticationResponse; | 18 import de.intevation.lada.auth.AuthenticationResponse; |
19 import de.intevation.lada.data.QueryBuilder; | |
19 import de.intevation.lada.data.Repository; | 20 import de.intevation.lada.data.Repository; |
20 import de.intevation.lada.model.LKommentarM; | 21 import de.intevation.lada.model.LKommentarM; |
21 import de.intevation.lada.model.LKommentarP; | 22 import de.intevation.lada.model.LKommentarP; |
22 import de.intevation.lada.model.LMessung; | 23 import de.intevation.lada.model.LMessung; |
23 import de.intevation.lada.model.LMesswert; | 24 import de.intevation.lada.model.LMesswert; |
24 import de.intevation.lada.model.LOrt; | 25 import de.intevation.lada.model.LOrt; |
25 import de.intevation.lada.model.LProbe; | 26 import de.intevation.lada.model.LProbe; |
27 import de.intevation.lada.model.LProbeInfo; | |
26 import de.intevation.lada.rest.Response; | 28 import de.intevation.lada.rest.Response; |
27 import de.intevation.lada.validation.ValidationException; | 29 import de.intevation.lada.validation.ValidationException; |
28 import de.intevation.lada.validation.Validator; | 30 import de.intevation.lada.validation.Validator; |
29 | 31 |
30 @Named("lafimporter") | 32 @Named("lafimporter") |
97 public boolean importData(String content, AuthenticationResponse auth) { | 99 public boolean importData(String content, AuthenticationResponse auth) { |
98 this.warnings.clear(); | 100 this.warnings.clear(); |
99 this.errors.clear(); | 101 this.errors.clear(); |
100 this.parser.reset(); | 102 this.parser.reset(); |
101 try { | 103 try { |
102 boolean success = parser.parse(content); | 104 boolean success = parser.parse(auth, content); |
103 if (success) { | 105 if (!success) { |
104 List<LProbe> proben = parser.getProben(); | |
105 List<LMessung> messungen = parser.getMessungen(); | |
106 List<LOrt> orte = parser.getOrte(); | |
107 List<LKommentarP> pKommentare = parser.getProbeKommentare(); | |
108 List<LKommentarM> mKommentare = parser.getMessungKommentare(); | |
109 List<LMesswert> messwerte = parser.getMesswerte(); | |
110 writeProben(auth, proben); | |
111 writeMessungen(auth, messungen); | |
112 //writeOrte(auth, orte); | |
113 writePKommentare(auth, pKommentare); | |
114 writeMKommentare(auth, mKommentare); | |
115 writeMesswerte(auth, messwerte); | |
116 } | |
117 else { | |
118 List<ReportData> report = new ArrayList<ReportData>(); | 106 List<ReportData> report = new ArrayList<ReportData>(); |
119 report.add( new ReportData("parser", "no success", 660)); | 107 report.add(new ReportData("parser", "no success", 660)); |
120 errors.put("parser", report); | 108 errors.put("parser", report); |
109 warnings.put("parser", new ArrayList<ReportData>()); | |
121 return false; | 110 return false; |
122 } | 111 } |
123 } | 112 } |
124 catch (LAFParserException e) { | 113 catch (LAFParserException e) { |
125 List<ReportData> report = new ArrayList<ReportData>(); | 114 List<ReportData> report = new ArrayList<ReportData>(); |
126 report.add(new ReportData("parser", e.getMessage(), 660)); | 115 report.add(new ReportData("parser", e.getMessage(), 670)); |
127 errors.put("parser", report); | 116 errors.put("parser", report); |
117 warnings.put("parser", new ArrayList<ReportData>()); | |
128 return false; | 118 return false; |
129 } | 119 } |
130 Map<String, Map<String, List<ReportData>>> data = | |
131 new HashMap<String, Map<String, List<ReportData>>>(); | |
132 this.warnings.putAll(this.parser.getWarnings()); | 120 this.warnings.putAll(this.parser.getWarnings()); |
133 this.errors.putAll(this.parser.getErrors()); | 121 this.errors.putAll(this.parser.getErrors()); |
134 data.put("warnings", warnings); | |
135 data.put("errors", errors); | |
136 return true; | 122 return true; |
137 } | 123 } |
138 | |
139 private void writeMessungen( | |
140 AuthenticationResponse auth, | |
141 List<LMessung> messungen | |
142 ) { | |
143 for(LMessung messung: messungen) { | |
144 try { | |
145 | |
146 Map<String, Integer> warn = | |
147 messungValidator.validate(messung, false); | |
148 messungRepository.create(messung); | |
149 if (warn != null) { | |
150 for (String key : warn.keySet()) { | |
151 // warnings.put(messung.getProbeId(), | |
152 // new ReportData(key, "", warn.get(key))); | |
153 } | |
154 } | |
155 } | |
156 catch (ValidationException e) { | |
157 //errors.put(messung.getProbeId(), e.getErrors()); | |
158 //warnings.put( | |
159 // messung.getProbeId(), | |
160 // e.getWarnings()); | |
161 } | |
162 } | |
163 } | |
164 | |
165 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
166 private void writeMesswerte( | |
167 AuthenticationResponse auth, | |
168 List<LMesswert> messwerte | |
169 ) { | |
170 for(LMesswert messwert: messwerte) { | |
171 try { | |
172 Map<String, Integer> warn = | |
173 messwertValidator.validate(messwert, false); | |
174 Response r = messwertRepository.create(messwert); | |
175 if (warn != null) { | |
176 // warnings.put( | |
177 // messwert.getProbeId(), | |
178 // warn); | |
179 } | |
180 } | |
181 catch (ValidationException e) { | |
182 //errors.put(messwert.getProbeId(), e.getErrors()); | |
183 //warnings.put( | |
184 // messwert.getProbeId(), | |
185 // e.getWarnings()); | |
186 } | |
187 } | |
188 } | |
189 | |
190 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
191 private void writePKommentare( | |
192 AuthenticationResponse auth, | |
193 List<LKommentarP> kommentare | |
194 ) { | |
195 for(LKommentarP kommentar: kommentare) { | |
196 try { | |
197 pKommentarRepository.create(kommentar); | |
198 } | |
199 catch(Exception e) { | |
200 Map<String, Integer> err = new HashMap<String, Integer>(); | |
201 err.put( | |
202 kommentar.getProbeId() + " - " + | |
203 kommentar.getkId(), 661); | |
204 //errors.put("lkommentarp", err); | |
205 } | |
206 } | |
207 } | |
208 | |
209 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
210 private void writeMKommentare( | |
211 AuthenticationResponse auth, | |
212 List<LKommentarM> kommentare | |
213 ) { | |
214 for(LKommentarM kommentar: kommentare) { | |
215 Query q = | |
216 em.createNativeQuery( | |
217 "select nextval('kommentar_m_id_seq')"); | |
218 BigInteger seqId = (BigInteger)q.getSingleResult(); | |
219 kommentar.getId().setKId(seqId.intValue()); | |
220 mKommentarRepository.create(kommentar); | |
221 } | |
222 } | |
223 | |
224 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
225 private void writeOrte( | |
226 AuthenticationResponse auth, | |
227 List<LOrt> orte | |
228 ) { | |
229 for(LOrt ort: orte) { | |
230 try { | |
231 Map<String, Integer> warn = | |
232 ortValidator.validate(ort, false); | |
233 ortRepository.create(ort); | |
234 if (warn != null) { | |
235 // warnings.put(String.valueOf(ort.getOrtId()), warn); | |
236 } | |
237 } | |
238 catch (ValidationException e) { | |
239 //errors.put(String.valueOf(ort.getOrtId()), e.getErrors()); | |
240 //warnings.put( | |
241 // String.valueOf(ort.getOrtId()), | |
242 // e.getWarnings()); | |
243 } | |
244 } | |
245 } | |
246 | |
247 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
248 private void writeProben(AuthenticationResponse auth, List<LProbe> proben) { | |
249 for (LProbe probe: proben) { | |
250 if (!authorized(probe, auth)) { | |
251 Map<String, Integer> err = new HashMap<String, Integer>(); | |
252 err.put("not authorized", 699); | |
253 //errors.put(probe.getProbeId(), err); | |
254 continue; | |
255 } | |
256 try { | |
257 Map<String, Integer> warn = | |
258 probeValidator.validate(probe, false); | |
259 if (warn != null) { | |
260 // warnings.put(probe.getProbeId(), warn); | |
261 } | |
262 } | |
263 catch (ValidationException e) { | |
264 //errors.put(probe.getProbeId(), e.getErrors()); | |
265 //warnings.put(probe.getProbeId(), e.getWarnings()); | |
266 continue; | |
267 } | |
268 persist(probe); | |
269 } | |
270 } | |
271 | |
272 private boolean authorized(LProbe probe, AuthenticationResponse auth) { | |
273 if (auth.getNetzbetreiber().contains(probe.getNetzbetreiberId()) && | |
274 auth.getMst().contains(probe.getMstId())) { | |
275 return true; | |
276 } | |
277 return false; | |
278 } | |
279 | |
280 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
281 private void persist(LProbe probe) { | |
282 String queryColumns = "insert into l_probe (probe_id, ba_id, test," + | |
283 " datenbasis_id, netzbetreiber_id, mst_id, probenart_id, umw_id"; | |
284 String queryParameter = " values (:probe_id, :ba_id, :test," + | |
285 " :datenbasis_id, :netzbetreiber_id, :mst_id, :probenart_id," + | |
286 " :umw_id"; | |
287 if (probe.getErzeugerId() != null) { | |
288 queryColumns += ", erzeuger_id"; | |
289 queryParameter += ", :erzeuger_id"; | |
290 } | |
291 if (probe.getHauptprobenNr() != null) { | |
292 queryColumns += ", hauptproben_nr"; | |
293 queryParameter += ", :hauptproben_nr"; | |
294 } | |
295 if (probe.getLetzteAenderung() != null) { | |
296 queryColumns += ", letzte_aenderung"; | |
297 queryParameter += ", :letzte_aenderung"; | |
298 } | |
299 if (probe.getMedia() != null) { | |
300 queryColumns += ", media"; | |
301 queryParameter += ", :media"; | |
302 } | |
303 if (probe.getMediaDesk() != null) { | |
304 queryColumns += ", media_desk"; | |
305 queryParameter += ", :media_desk"; | |
306 } | |
307 if (probe.getMittelungsdauer() != null) { | |
308 queryColumns += ", mittelungsdauer"; | |
309 queryParameter += ", :mittelungsdauer"; | |
310 } | |
311 if (probe.getMpKat() != null) { | |
312 queryColumns += ", mp_kat"; | |
313 queryParameter += ", mp_kat"; | |
314 } | |
315 if (probe.getMplId() != null) { | |
316 queryColumns += ", mpl_id"; | |
317 queryParameter += ", :mpl_id"; | |
318 } | |
319 if (probe.getMprId() != null) { | |
320 queryColumns += ", mpr_id"; | |
321 queryParameter += ", :mpr_id"; | |
322 } | |
323 if (probe.getProbeNehmerId() != null) { | |
324 queryColumns += ", probe_nehmer_id"; | |
325 queryParameter += ", :probe_nehmer_id"; | |
326 } | |
327 if (probe.getProbeentnahmeBeginn() != null) { | |
328 queryColumns += ", probeentnahme_beginn"; | |
329 queryParameter += ", :probeentnahme_beginn"; | |
330 } | |
331 if (probe.getProbeentnahmeEnde() != null) { | |
332 queryColumns += ", probeentnahme_ende"; | |
333 queryParameter += ", :probeentnahme_ende"; | |
334 } | |
335 if (probe.getSolldatumBeginn() != null) { | |
336 queryColumns += ", solldatum_beginn"; | |
337 queryParameter += ", :solldatum_beginn"; | |
338 } | |
339 if (probe.getSolldatumEnde() != null) { | |
340 queryColumns += ", solldatum_ende"; | |
341 queryParameter += ", :solldatum_ende"; | |
342 } | |
343 queryColumns += ") " + queryParameter + ")"; | |
344 | |
345 Query insert = em.createNativeQuery(queryColumns); | |
346 insert.setParameter("probe_id", probe.getProbeId()); | |
347 insert.setParameter("ba_id", probe.getBaId()); | |
348 insert.setParameter("datenbasis_id", probe.getDatenbasisId()); | |
349 insert.setParameter("mst_id", probe.getMstId()); | |
350 insert.setParameter("netzbetreiber_id", probe.getNetzbetreiberId()); | |
351 insert.setParameter("probenart_id", probe.getProbenartId()); | |
352 insert.setParameter("test", probe.isTest()); | |
353 insert.setParameter("umw_id", probe.getUmwId()); | |
354 if (probe.getErzeugerId() != null) { | |
355 insert.setParameter("erzeuger_id", probe.getErzeugerId()); | |
356 } | |
357 if (probe.getHauptprobenNr() != null) { | |
358 insert.setParameter("hauptproben_nr", probe.getHauptprobenNr()); | |
359 } | |
360 if (probe.getLetzteAenderung() != null) { | |
361 insert.setParameter("letzte_aenderung", probe.getLetzteAenderung()); | |
362 } | |
363 if (probe.getMedia() != null) { | |
364 insert.setParameter("media", probe.getMedia()); | |
365 } | |
366 if (probe.getMediaDesk() != null) { | |
367 insert.setParameter("media_desk", probe.getMediaDesk()); | |
368 } | |
369 if (probe.getMittelungsdauer() != null) { | |
370 insert.setParameter("mittelungsdauer", probe.getMittelungsdauer()); | |
371 } | |
372 if (probe.getMpKat() != null) { | |
373 insert.setParameter("mp_kat", probe.getMpKat()); | |
374 } | |
375 if (probe.getMplId() != null) { | |
376 insert.setParameter("mpl_id", probe.getMplId()); | |
377 } | |
378 if (probe.getMprId() != null) { | |
379 insert.setParameter("mpr_id", probe.getMprId()); | |
380 } | |
381 if (probe.getProbeNehmerId() != null) { | |
382 insert.setParameter("probe_nehmer_id", probe.getProbeNehmerId()); | |
383 } | |
384 if (probe.getProbeentnahmeBeginn() != null) { | |
385 insert.setParameter("probeentnahme_beginn", probe.getProbeentnahmeBeginn()); | |
386 } | |
387 if (probe.getProbeentnahmeEnde() != null) { | |
388 insert.setParameter("probeentnahme_ende", probe.getProbeentnahmeEnde()); | |
389 } | |
390 if (probe.getSolldatumBeginn() != null) { | |
391 insert.setParameter("solldatum_beginn", probe.getSolldatumBeginn()); | |
392 } | |
393 if (probe.getSolldatumEnde() != null) { | |
394 insert.setParameter("solldatum_ende", probe.getSolldatumEnde()); | |
395 } | |
396 int res = insert.executeUpdate(); | |
397 int i = res; | |
398 } | |
399 } | 124 } |