Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java @ 5135:cad911029c9d
Merged with 'dc-km-filter-rr' branch.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Thu, 28 Feb 2013 12:47:24 +0100 |
parents | 7c8ce0a95a64 |
children | a9243df307b1 |
line wrap: on
line source
package de.intevation.flys.artifacts.services; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.GlobalContext; import de.intevation.artifacts.common.ArtifactNamespaceContext; import de.intevation.artifacts.common.utils.FileTools; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; import de.intevation.flys.utils.FLYSUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Service that receives XML-packed Shapefile bundles from the client. * @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"); Document doc = XMLUtils.newDocument(); ElementCreator ec = new ElementCreator(doc, null, null); Element resp = ec.create("response"); Element status = ec.create("status"); resp.appendChild(status); doc.appendChild(resp); String uuid = extractUuid(data); byte[] fileData = extractData(data); if (fileData != null) { try { String shapePath = FLYSUtils.getXPathString( FLYSUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); File artifactDir = FileTools.getDirectory(shapePath, uuid); FileOutputStream fos = new FileOutputStream( new File(artifactDir, "user-rgd.zip")); try { fos.write(fileData); // Write operation successful status.setTextContent("Upload erfolgreich!"); // TODO: i18n } finally { fos.close(); } } catch (IOException ioe) { logger.warn(ioe, ioe); status.setTextContent("Upload fehlgeschlagen!"); } } else { logger.debug("No data in uploaded xml."); status.setTextContent("Upload fehlgeschlagen!"); } return doc; } /** * Extracts the UUID from the XML document. * @param data * @return */ protected String extractUuid(Document data) { return XMLUtils.xpathString( data, XPATH_ARTIFACT_UUID, ArtifactNamespaceContext.INSTANCE); } /** * Extracts the base64 encoded ZIP file from the XML document. * @param data * @return */ 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 :