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@256: gernotbelger@9189: import java.io.IOException; gernotbelger@9189: import java.io.InputStream; gernotbelger@9189: import java.io.InputStreamReader; gernotbelger@9189: import java.io.Reader; ingo@1477: import java.util.ArrayList; raimund@256: import java.util.List; raimund@256: gernotbelger@9189: import org.apache.log4j.Logger; gernotbelger@9189: import org.dive4elements.artifacts.common.ArtifactNamespaceContext; gernotbelger@9189: import org.dive4elements.artifacts.common.utils.XMLUtils; gernotbelger@9189: import org.dive4elements.artifacts.httpclient.http.HttpClient; gernotbelger@9189: import org.dive4elements.artifacts.httpclient.http.HttpClientImpl; gernotbelger@9189: import org.dive4elements.river.client.client.services.CSVExportService; gernotbelger@9189: import org.dive4elements.river.client.shared.exceptions.ServerException; raimund@256: import org.w3c.dom.Document; raimund@256: import org.w3c.dom.Element; raimund@256: raimund@256: import com.google.gwt.user.server.rpc.RemoteServiceServlet; raimund@256: raimund@256: import au.com.bytecode.opencsv.CSVReader; raimund@256: raimund@256: /** raimund@263: * @author Raimund Renkert raimund@256: */ gernotbelger@9189: public class CSVExportServiceImpl extends RemoteServiceServlet implements CSVExportService { gernotbelger@9189: private static final Logger log = Logger.getLogger(CSVExportServiceImpl.class); ingo@1367: gernotbelger@9189: public static final String ERROR_NO_EXPORT_FOUND = "error_no_export_found"; raimund@256: gernotbelger@9189: @Override gernotbelger@9189: public List getCSV(final String locale, final String uuid, final String name) throws ServerException { teichmann@8203: log.info("CSVExportServiceImpl.getCSV"); raimund@256: gernotbelger@9189: final String url = getServletContext().getInitParameter("server-url"); raimund@256: gernotbelger@9189: final Document requestDoc = XMLUtils.newDocument(); raimund@256: gernotbelger@9189: final XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(requestDoc, ArtifactNamespaceContext.NAMESPACE_URI, gernotbelger@9189: ArtifactNamespaceContext.NAMESPACE_PREFIX); gernotbelger@9189: gernotbelger@9189: final Element action = ec.create("action"); ingo@258: ec.addAttr(action, "type", "csv", true); ingo@258: ec.addAttr(action, "name", name, true); raimund@256: raimund@256: requestDoc.appendChild(action); raimund@256: gernotbelger@9189: final HttpClient client = new HttpClientImpl(url, locale); ingo@1477: raimund@256: try { gernotbelger@9189: final InputStream in = client.collectionOut(requestDoc, uuid, "export"); gernotbelger@9189: final Reader reader = new InputStreamReader(in, "UTF-8"); gernotbelger@9189: final CSVReader csvReader = new CSVReader(reader, ';'); ingo@258: gernotbelger@9189: final byte[] BOM = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; gernotbelger@9189: final char bomChar = new String(BOM, "UTF-8").charAt(0); gernotbelger@9189: final StringBuilder bomCharCheckBuilder = new StringBuilder().append(bomChar).append("#"); ingo@1477: gernotbelger@9189: final List lines = new ArrayList(); gernotbelger@9189: String[] line = null; ingo@1477: while ((line = csvReader.readNext()) != null) { ingo@1480: if (line != null) { gernotbelger@9189: if (line.length > 0 && !line[0].startsWith("#") && !line[0].startsWith(bomCharCheckBuilder.toString())) { ingo@1480: if (line[0].replace("'", "").length() > 0) { ingo@1480: lines.add(line); ingo@1480: } ingo@1477: } ingo@1477: } ingo@1477: } ingo@1477: ingo@1477: return lines; raimund@256: } gernotbelger@9189: catch (final IOException ce) { teichmann@8203: log.error(ce.getLocalizedMessage()); raimund@256: } raimund@256: raimund@256: throw new ServerException(ERROR_NO_EXPORT_FOUND); raimund@256: } raimund@256: } raimund@256: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :