From db52e4d66d60184d53a27ba4d6772461daacc03d Mon Sep 17 00:00:00 2001 From: tknall Date: Fri, 22 Mar 2013 08:57:51 +0000 Subject: Maintenance update (bugfixes, new features, cleanup...) Refer to /dok/RELEASE_NOTES-3.3.txt for further information. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/pdf-as/trunk@931 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../main/java/at/gv/egiz/pdfas/utils/CsvUtils.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java') diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java new file mode 100644 index 0000000..a78da93 --- /dev/null +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java @@ -0,0 +1,82 @@ +/** + * Copyright 2006 by Know-Center, Graz, Austria + * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a + * joint initiative of the Federal Chancellery Austria and Graz University of + * Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egiz.pdfas.utils; + +import org.apache.commons.lang.StringUtils; + +/** + * Methods in order to create valid delimiter separated data, where the semicolon as used as delimiter, also known as + * the German version of CSV. + * + * @author Datentechnik Innovation GmbH + * @see RFC 4180 + */ +public class CsvUtils { + + /** + * The delimiter char used instead of COMMA. + */ + public static final char DEFAULT_DELIMITER = ';'; + + private static final char QUOTE_CHAR = '"'; + private static final char LF_CHAR = '\n'; + private static final char CR_CHAR = '\r'; + + private static final char[] SHOULD_BE_QUOTED = { LF_CHAR, CR_CHAR, DEFAULT_DELIMITER, QUOTE_CHAR }; + private static final String CSV_QUOTE = String.valueOf(QUOTE_CHAR); + + /** + * Returns an DSV escapted representation of the given object using the default delimiter character ( + * {@link #DEFAULT_DELIMITER}). + * + * @param obj + * The object. + * @return An escapted representation of the given object. + */ + public static String escapeCsvValue(Object obj) { + // null value should be printed as empty column + if (obj == null) { + return ""; + } + // get String representation of object + String asString = String.valueOf(obj); + // do we need to escape anything? + if (StringUtils.containsNone(asString, SHOULD_BE_QUOTED)) { + return asString; + } + + // RFC 4180 (7): If double-quotes are used to enclose fields, then a double-quote + // appearing inside a field must be escaped by preceding it with + // another double quote. + asString = StringUtils.replace(asString, CSV_QUOTE, CSV_QUOTE + CSV_QUOTE); + + // RFC 4180 (6): Fields containing line breaks (CRLF), double quotes, and commas + // should be enclosed in double-quotes. + if (StringUtils.containsAny(asString, SHOULD_BE_QUOTED)) { + return QUOTE_CHAR + asString + QUOTE_CHAR; + } + return asString; + } + +} -- cgit v1.2.3