[PATCH] bom for csv export added
Wald Commits
scm-commit at wald.intevation.org
Thu Jun 28 14:18:31 CEST 2018
# HG changeset patch
# User gernotbelger
# Date 1530187872 -7200
# Node ID 13a0c4be17eac1a8f495eba475c62297bf9ef20d
# Parent 3931e8741f53c9a878b61cc0c555686a7ccb5059
bom for csv export added
diff -r 3931e8741f53 -r 13a0c4be17ea artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Thu Jun 28 13:14:44 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Thu Jun 28 14:11:12 2018 +0200
@@ -305,6 +305,10 @@
final char quote = '"';
final char escape = '\\';
+ // Write BOM so excel is happy
+ final byte[] BOM = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
+ this.out.write(BOM);
+
final CSVWriter writer = new CSVWriter(new OutputStreamWriter(this.out, DEFAULT_CSV_CHARSET), DEFAULT_CSV_SEPARATOR, quote, escape, "\r\n");
writeCSVData(writer);
diff -r 3931e8741f53 -r 13a0c4be17ea artifacts/src/main/java/org/dive4elements/river/exports/ChartExportHelper.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartExportHelper.java Thu Jun 28 13:14:44 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartExportHelper.java Thu Jun 28 14:11:12 2018 +0200
@@ -316,9 +316,10 @@
log.debug("export chart as CSV");
try {
-// FIXME: decide: to BOM or not to BOM
-// final byte[] BOM = new byte[] {(byte)0xEF, (byte)0xBB, (byte)0xBF};
-// out.write(BOM);
+
+ // Write BOM so excel is happy
+ final byte[] BOM = new byte[] {(byte)0xEF, (byte)0xBB, (byte)0xBF};
+ out.write(BOM);
final CSVWriter writer = new CSVWriter(
new OutputStreamWriter(
diff -r 3931e8741f53 -r 13a0c4be17ea artifacts/src/main/resources/messages.properties
--- a/artifacts/src/main/resources/messages.properties Thu Jun 28 13:14:44 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties Thu Jun 28 14:11:12 2018 +0200
@@ -1036,8 +1036,8 @@
sinfo.export.csv.header.flowdepth.development = Flie\u00dftiefenentwicklung
sinfo.export.pdf.header.flowdepth.development = Flie\u00dftiefen-entwicklung
sinfo.export.csv.header.flowdepth.development.per.year = Flie\u00dftiefenent-wicklung pro Jahr
-sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
-sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
+sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
+sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
sinfo.export.csv.header.flowdepth.current = Flie\u00dftiefe h-aktuell
sinfo.export.csv.header.flowdepth.historical = Flie\u00dftiefe h-historisch
diff -r 3931e8741f53 -r 13a0c4be17ea artifacts/src/main/resources/messages_de.properties
--- a/artifacts/src/main/resources/messages_de.properties Thu Jun 28 13:14:44 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties Thu Jun 28 14:11:12 2018 +0200
@@ -1034,10 +1034,10 @@
sinfo.export.csv.header.channel.width = Sollbreite Fahrrinne
sinfo.export.csv.header.channel.depth = Solltiefe Fahrrinne
sinfo.export.pdf.header.flowdepth.development = Flie\u00dftiefen-entwicklung
-sinfo.export.csv.header.flowdepth.development = Flie\u00dftiefenentwicklung
+sinfo.export.csv.header.flowdepth.development = Flie\u00dftiefenentwicklung
sinfo.export.csv.header.flowdepth.development.per.year = Flie\u00dftiefenent-wicklung pro Jahr
-sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
-sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
+sinfo.export.csv.header.waterlevel.difference = \u0394WSPL
+sinfo.export.csv.header.mean_bed_height.difference = \u0394MSH
sinfo.export.csv.header.flowdepth.current = Flie\u00dftiefe h-aktuell
sinfo.export.csv.header.flowdepth.historical = Flie\u00dftiefe h-historisch
diff -r 3931e8741f53 -r 13a0c4be17ea gwt-client/src/main/java/org/dive4elements/river/client/server/CSVExportServiceImpl.java
--- 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 at 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");
+ final String url = getServletContext().getInitParameter("server-url");
- Document requestDoc = XMLUtils.newDocument();
+ final Document requestDoc = XMLUtils.newDocument();
- XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
- requestDoc,
- ArtifactNamespaceContext.NAMESPACE_URI,
- ArtifactNamespaceContext.NAMESPACE_PREFIX);
+ final XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(requestDoc, ArtifactNamespaceContext.NAMESPACE_URI,
+ ArtifactNamespaceContext.NAMESPACE_PREFIX);
- Element action = ec.create("action");
+ 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());
}
More information about the Dive4Elements-commits
mailing list