Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java Wed Apr 25 07:45:00 2012 +0000 @@ -0,0 +1,100 @@ +package de.intevation.flys.artifacts.services; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.FileNotFoundException; + +import org.apache.log4j.Logger; + +import org.apache.commons.codec.binary.Base64; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.artifacts.common.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; +import de.intevation.artifacts.common.utils.FileTools; + +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; + +import de.intevation.flys.utils.FLYSUtils; + +/** + * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> + */ +public class FileUploadService extends FLYSService { + + /** The logger used in this service.*/ + private static Logger logger = Logger.getLogger(FileUploadService.class); + + /** XPath that points to the artifact uuid.*/ + public static final String XPATH_ARTIFACT_UUID = + "/upload/artifact-uuid/text()"; + + /** XPath that points to the base64 encoded data.*/ + public static final String XPATH_DATA = "/upload/data/text()"; + + public FileUploadService() { + } + + + @Override + protected Document doProcess( + Document data, + GlobalContext context, + CallMeta callMeta + ) { + logger.debug("FileUploadService.process"); + + String uuid = extractUuid(data); + + byte[] fileData = extractData(data); + if (fileData != null) { + try { + String shapePath = FLYSUtils.getXPathString( + FLYSUtils.XPATH_SHAPEFILE_DIR); + + File artifactDir = FileTools.getDirectory(shapePath, uuid); + FileOutputStream fos = + new FileOutputStream(artifactDir.getCanonicalPath() + + "/user-rgd.zip"); + fos.write(fileData); + fos.close(); + } + catch (IOException ioe) { + logger.warn(ioe, ioe); + } + } + else { + logger.debug("No data in uploaded xml.") + } + + Document doc = XMLUtils.newDocument(); + ElementCreator ec = new ElementCreator(doc, null, null); + Element resp = ec.create("response"); + doc.appendChild(resp); + + return doc; + } + + + protected String extractUuid(Document data) { + return XMLUtils.xpathString( + data, XPATH_ARTIFACT_UUID, ArtifactNamespaceContext.INSTANCE); + } + + + protected byte[] extractData(Document data) { + String b64Data = XMLUtils.xpathString( + data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); + + if (b64Data != null && b64Data != "") { + byte[] fileData = Base64.decodeBase64(b64Data); + return fileData; + } + return null; + } +}