annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java @ 4740:fb135e1dfa35

Added 'type' attribute to <dc:variable/> element. If an optional 'type' attribute is given the result of the XPATH expression is interpreted as this type. Valid values are 'number', 'bool', 'node' and 'nodeset'. All other defaults to 'string' which also is the default if nor type is given.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 02 Jan 2013 15:31:53 +0100
parents 442fbb290fa8
children 7c8ce0a95a64
rev   line source
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.services;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2
4656
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
3 import de.intevation.artifacts.CallMeta;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
4 import de.intevation.artifacts.GlobalContext;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
5 import de.intevation.artifacts.common.ArtifactNamespaceContext;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
6 import de.intevation.artifacts.common.utils.FileTools;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
7 import de.intevation.artifacts.common.utils.XMLUtils;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
8 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
9 import de.intevation.flys.utils.FLYSUtils;
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
10
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11 import java.io.File;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 import java.io.FileOutputStream;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
13 import java.io.IOException;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
14
4656
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
15 import org.apache.commons.codec.binary.Base64;
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16 import org.apache.log4j.Logger;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import org.w3c.dom.Document;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import org.w3c.dom.Element;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 /**
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22 */
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23 public class FileUploadService extends FLYSService {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 /** The logger used in this service.*/
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26 private static Logger logger = Logger.getLogger(FileUploadService.class);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 /** XPath that points to the artifact uuid.*/
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 public static final String XPATH_ARTIFACT_UUID =
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 "/upload/artifact-uuid/text()";
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 /** XPath that points to the base64 encoded data.*/
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 public static final String XPATH_DATA = "/upload/data/text()";
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 public FileUploadService() {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39 @Override
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 protected Document doProcess(
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 Document data,
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
42 GlobalContext context,
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 CallMeta callMeta
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44 ) {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 logger.debug("FileUploadService.process");
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 String uuid = extractUuid(data);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 byte[] fileData = extractData(data);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 if (fileData != null) {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 try {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 String shapePath = FLYSUtils.getXPathString(
4656
442fbb290fa8 Introduce river mapfile generation (WARNING: Changes in config xml files required!).
Christian Lins <christian.lins@intevation.de>
parents: 3084
diff changeset
53 FLYSUtils.XPATH_FLOODMAP_SHAPEFILE_DIR);
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 File artifactDir = FileTools.getDirectory(shapePath, uuid);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 FileOutputStream fos =
2641
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
57 new FileOutputStream(
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
58 new File(artifactDir, "user-rgd.zip"));
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
59 try {
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
60 fos.write(fileData);
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
61 }
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
62 finally {
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
63 fos.close();
2bad13107161 Make file upload cross platform.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2640
diff changeset
64 }
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
65 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 catch (IOException ioe) {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 logger.warn(ioe, ioe);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 else {
2640
b484318ca9c6 Make it compilable again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2639
diff changeset
71 logger.debug("No data in uploaded xml.");
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 Document doc = XMLUtils.newDocument();
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 ElementCreator ec = new ElementCreator(doc, null, null);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 Element resp = ec.create("response");
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 doc.appendChild(resp);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 return doc;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
82
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83 protected String extractUuid(Document data) {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 return XMLUtils.xpathString(
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 data, XPATH_ARTIFACT_UUID, ArtifactNamespaceContext.INSTANCE);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 protected byte[] extractData(Document data) {
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 String b64Data = XMLUtils.xpathString(
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92
3084
d78b7c06e061 Fixed string comparision for identity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3083
diff changeset
93 if (b64Data != null && b64Data.length() > 0) {
2639
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 byte[] fileData = Base64.decodeBase64(b64Data);
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95 return fileData;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
96 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
97 return null;
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
98 }
a78dafdd8590 Issue 657.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
99 }
3083
4bd3d8bbb60c Added missing vim lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2646
diff changeset
100 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org