teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.server; raimund@2494: teichmann@5835: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5835: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; teichmann@5835: import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException; teichmann@5835: import org.dive4elements.artifacts.httpclient.http.HttpClient; teichmann@5835: import org.dive4elements.artifacts.httpclient.http.HttpClientImpl; sascha@2497: sascha@2497: import java.io.ByteArrayOutputStream; christian@5008: import java.io.IOException; sascha@2497: import java.io.InputStream; christian@5008: import java.io.PrintWriter; raimund@2494: raimund@2494: import javax.servlet.http.HttpServlet; raimund@2494: import javax.servlet.http.HttpServletRequest; raimund@2494: import javax.servlet.http.HttpServletResponse; raimund@2494: sascha@2497: import org.apache.commons.codec.binary.Base64; sascha@2497: import org.apache.commons.fileupload.FileItemIterator; sascha@2497: import org.apache.commons.fileupload.FileItemStream; sascha@2497: import org.apache.commons.fileupload.servlet.ServletFileUpload; sascha@2497: import org.apache.log4j.Logger; sascha@2497: import org.w3c.dom.Document; sascha@2497: import org.w3c.dom.Element; raimund@2494: raimund@2494: public class FileUploadServiceImpl raimund@2494: extends HttpServlet raimund@2494: { teichmann@8203: private static final Logger log = Logger.getLogger(FileUploadServiceImpl.class); raimund@2494: raimund@2494: @Override raimund@2494: protected void doPost(HttpServletRequest req, HttpServletResponse resp) { teichmann@8203: log.debug("handling post request."); raimund@2494: raimund@2494: String url = getServletContext().getInitParameter("server-url"); raimund@2494: christian@4632: Document request = createFileXML(req); raimund@2494: raimund@2494: if (request == null) { raimund@2494: return; raimund@2494: } raimund@2494: HttpClient client = new HttpClientImpl(url); raimund@2494: raimund@2494: try { raimund@2494: Document result = client.callService(url, "fileupload", request); raimund@2494: christian@6105: resp.setContentType("text/html"); christian@6117: christian@5008: PrintWriter respWriter = resp.getWriter(); christian@6105: respWriter.write("
"); christian@5008: raimund@2494: if (result == null) { teichmann@8203: log.warn("FileUpload service returned no result."); christian@5008: respWriter.write("FileUpload service returned no result"); raimund@2494: } christian@5008: else { christian@5008: String status = result.getElementsByTagName("status") christian@5008: .item(0).getTextContent(); christian@5008: respWriter.write(status); christian@5008: } christian@5008: christian@5008: respWriter.write("
"); christian@5008: respWriter.flush(); raimund@2494: raimund@2494: return; raimund@2494: } raimund@2494: catch (ConnectionException ce) { teichmann@8203: log.error(ce, ce); raimund@2494: } christian@5008: catch (IOException e) { teichmann@8203: log.error(e, e); christian@5008: } raimund@2494: } raimund@2494: raimund@2494: raimund@2494: protected Document createFileXML(HttpServletRequest req) { christian@6117: ServletFileUpload upload = new ServletFileUpload(); raimund@2494: raimund@2494: try{ raimund@2494: FileItemIterator iter = upload.getItemIterator(req); raimund@2494: raimund@2494: while (iter.hasNext()) { raimund@2494: FileItemStream item = iter.next(); raimund@2494: InputStream stream = item.openStream(); raimund@2494: raimund@2494: // Process the input stream raimund@2494: ByteArrayOutputStream out = new ByteArrayOutputStream(); christian@6117: int len, cnt = 0; raimund@2494: byte[] buffer = new byte[stream.available()]; raimund@2494: while ((len = stream.read(buffer, 0, buffer.length)) != -1) { raimund@2494: out.write(buffer, 0, len); christian@6117: cnt += len; raimund@2494: } raimund@2494: christian@6118: buffer = Base64.encodeBase64(out.toByteArray()); christian@2954: String b64File = new String(buffer); teichmann@8203: log.debug("FileUploadServiceImpl.createFileXML(): " + cnt christian@6118: + "/" + b64File.length() christian@6118: + " bytes (orig/base64) file to be uploaded"); raimund@2494: raimund@2494: Document fileDoc = XMLUtils.newDocument(); raimund@2494: raimund@2494: ElementCreator ec = new ElementCreator(fileDoc, null, null); raimund@2494: Element root = ec.create("upload"); raimund@2494: Element id = ec.create("artifact-uuid"); raimund@2494: id.setTextContent(req.getParameter("uuid")); raimund@2494: raimund@2494: Element data = ec.create("data"); raimund@2494: data.setTextContent(b64File); raimund@2494: raimund@2494: fileDoc.appendChild(root); raimund@2494: root.appendChild(id); raimund@2494: root.appendChild(data); raimund@2494: raimund@2494: return fileDoc; raimund@2494: } raimund@2494: } raimund@2494: catch(Exception e){ teichmann@8203: log.debug("Failed to create xml document containing the file."); teichmann@8203: log.debug(e, e); raimund@2494: } raimund@2494: return null; raimund@2494: } raimund@2494: }