Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java @ 4031:e4e345d81a65
issue889/2
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 04 Oct 2012 14:54:44 +0200 |
parents | d78b7c06e061 |
children | 442fbb290fa8 |
line wrap: on
line source
package de.intevation.flys.artifacts.services; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; 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( new File(artifactDir, "user-rgd.zip")); try { fos.write(fileData); } finally { 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.length() > 0) { byte[] fileData = Base64.decodeBase64(b64Data); return fileData; } return null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :