diff 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 diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/server/CSVExportServiceImpl.java	Thu Jun 28 13:14:44 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/server/CSVExportServiceImpl.java	Thu Jun 28 14:11:12 2018 +0200
@@ -8,83 +8,68 @@
 
 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 java.io.Reader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-
+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 org.apache.log4j.Logger;
-
 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 import au.com.bytecode.opencsv.CSVReader;
 
-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.shared.exceptions.ServerException;
-import org.dive4elements.river.client.client.services.CSVExportService;
-
-
 /**
  * @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 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";
+    public static final String ERROR_NO_EXPORT_FOUND = "error_no_export_found";
 
-    public List<String[]> getCSV(
-        String locale,
-        String uuid,
-        String name)
-    throws ServerException
-    {
+    @Override
+    public List<String[]> getCSV(final String locale, final String uuid, final String name) throws ServerException {
         log.info("CSVExportServiceImpl.getCSV");
 
-        String url  = getServletContext().getInitParameter("server-url");
-
-        Document requestDoc = XMLUtils.newDocument();
+        final String url = getServletContext().getInitParameter("server-url");
 
-        XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
-            requestDoc,
-            ArtifactNamespaceContext.NAMESPACE_URI,
-            ArtifactNamespaceContext.NAMESPACE_PREFIX);
+        final Document requestDoc = XMLUtils.newDocument();
 
-        Element action = ec.create("action");
+        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);
 
-        HttpClient client = new HttpClientImpl(url, locale);
+        final HttpClient client = new HttpClientImpl(url, locale);
 
         try {
-            InputStream in = client.collectionOut(requestDoc, uuid, "export");
-            Reader reader       = new InputStreamReader (in, "UTF-8");
-            CSVReader csvReader = new CSVReader (reader, ';');
+            final InputStream in = client.collectionOut(requestDoc, uuid, "export");
+            final Reader reader = new InputStreamReader(in, "UTF-8");
+            final CSVReader csvReader = new CSVReader(reader, ';');
 
-            List<String[]> lines = new ArrayList<String[]>();
-            String[]       line  = null;
+            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[0].startsWith("#") && line.length > 0) {
+                    if (line.length > 0 && !line[0].startsWith("#") && !line[0].startsWith(bomCharCheckBuilder.toString())) {
                         if (line[0].replace("'", "").length() > 0) {
                             lines.add(line);
                         }
@@ -94,7 +79,7 @@
 
             return lines;
         }
-        catch (IOException ce) {
+        catch (final IOException ce) {
             log.error(ce.getLocalizedMessage());
         }
 

http://dive4elements.wald.intevation.org