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 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)