annotate src/main/java/de/intevation/lada/rest/LAFImportService.java @ 331:5d11428e6a09

Made the importer a little more robust and introduced a better warning/error reporting.
author Raimund Renkert <rrenkert@intevation.de>
date Tue, 27 Aug 2013 15:28:21 +0200
parents 30883ab746a5
children cb47c33b119d
rev   line source
325
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package de.intevation.lada.rest;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import java.io.IOException;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 import java.io.InputStream;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import java.util.HashMap;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import java.util.LinkedList;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import java.util.List;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import java.util.Map;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import javax.enterprise.context.RequestScoped;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import javax.inject.Inject;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import javax.inject.Named;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import javax.ws.rs.Consumes;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import javax.ws.rs.POST;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import javax.ws.rs.Path;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 import javax.ws.rs.Produces;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 import javax.ws.rs.core.Context;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 import javax.ws.rs.core.HttpHeaders;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 import javax.ws.rs.core.MultivaluedMap;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 import org.apache.commons.io.IOUtils;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 import org.jboss.resteasy.plugins.providers.multipart.InputPart;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 import de.intevation.lada.auth.Authentication;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 import de.intevation.lada.auth.AuthenticationException;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 import de.intevation.lada.auth.AuthenticationResponse;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 import de.intevation.lada.data.importer.Importer;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 /**
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 * This class produces a RESTful service to import a LAF file.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 *
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 */
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 @Path("/import")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 @RequestScoped
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 public class LAFImportService
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 @Inject
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 @Named("ldapauth")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 private Authentication authentication;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 @Inject
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 @Named("lafimporter")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 private Importer importer;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 /**
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 * Import LProbe object.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 * See
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 * http://howtodoinjava.com/2013/05/21/jax-rs-resteasy-file-upload-httpclient-example/
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 * for more details on the implementation.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 *
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 * @param input MulitpartFormDataInput containing the file to upload.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 * @param header The HTTP header containing authorization information.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 * @return Response object.
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 */
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 @POST
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 @Path("/laf")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 @Produces("application/json")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 @Consumes("multipart/form-data")
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 public Response upload(MultipartFormDataInput input, @Context HttpHeaders header) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 try {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 AuthenticationResponse auth = authentication.authorizedGroups(header);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 if (!authentication.isAuthorizedUser(header)) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 return new Response(false, 698, null);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 String name = "";
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 String content = "";
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 Map<String, List<InputPart>> data = input.getFormDataMap();
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 try {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 List<InputPart> parts = input.getParts();
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 for (InputPart part: parts) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 InputStream inStream = part.getBody(InputStream.class, null);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 MultivaluedMap<String, String> headers = part.getHeaders();
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 String[] cDisp = headers.getFirst("content-disposition").split(";");
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 for (String fName : cDisp) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 if (fName.trim().startsWith("filename")) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 String[] fileName = fName.split("=");
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 name = fileName[1].trim().replace("\"", "");
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 content = IOUtils.toString(inStream);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 catch (IOException e) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87 return new Response(false, 603, null);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 boolean success = importer.importData(content, auth);
331
5d11428e6a09 Made the importer a little more robust and introduced a better warning/error reporting.
Raimund Renkert <rrenkert@intevation.de>
parents: 325
diff changeset
91 Map<String, Object> respData = new HashMap<String,Object>();
5d11428e6a09 Made the importer a little more robust and introduced a better warning/error reporting.
Raimund Renkert <rrenkert@intevation.de>
parents: 325
diff changeset
92 respData.put("errors", importer.getErrors());
5d11428e6a09 Made the importer a little more robust and introduced a better warning/error reporting.
Raimund Renkert <rrenkert@intevation.de>
parents: 325
diff changeset
93 respData.put("warnings", importer.getWarnings());
5d11428e6a09 Made the importer a little more robust and introduced a better warning/error reporting.
Raimund Renkert <rrenkert@intevation.de>
parents: 325
diff changeset
94 respData.put("filename", name);
325
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 int code = 200;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
96 if (!success) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
97 code = 660;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
99 Response response = new Response(success, code, respData);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 return response;
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
101 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
102 catch(AuthenticationException ae) {
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
103 return new Response(false, 699, null);
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
105 }
30883ab746a5 Extracted LAF import service to its own service class.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
106 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)