Author: ggregory Date: Sat Oct 13 06:27:52 2012 New Revision: 1397783 URL: http://svn.apache.org/viewvc?rev=1397783&view=rev Log: Remove DISABLED character hack.
Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/Lexer.java commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java?rev=1397783&r1=1397782&r2=1397783&view=diff ============================================================================== --- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java (original) +++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java Sat Oct 13 06:27:52 2012 @@ -18,6 +18,7 @@ package org.apache.commons.csv; import static org.apache.commons.csv.Constants.COMMA; +import static org.apache.commons.csv.Constants.CR; import static org.apache.commons.csv.Constants.CRLF; import static org.apache.commons.csv.Constants.DOUBLE_QUOTE; import static org.apache.commons.csv.Constants.ESCAPE; @@ -38,30 +39,19 @@ public class CSVFormat implements Serial private static final long serialVersionUID = 1L; - private final char delimiter; - private final char encapsulator; - private final char commentStart; - private final char escape; + private final Character delimiter; + private final Character encapsulator; + private final Character commentStart; + private final Character escape; private final boolean ignoreSurroundingSpaces; // Should leading/trailing spaces be ignored around values? private final boolean ignoreEmptyLines; private final String lineSeparator; // for outputs private final String[] header; - private final boolean isEscaping; - private final boolean isCommentingEnabled; - private final boolean isEncapsulating; - - /** - * Constant char to be used for disabling comments, escapes and encapsulation. The value -2 is used because it - * won't be confused with an EOF signal (-1), and because the Unicode value {@code FFFE} would be encoded as two chars - * (using surrogates) and thus there should never be a collision with a real text char. - */ - static final char DISABLED = '\ufffe'; - /** * Starting format with no settings defined; used for creating other formats from scratch. */ - static final CSVFormat PRISTINE = new CSVFormat(DISABLED, DISABLED, DISABLED, DISABLED, false, false, null, null); + static final CSVFormat PRISTINE = new CSVFormat(null, null, null, null, false, false, null, null); /** * Standard comma separated format, as for {@link #RFC4180} but allowing blank lines. @@ -73,8 +63,8 @@ public class CSVFormat implements Serial * </ul> */ public static final CSVFormat DEFAULT = - PRISTINE. - withDelimiter(COMMA) + PRISTINE + .withDelimiter(COMMA) .withEncapsulator(DOUBLE_QUOTE) .withIgnoreEmptyLines(true) .withLineSeparator(CRLF); @@ -89,8 +79,8 @@ public class CSVFormat implements Serial * </ul> */ public static final CSVFormat RFC4180 = - PRISTINE. - withDelimiter(COMMA) + PRISTINE + .withDelimiter(COMMA) .withEncapsulator(DOUBLE_QUOTE) .withLineSeparator(CRLF); @@ -127,7 +117,7 @@ public class CSVFormat implements Serial * @see <a href="http://dev.mysql.com/doc/refman/5.1/en/load-data.html"> * http://dev.mysql.com/doc/refman/5.1/en/load-data.html</a> */ - public static final CSVFormat MYSQL = + public static final CSVFormat MYSQL = PRISTINE .withDelimiter(TAB) .withEscape(ESCAPE) @@ -153,7 +143,7 @@ public class CSVFormat implements Serial * @param header * the header */ - CSVFormat(final char delimiter, final char encapsulator, final char commentStart, final char escape, final boolean surroundingSpacesIgnored, + CSVFormat(final Character delimiter, final Character encapsulator, final Character commentStart, final Character escape, final boolean surroundingSpacesIgnored, final boolean emptyLinesIgnored, final String lineSeparator, final String[] header) { this.delimiter = delimiter; this.encapsulator = encapsulator; @@ -163,9 +153,6 @@ public class CSVFormat implements Serial this.ignoreEmptyLines = emptyLinesIgnored; this.lineSeparator = lineSeparator; this.header = header; - this.isEncapsulating = encapsulator != DISABLED; - this.isCommentingEnabled = commentStart != DISABLED; - this.isEscaping = escape != DISABLED; } /** @@ -176,8 +163,8 @@ public class CSVFormat implements Serial * * @return true if <code>c</code> is a line break character */ - private static boolean isLineBreak(final char c) { - return c == '\n' || c == '\r'; + private static boolean isLineBreak(final Character c) { + return c != null && (c == LF || c == CR); } /** @@ -199,12 +186,12 @@ public class CSVFormat implements Serial commentStart + "\")"); } - if (encapsulator != DISABLED && encapsulator == commentStart) { + if (encapsulator != null && encapsulator == commentStart) { throw new IllegalArgumentException( "The comment start character and the encapsulator cannot be the same (\"" + commentStart + "\")"); } - if (escape != DISABLED && escape == commentStart) { + if (escape != null && escape == commentStart) { throw new IllegalArgumentException("The comment start and the escape character cannot be the same (\"" + commentStart + "\")"); } @@ -229,6 +216,19 @@ public class CSVFormat implements Serial * thrown if the specified character is a line break */ public CSVFormat withDelimiter(final char delimiter) { + return withDelimiter(Character.valueOf(delimiter)); + } + + /** + * Returns a copy of this format using the specified delimiter character. + * + * @param delimiter + * the delimiter character + * @return A copy of this format using the specified delimiter character + * @throws IllegalArgumentException + * thrown if the specified character is a line break + */ + public CSVFormat withDelimiter(final Character delimiter) { if (isLineBreak(delimiter)) { throw new IllegalArgumentException("The delimiter cannot be a line break"); } @@ -241,7 +241,7 @@ public class CSVFormat implements Serial * * @return the encapsulator character */ - public char getEncapsulator() { + public Character getEncapsulator() { return encapsulator; } @@ -255,6 +255,19 @@ public class CSVFormat implements Serial * thrown if the specified character is a line break */ public CSVFormat withEncapsulator(final char encapsulator) { + return withEncapsulator(Character.valueOf(encapsulator)); + } + + /** + * Returns a copy of this format using the specified encapsulator character. + * + * @param encapsulator + * the encapsulator character + * @return A copy of this format using the specified encapsulator character + * @throws IllegalArgumentException + * thrown if the specified character is a line break + */ + public CSVFormat withEncapsulator(final Character encapsulator) { if (isLineBreak(encapsulator)) { throw new IllegalArgumentException("The encapsulator cannot be a line break"); } @@ -268,7 +281,7 @@ public class CSVFormat implements Serial * @return {@code true} if an encapsulator is defined */ public boolean isEncapsulating() { - return isEncapsulating; + return encapsulator != null; } /** @@ -276,7 +289,7 @@ public class CSVFormat implements Serial * * @return the comment start marker. */ - public char getCommentStart() { + public Character getCommentStart() { return commentStart; } @@ -292,6 +305,21 @@ public class CSVFormat implements Serial * thrown if the specified character is a line break */ public CSVFormat withCommentStart(final char commentStart) { + return withCommentStart(Character.valueOf(commentStart)); + } + + /** + * Returns a copy of this format using the specified character as the comment start marker. + * + * Note that the comment introducer character is only recognised at the start of a line. + * + * @param commentStart + * the comment start marker + * @return A copy of this format using the specified character as the comment start marker + * @throws IllegalArgumentException + * thrown if the specified character is a line break + */ + public CSVFormat withCommentStart(final Character commentStart) { if (isLineBreak(commentStart)) { throw new IllegalArgumentException("The comment start character cannot be a line break"); } @@ -307,7 +335,7 @@ public class CSVFormat implements Serial * @return <tt>true</tt> is comments are supported, <tt>false</tt> otherwise */ public boolean isCommentingEnabled() { - return isCommentingEnabled; + return commentStart != null; } /** @@ -315,7 +343,7 @@ public class CSVFormat implements Serial * * @return the escape character */ - public char getEscape() { + public Character getEscape() { return escape; } @@ -329,6 +357,19 @@ public class CSVFormat implements Serial * thrown if the specified character is a line break */ public CSVFormat withEscape(final char escape) { + return withEscape(Character.valueOf(escape)); + } + + /** + * Returns a copy of this format using the specified escape character. + * + * @param escape + * the escape character + * @return A copy of this format using the specified escape character + * @throws IllegalArgumentException + * thrown if the specified character is a line break + */ + public CSVFormat withEscape(final Character escape) { if (isLineBreak(escape)) { throw new IllegalArgumentException("The escape character cannot be a line break"); } @@ -342,7 +383,7 @@ public class CSVFormat implements Serial * @return {@code true} if escapes are processed */ public boolean isEscaping() { - return isEscaping; + return escape != null; } /** Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/Lexer.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/Lexer.java?rev=1397783&r1=1397782&r2=1397783&view=diff ============================================================================== --- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/Lexer.java (original) +++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/Lexer.java Sat Oct 13 06:27:52 2012 @@ -32,14 +32,10 @@ import java.io.IOException; */ abstract class Lexer { - private final boolean isEncapsulating; - private final boolean isEscaping; - private final boolean isCommentEnabled; - - private final char delimiter; - private final char escape; - private final char encapsulator; - private final char commmentStart; + private final Character delimiter; + private final Character escape; + private final Character encapsulator; + private final Character commmentStart; final boolean surroundingSpacesIgnored; final boolean emptyLinesIgnored; @@ -52,9 +48,6 @@ abstract class Lexer { Lexer(final CSVFormat format, final ExtendedBufferedReader in) { this.format = format; this.in = in; - this.isEncapsulating = format.isEncapsulating(); - this.isEscaping = format.isEscaping(); - this.isCommentEnabled = format.isCommentingEnabled(); this.delimiter = format.getDelimiter(); this.escape = format.getEscape(); this.encapsulator = format.getEncapsulator(); @@ -144,14 +137,14 @@ abstract class Lexer { } boolean isEscape(final int c) { - return isEscaping && c == escape; + return escape != null && c == escape; } boolean isEncapsulator(final int c) { - return isEncapsulating && c == encapsulator; + return encapsulator != null && c == encapsulator; } boolean isCommentStart(final int c) { - return isCommentEnabled && c == commmentStart; + return commmentStart != null && c == commmentStart; } } Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java?rev=1397783&r1=1397782&r2=1397783&view=diff ============================================================================== --- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java (original) +++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java Sat Oct 13 06:27:52 2012 @@ -46,9 +46,9 @@ public class CSVFormatTest { format.withIgnoreEmptyLines(false); assertEquals('!', format.getDelimiter()); - assertEquals('!', format.getEncapsulator()); - assertEquals('!', format.getCommentStart()); - assertEquals('!', format.getEscape()); + assertEquals('!', format.getEncapsulator().charValue()); + assertEquals('!', format.getCommentStart().charValue()); + assertEquals('!', format.getEscape().charValue()); assertEquals(CRLF, format.getLineSeparator()); assertTrue(format.getIgnoreSurroundingSpaces()); @@ -60,10 +60,10 @@ public class CSVFormatTest { final CSVFormat format = new CSVFormat('!', '!', '!', '!', true, true, CRLF, null); assertEquals('?', format.withDelimiter('?').getDelimiter()); - assertEquals('?', format.withEncapsulator('?').getEncapsulator()); - assertEquals('?', format.withCommentStart('?').getCommentStart()); + assertEquals('?', format.withEncapsulator('?').getEncapsulator().charValue()); + assertEquals('?', format.withCommentStart('?').getCommentStart().charValue()); assertEquals("?", format.withLineSeparator("?").getLineSeparator()); - assertEquals('?', format.withEscape('?').getEscape()); + assertEquals('?', format.withEscape('?').getEscape().charValue()); assertFalse(format.withIgnoreSurroundingSpaces(false).getIgnoreSurroundingSpaces()); assertFalse(format.withIgnoreEmptyLines(false).getIgnoreEmptyLines()); @@ -131,7 +131,7 @@ public class CSVFormatTest { // expected } - format.withEncapsulator(CSVFormat.DISABLED).withCommentStart(CSVFormat.DISABLED).validate(); + format.withEncapsulator(null).withCommentStart(null).validate(); try { format.withEscape('!').withCommentStart('!').validate(); @@ -140,7 +140,7 @@ public class CSVFormatTest { // expected } - format.withEscape(CSVFormat.DISABLED).withCommentStart(CSVFormat.DISABLED).validate(); + format.withEscape(null).withCommentStart(null).validate(); try {