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 :