Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java @ 2639:a78dafdd8590
Issue 657.
Added file upload service to load a user defined shapefile.
User the shapefile for wsplgen calculation and display a new layer.
flys-artifacts/trunk@4292 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Wed, 25 Apr 2012 07:45:00 +0000 |
parents | |
children | b484318ca9c6 |
comparison
equal
deleted
inserted
replaced
2638:ccad7a6ddaa4 | 2639:a78dafdd8590 |
---|---|
1 package de.intevation.flys.artifacts.services; | |
2 | |
3 import java.io.File; | |
4 import java.io.FileOutputStream; | |
5 import java.io.IOException; | |
6 import java.io.FileNotFoundException; | |
7 | |
8 import org.apache.log4j.Logger; | |
9 | |
10 import org.apache.commons.codec.binary.Base64; | |
11 | |
12 import org.w3c.dom.Document; | |
13 import org.w3c.dom.Element; | |
14 | |
15 import de.intevation.artifacts.common.ArtifactNamespaceContext; | |
16 import de.intevation.artifacts.common.utils.XMLUtils; | |
17 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; | |
18 import de.intevation.artifacts.common.utils.FileTools; | |
19 | |
20 import de.intevation.artifacts.CallMeta; | |
21 import de.intevation.artifacts.GlobalContext; | |
22 | |
23 import de.intevation.flys.utils.FLYSUtils; | |
24 | |
25 /** | |
26 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> | |
27 */ | |
28 public class FileUploadService extends FLYSService { | |
29 | |
30 /** The logger used in this service.*/ | |
31 private static Logger logger = Logger.getLogger(FileUploadService.class); | |
32 | |
33 /** XPath that points to the artifact uuid.*/ | |
34 public static final String XPATH_ARTIFACT_UUID = | |
35 "/upload/artifact-uuid/text()"; | |
36 | |
37 /** XPath that points to the base64 encoded data.*/ | |
38 public static final String XPATH_DATA = "/upload/data/text()"; | |
39 | |
40 public FileUploadService() { | |
41 } | |
42 | |
43 | |
44 @Override | |
45 protected Document doProcess( | |
46 Document data, | |
47 GlobalContext context, | |
48 CallMeta callMeta | |
49 ) { | |
50 logger.debug("FileUploadService.process"); | |
51 | |
52 String uuid = extractUuid(data); | |
53 | |
54 byte[] fileData = extractData(data); | |
55 if (fileData != null) { | |
56 try { | |
57 String shapePath = FLYSUtils.getXPathString( | |
58 FLYSUtils.XPATH_SHAPEFILE_DIR); | |
59 | |
60 File artifactDir = FileTools.getDirectory(shapePath, uuid); | |
61 FileOutputStream fos = | |
62 new FileOutputStream(artifactDir.getCanonicalPath() + | |
63 "/user-rgd.zip"); | |
64 fos.write(fileData); | |
65 fos.close(); | |
66 } | |
67 catch (IOException ioe) { | |
68 logger.warn(ioe, ioe); | |
69 } | |
70 } | |
71 else { | |
72 logger.debug("No data in uploaded xml.") | |
73 } | |
74 | |
75 Document doc = XMLUtils.newDocument(); | |
76 ElementCreator ec = new ElementCreator(doc, null, null); | |
77 Element resp = ec.create("response"); | |
78 doc.appendChild(resp); | |
79 | |
80 return doc; | |
81 } | |
82 | |
83 | |
84 protected String extractUuid(Document data) { | |
85 return XMLUtils.xpathString( | |
86 data, XPATH_ARTIFACT_UUID, ArtifactNamespaceContext.INSTANCE); | |
87 } | |
88 | |
89 | |
90 protected byte[] extractData(Document data) { | |
91 String b64Data = XMLUtils.xpathString( | |
92 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); | |
93 | |
94 if (b64Data != null && b64Data != "") { | |
95 byte[] fileData = Base64.decodeBase64(b64Data); | |
96 return fileData; | |
97 } | |
98 return null; | |
99 } | |
100 } |