Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/server/CSVExportServiceImpl.java @ 9709:b74f817435fe
comment removed
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Wed, 27 Jan 2021 11:47:38 +0100 |
parents | 13a0c4be17ea |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.client.server; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.artifacts.common.ArtifactNamespaceContext; import org.dive4elements.artifacts.common.utils.XMLUtils; import org.dive4elements.artifacts.httpclient.http.HttpClient; import org.dive4elements.artifacts.httpclient.http.HttpClientImpl; import org.dive4elements.river.client.client.services.CSVExportService; import org.dive4elements.river.client.shared.exceptions.ServerException; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import au.com.bytecode.opencsv.CSVReader; /** * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> */ public class CSVExportServiceImpl extends RemoteServiceServlet implements CSVExportService { private static final Logger log = Logger.getLogger(CSVExportServiceImpl.class); public static final String ERROR_NO_EXPORT_FOUND = "error_no_export_found"; @Override public List<String[]> getCSV(final String locale, final String uuid, final String name) throws ServerException { log.info("CSVExportServiceImpl.getCSV"); final String url = getServletContext().getInitParameter("server-url"); final Document requestDoc = XMLUtils.newDocument(); final XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(requestDoc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); final Element action = ec.create("action"); ec.addAttr(action, "type", "csv", true); ec.addAttr(action, "name", name, true); requestDoc.appendChild(action); final HttpClient client = new HttpClientImpl(url, locale); try { final InputStream in = client.collectionOut(requestDoc, uuid, "export"); final Reader reader = new InputStreamReader(in, "UTF-8"); final CSVReader csvReader = new CSVReader(reader, ';'); final byte[] BOM = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; final char bomChar = new String(BOM, "UTF-8").charAt(0); final StringBuilder bomCharCheckBuilder = new StringBuilder().append(bomChar).append("#"); final List<String[]> lines = new ArrayList<String[]>(); String[] line = null; while ((line = csvReader.readNext()) != null) { if (line != null) { if (line.length > 0 && !line[0].startsWith("#") && !line[0].startsWith(bomCharCheckBuilder.toString())) { if (line[0].replace("'", "").length() > 0) { lines.add(line); } } } } return lines; } catch (final IOException ce) { log.error(ce.getLocalizedMessage()); } throw new ServerException(ERROR_NO_EXPORT_FOUND); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :