Mercurial > lada > lada-server
comparison src/main/java/de/intevation/lada/data/importer/LAFWriter.java @ 338:b6f770956cae
Added new writer module and report object for importer.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 28 Aug 2013 15:12:50 +0200 |
parents | |
children | 490dc50365e7 |
comparison
equal
deleted
inserted
replaced
337:cb47c33b119d | 338:b6f770956cae |
---|---|
1 package de.intevation.lada.data.importer; | |
2 | |
3 import java.math.BigInteger; | |
4 import java.util.ArrayList; | |
5 import java.util.HashMap; | |
6 import java.util.List; | |
7 import java.util.Map; | |
8 | |
9 import javax.ejb.TransactionAttribute; | |
10 import javax.ejb.TransactionAttributeType; | |
11 import javax.inject.Inject; | |
12 import javax.inject.Named; | |
13 import javax.persistence.EntityManager; | |
14 import javax.persistence.Query; | |
15 | |
16 import de.intevation.lada.auth.AuthenticationResponse; | |
17 import de.intevation.lada.data.QueryBuilder; | |
18 import de.intevation.lada.data.Repository; | |
19 import de.intevation.lada.model.LKommentarM; | |
20 import de.intevation.lada.model.LKommentarP; | |
21 import de.intevation.lada.model.LMessung; | |
22 import de.intevation.lada.model.LMesswert; | |
23 import de.intevation.lada.model.LOrt; | |
24 import de.intevation.lada.model.LProbe; | |
25 import de.intevation.lada.model.LProbeInfo; | |
26 import de.intevation.lada.rest.Response; | |
27 import de.intevation.lada.validation.ValidationException; | |
28 import de.intevation.lada.validation.Validator; | |
29 | |
30 @Named("lafwriter") | |
31 public class LAFWriter | |
32 implements Writer | |
33 { | |
34 @Inject | |
35 private EntityManager em; | |
36 | |
37 @Inject | |
38 @Named("lprobevalidator") | |
39 private Validator probeValidator; | |
40 @Inject | |
41 @Named("lmessungvalidator") | |
42 private Validator messungValidator; | |
43 @Inject | |
44 @Named("lortvalidator") | |
45 private Validator ortValidator; | |
46 @Inject | |
47 @Named("lmesswertvalidator") | |
48 private Validator messwertValidator; | |
49 | |
50 @Inject | |
51 @Named("lproberepository") | |
52 private Repository probeRepository; | |
53 @Inject | |
54 @Named("lmessungrepository") | |
55 private Repository messungRepository; | |
56 @Inject | |
57 @Named("lortrepository") | |
58 private Repository ortRepository; | |
59 @Inject | |
60 @Named("lkommentarRepository") | |
61 private Repository pKommentarRepository; | |
62 @Inject | |
63 @Named("lkommentarmrepository") | |
64 private Repository mKommentarRepository; | |
65 @Inject | |
66 @Named("lmesswertrepository") | |
67 private Repository messwertRepository; | |
68 | |
69 private List<ReportData> errors; | |
70 private List<ReportData> warnings; | |
71 | |
72 public LAFWriter() { | |
73 errors = new ArrayList<ReportData>(); | |
74 warnings = new ArrayList<ReportData>(); | |
75 } | |
76 | |
77 @Override | |
78 public boolean writeProbe(AuthenticationResponse auth, LProbe probe) { | |
79 if (!authorized(probe, auth)) { | |
80 errors.add(new ReportData("auth", "not authorized", 699)); | |
81 return false; | |
82 } | |
83 try { | |
84 Map<String, Integer> warn = | |
85 probeValidator.validate(probe, false); | |
86 if (warn != null) { | |
87 for (String key: warn.keySet()) { | |
88 warnings.add(new ReportData(key, "validation", warn.get(key))); | |
89 } | |
90 } | |
91 } | |
92 catch (ValidationException e) { | |
93 Map<String, Integer> err = e.getErrors(); | |
94 for(String key: err.keySet()) { | |
95 errors.add(new ReportData(key, "validation", err.get(key))); | |
96 } | |
97 Map<String, Integer> warn = e.getWarnings(); | |
98 if (warn != null) { | |
99 for (String key: warn.keySet()) { | |
100 warnings.add(new ReportData(key, "validation", warn.get(key))); | |
101 } | |
102 } | |
103 return false; | |
104 } | |
105 persist(probe); | |
106 return true; | |
107 } | |
108 | |
109 @Override | |
110 public boolean writeMessungen( | |
111 AuthenticationResponse auth, | |
112 List<LMessung> messungen | |
113 ) { | |
114 for(LMessung messung: messungen) { | |
115 try { | |
116 Map<String, Integer> warn = | |
117 messungValidator.validate(messung, false); | |
118 messungRepository.create(messung); | |
119 if (warn != null) { | |
120 for (String key : warn.keySet()) { | |
121 warnings.add( | |
122 new ReportData(key, "validation", warn.get(key))); | |
123 } | |
124 } | |
125 } | |
126 catch (ValidationException e) { | |
127 Map<String, Integer> err = e.getErrors(); | |
128 for(String key: err.keySet()) { | |
129 errors.add( | |
130 new ReportData(key, "validation", err.get(key))); | |
131 } | |
132 Map<String, Integer> warn = e.getWarnings(); | |
133 if (warn != null) { | |
134 for (String key: warn.keySet()) { | |
135 warnings.add( | |
136 new ReportData(key, "validation", warn.get(key))); | |
137 } | |
138 } | |
139 return false; | |
140 } | |
141 } | |
142 | |
143 return true; | |
144 } | |
145 | |
146 @Override | |
147 public boolean writeOrte(AuthenticationResponse auth, List<LOrt> orte) { | |
148 for(LOrt ort: orte) { | |
149 try { | |
150 Map<String, Integer> warn = | |
151 ortValidator.validate(ort, false); | |
152 ortRepository.create(ort); | |
153 if (warn != null) { | |
154 for (String key : warn.keySet()) { | |
155 warnings.add( | |
156 new ReportData(key, "validation", warn.get(key))); | |
157 } | |
158 } | |
159 } | |
160 catch (ValidationException e) { | |
161 Map<String, Integer> err = e.getErrors(); | |
162 for(String key: err.keySet()) { | |
163 errors.add( | |
164 new ReportData(key, "validation", err.get(key))); | |
165 } | |
166 Map<String, Integer> warn = e.getWarnings(); | |
167 if (warn != null) { | |
168 for (String key: warn.keySet()) { | |
169 warnings.add( | |
170 new ReportData(key, "validation", warn.get(key))); | |
171 } | |
172 } | |
173 return false; | |
174 } | |
175 } | |
176 return true; | |
177 } | |
178 | |
179 @Override | |
180 public boolean writeProbenKommentare( | |
181 AuthenticationResponse auth, | |
182 List<LKommentarP> kommentare | |
183 ) { | |
184 for(LKommentarP kommentar: kommentare) { | |
185 pKommentarRepository.create(kommentar); | |
186 } | |
187 return true; | |
188 } | |
189 | |
190 @Override | |
191 public boolean writeMessungKommentare( | |
192 AuthenticationResponse auth, | |
193 List<LKommentarM> kommentare | |
194 ) { | |
195 for(LKommentarM kommentar: kommentare) { | |
196 Query q = | |
197 em.createNativeQuery( | |
198 "select nextval('kommentar_m_id_seq')"); | |
199 BigInteger seqId = (BigInteger)q.getSingleResult(); | |
200 kommentar.getId().setKId(seqId.intValue()); | |
201 mKommentarRepository.create(kommentar); | |
202 } | |
203 return true; | |
204 } | |
205 | |
206 @Override | |
207 public boolean writeMesswerte( | |
208 AuthenticationResponse auth, | |
209 List<LMesswert> werte | |
210 ) { | |
211 for(LMesswert messwert: werte) { | |
212 try { | |
213 Map<String, Integer> warn = | |
214 messwertValidator.validate(messwert, false); | |
215 messwertRepository.create(messwert); | |
216 if (warn != null) { | |
217 for (String key : warn.keySet()) { | |
218 warnings.add( | |
219 new ReportData(key, "validation", warn.get(key))); | |
220 } | |
221 } | |
222 } | |
223 catch (ValidationException e) { | |
224 Map<String, Integer> err = e.getErrors(); | |
225 for(String key: err.keySet()) { | |
226 errors.add( | |
227 new ReportData(key, "validation", err.get(key))); | |
228 } | |
229 Map<String, Integer> warn = e.getWarnings(); | |
230 if (warn != null) { | |
231 for (String key: warn.keySet()) { | |
232 warnings.add( | |
233 new ReportData(key, "validation", warn.get(key))); | |
234 } | |
235 } | |
236 return false; | |
237 } | |
238 } | |
239 return false; | |
240 } | |
241 | |
242 @TransactionAttribute(TransactionAttributeType.REQUIRED) | |
243 private void persist(LProbe probe) { | |
244 String queryColumns = "insert into l_probe (probe_id, ba_id, test," + | |
245 " datenbasis_id, netzbetreiber_id, mst_id, probenart_id, umw_id"; | |
246 String queryParameter = " values (:probe_id, :ba_id, :test," + | |
247 " :datenbasis_id, :netzbetreiber_id, :mst_id, :probenart_id," + | |
248 " :umw_id"; | |
249 if (probe.getErzeugerId() != null) { | |
250 queryColumns += ", erzeuger_id"; | |
251 queryParameter += ", :erzeuger_id"; | |
252 } | |
253 if (probe.getHauptprobenNr() != null) { | |
254 queryColumns += ", hauptproben_nr"; | |
255 queryParameter += ", :hauptproben_nr"; | |
256 } | |
257 if (probe.getLetzteAenderung() != null) { | |
258 queryColumns += ", letzte_aenderung"; | |
259 queryParameter += ", :letzte_aenderung"; | |
260 } | |
261 if (probe.getMedia() != null) { | |
262 queryColumns += ", media"; | |
263 queryParameter += ", :media"; | |
264 } | |
265 if (probe.getMediaDesk() != null) { | |
266 queryColumns += ", media_desk"; | |
267 queryParameter += ", :media_desk"; | |
268 } | |
269 if (probe.getMittelungsdauer() != null) { | |
270 queryColumns += ", mittelungsdauer"; | |
271 queryParameter += ", :mittelungsdauer"; | |
272 } | |
273 if (probe.getMpKat() != null) { | |
274 queryColumns += ", mp_kat"; | |
275 queryParameter += ", mp_kat"; | |
276 } | |
277 if (probe.getMplId() != null) { | |
278 queryColumns += ", mpl_id"; | |
279 queryParameter += ", :mpl_id"; | |
280 } | |
281 if (probe.getMprId() != null) { | |
282 queryColumns += ", mpr_id"; | |
283 queryParameter += ", :mpr_id"; | |
284 } | |
285 if (probe.getProbeNehmerId() != null) { | |
286 queryColumns += ", probe_nehmer_id"; | |
287 queryParameter += ", :probe_nehmer_id"; | |
288 } | |
289 if (probe.getProbeentnahmeBeginn() != null) { | |
290 queryColumns += ", probeentnahme_beginn"; | |
291 queryParameter += ", :probeentnahme_beginn"; | |
292 } | |
293 if (probe.getProbeentnahmeEnde() != null) { | |
294 queryColumns += ", probeentnahme_ende"; | |
295 queryParameter += ", :probeentnahme_ende"; | |
296 } | |
297 if (probe.getSolldatumBeginn() != null) { | |
298 queryColumns += ", solldatum_beginn"; | |
299 queryParameter += ", :solldatum_beginn"; | |
300 } | |
301 if (probe.getSolldatumEnde() != null) { | |
302 queryColumns += ", solldatum_ende"; | |
303 queryParameter += ", :solldatum_ende"; | |
304 } | |
305 queryColumns += ") " + queryParameter + ")"; | |
306 | |
307 Query insert = em.createNativeQuery(queryColumns); | |
308 insert.setParameter("probe_id", probe.getProbeId()); | |
309 insert.setParameter("ba_id", probe.getBaId()); | |
310 insert.setParameter("datenbasis_id", probe.getDatenbasisId()); | |
311 insert.setParameter("mst_id", probe.getMstId()); | |
312 insert.setParameter("netzbetreiber_id", probe.getNetzbetreiberId()); | |
313 insert.setParameter("probenart_id", probe.getProbenartId()); | |
314 insert.setParameter("test", probe.isTest()); | |
315 insert.setParameter("umw_id", probe.getUmwId()); | |
316 if (probe.getErzeugerId() != null) { | |
317 insert.setParameter("erzeuger_id", probe.getErzeugerId()); | |
318 } | |
319 if (probe.getHauptprobenNr() != null) { | |
320 insert.setParameter("hauptproben_nr", probe.getHauptprobenNr()); | |
321 } | |
322 if (probe.getLetzteAenderung() != null) { | |
323 insert.setParameter("letzte_aenderung", probe.getLetzteAenderung()); | |
324 } | |
325 if (probe.getMedia() != null) { | |
326 insert.setParameter("media", probe.getMedia()); | |
327 } | |
328 if (probe.getMediaDesk() != null) { | |
329 insert.setParameter("media_desk", probe.getMediaDesk()); | |
330 } | |
331 if (probe.getMittelungsdauer() != null) { | |
332 insert.setParameter("mittelungsdauer", probe.getMittelungsdauer()); | |
333 } | |
334 if (probe.getMpKat() != null) { | |
335 insert.setParameter("mp_kat", probe.getMpKat()); | |
336 } | |
337 if (probe.getMplId() != null) { | |
338 insert.setParameter("mpl_id", probe.getMplId()); | |
339 } | |
340 if (probe.getMprId() != null) { | |
341 insert.setParameter("mpr_id", probe.getMprId()); | |
342 } | |
343 if (probe.getProbeNehmerId() != null) { | |
344 insert.setParameter("probe_nehmer_id", probe.getProbeNehmerId()); | |
345 } | |
346 if (probe.getProbeentnahmeBeginn() != null) { | |
347 insert.setParameter("probeentnahme_beginn", probe.getProbeentnahmeBeginn()); | |
348 } | |
349 if (probe.getProbeentnahmeEnde() != null) { | |
350 insert.setParameter("probeentnahme_ende", probe.getProbeentnahmeEnde()); | |
351 } | |
352 if (probe.getSolldatumBeginn() != null) { | |
353 insert.setParameter("solldatum_beginn", probe.getSolldatumBeginn()); | |
354 } | |
355 if (probe.getSolldatumEnde() != null) { | |
356 insert.setParameter("solldatum_ende", probe.getSolldatumEnde()); | |
357 } | |
358 int res = insert.executeUpdate(); | |
359 int i = res; | |
360 } | |
361 | |
362 private boolean authorized(LProbe probe, AuthenticationResponse auth) { | |
363 if (auth.getNetzbetreiber().contains(probe.getNetzbetreiberId()) && | |
364 auth.getMst().contains(probe.getMstId())) { | |
365 return true; | |
366 } | |
367 return false; | |
368 } | |
369 | |
370 | |
371 /** | |
372 * @return the errors | |
373 */ | |
374 public List<ReportData> getErrors() { | |
375 return errors; | |
376 } | |
377 | |
378 | |
379 /** | |
380 * @return the warnings | |
381 */ | |
382 public List<ReportData> getWarnings() { | |
383 return warnings; | |
384 } | |
385 } |