view gwt-client/src/main/java/org/dive4elements/river/client/server/CSVExportServiceImpl.java @ 9189:13a0c4be17ea

bom for csv export added
author gernotbelger
date Thu, 28 Jun 2018 14:11:12 +0200
parents 238fc722f87a
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 :

http://dive4elements.wald.intevation.org