Mercurial > dive4elements > river
view 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 source
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; } }