commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ggreg...@apache.org
Subject svn commit: r1409449 - in /commons/proper/csv/trunk/src: main/java/org/apache/commons/csv/ test/java/org/apache/commons/csv/ test/java/org/apache/commons/csv/perf/
Date Wed, 14 Nov 2012 21:50:37 GMT
Author: ggregory
Date: Wed Nov 14 21:50:36 2012
New Revision: 1409449

URL: http://svn.apache.org/viewvc?rev=1409449&view=rev
Log:
[CSV-68] Use the Builder pattern for CSVFormat.

Added:
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java   (with props)
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/CSVParser.java
    commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVPrinter.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatTest.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
    commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/perf/PerformanceTest.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=1409449&r1=1409448&r2=1409449&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 Wed Nov 14 21:50:36 2012
@@ -30,6 +30,8 @@ import java.io.Reader;
 import java.io.Serializable;
 import java.io.StringWriter;
 
+import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
+
 /**
  * The format specification of a CSV file.
  *
@@ -41,13 +43,6 @@ public class CSVFormat implements Serial
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * Constant char to use 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.
-     */
-    private static final char DISABLED = '\ufffe';
-
     private final char delimiter;
     private final Character quoteChar;
     private final Quote quotePolicy;
@@ -59,11 +54,6 @@ public class CSVFormat implements Serial
     private final String[] header;
 
     /**
-     * Starting format; used for creating other formats.
-     */
-    private static final CSVFormat PRISTINE = new CSVFormat(DISABLED, null, null, null, null, false, false, null, null);
-
-    /**
      * Comma separated format as defined by <a href="http://tools.ietf.org/html/rfc4180">RFC 4180</a>.
      * <ul>
      * <li>withDelimiter(',')</li>
@@ -72,10 +62,9 @@ public class CSVFormat implements Serial
      * </ul>
      */
     public static final CSVFormat RFC4180 =
-            PRISTINE
-            .withDelimiter(COMMA)
-            .withQuoteChar(DOUBLE_QUOTE)
-            .withRecordSeparator(CRLF);
+            defaults()
+            .withIgnoreEmptyLines(false)
+            .build();
 
     /**
      * Standard comma separated format, as for {@link #RFC4180} but allowing blank lines.
@@ -87,8 +76,8 @@ public class CSVFormat implements Serial
      * </ul>
      */
     public static final CSVFormat DEFAULT = // TODO rename to something more meaningful
-            RFC4180
-            .withIgnoreEmptyLines(true);
+            defaults()
+            .build();
 
     /**
      * Excel file format (using a comma as the value delimiter). Note that the actual value delimiter used by Excel is
@@ -108,19 +97,16 @@ public class CSVFormat implements Serial
      * Note: this is currently the same as RFC4180
      */
     public static final CSVFormat EXCEL =
-            PRISTINE
-            .withDelimiter(COMMA)
-            .withQuoteChar(DOUBLE_QUOTE)
-            .withRecordSeparator(CRLF);
+            defaults()
+            .withIgnoreEmptyLines(false)
+            .build();
 
     /** Tab-delimited format, with quote; leading and trailing spaces ignored. */
     public static final CSVFormat TDF =
-            PRISTINE
+            defaults()
             .withDelimiter(TAB)
-            .withQuoteChar(DOUBLE_QUOTE)
             .withIgnoreSurroundingSpaces(true)
-            .withIgnoreEmptyLines(true)
-            .withRecordSeparator(CRLF);
+            .build();
 
     /**
      * Default MySQL format used by the <tt>SELECT INTO OUTFILE</tt> and <tt>LOAD DATA INFILE</tt> operations. This is
@@ -131,20 +117,36 @@ public class CSVFormat implements Serial
      *      http://dev.mysql.com/doc/refman/5.1/en/load-data.html</a>
      */
     public static final CSVFormat MYSQL =
-            PRISTINE
+            defaults()
             .withDelimiter(TAB)
+            .withQuoteChar(null)
             .withEscape(ESCAPE)
-            .withRecordSeparator(LF);
+            .withIgnoreEmptyLines(false)
+            .withRecordSeparator(LF)
+            .build();
 
     /**
-     * Creates a basic CSV format.
+     * Factory method for creating CSV formats.
      * 
      * @param delimiter 
      *            the char used for value separation, must not be a line break character
      * @throws IllegalArgumentException if the delimiter is a line break character
      */
-    public CSVFormat(char delimiter){
-        this(delimiter,  null, null, null, null, false, false, null, null);
+    public static CSVFormatBuilder newFormat(char delimiter) {
+        return new CSVFormatBuilder(delimiter);
+    }
+
+    /**
+     * Standard comma separated format, as for {@link #RFC4180} but allowing blank lines.
+     * <ul>
+     * <li>withDelimiter(',')</li>
+     * <li>withQuoteChar('"')</li>
+     * <li>withEmptyLinesIgnored(true)</li>
+     * <li>withLineSeparator(CRLF)</li>
+     * </ul>
+     */
+    public static CSVFormatBuilder defaults() {
+        return new CSVFormatBuilder(COMMA, DOUBLE_QUOTE, null, null, null, false, true, CRLF, null);
     }
 
     /**
@@ -170,8 +172,7 @@ public class CSVFormat implements Serial
      *            the header
      * @throws IllegalArgumentException if the delimiter is a line break character
      */
-    // package protected for use by test code
-    CSVFormat(final char delimiter, final Character quoteChar, final Quote quotePolicy, final Character commentStart, final Character escape, final 
+    private CSVFormat(final char delimiter, final Character quoteChar, final Quote quotePolicy, final Character commentStart, final Character escape, final 
                     boolean ignoreSurroundingSpaces, final boolean ignoreEmptyLines, final String lineSeparator, 
             final String[] header) {
         if (isLineBreak(delimiter)) {
@@ -213,39 +214,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * Verifies the consistency of the parameters and throws an IllegalStateException if necessary.
-     * 
-     * @throws IllegalStateException
-     */
-    void validate() throws IllegalStateException {
-        if (quoteChar != null && delimiter == quoteChar.charValue()) {
-            throw new IllegalStateException("The quoteChar character and the delimiter cannot be the same ('" + quoteChar + "')");
-        }
-
-        if (escape != null && delimiter == escape.charValue()) {
-            throw new IllegalStateException("The escape character and the delimiter cannot be the same ('" + escape + "')");
-        }
-
-        if (commentStart != null && delimiter == commentStart.charValue()) {
-            throw new IllegalStateException("The comment start character and the delimiter cannot be the same ('" + commentStart + 
-                    "')");
-        }
-
-        if (quoteChar != null && quoteChar.equals(commentStart)) {
-            throw new IllegalStateException("The comment start character and the quoteChar cannot be the same ('" + commentStart + 
-                    "')");
-        }
-
-        if (escape != null && escape.equals(commentStart)) {
-            throw new IllegalStateException("The comment start and the escape character cannot be the same ('" + commentStart + "')");
-        }
-
-        if (escape == null && quotePolicy == Quote.NONE) {
-            throw new IllegalStateException("No quotes mode set but no escape character is set");
-        }
-    }
-
-    /**
      * Returns the character delimiting the values (typically ';', ',' or '\t').
      *
      * @return the delimiter character
@@ -255,20 +223,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * 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 char delimiter) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Returns the character used to encapsulate values containing special characters.
      *
      * @return the quoteChar character
@@ -278,36 +232,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * Returns a copy of this format using the specified quoteChar character.
-     *
-     * @param quoteChar
-     *            the quoteChar character
-     * @return A copy of this format using the specified quoteChar character
-     * @throws IllegalArgumentException
-     *             thrown if the specified character is a line break
-     */
-    public CSVFormat withQuoteChar(final char quoteChar) {
-        return withQuoteChar(Character.valueOf(quoteChar));
-    }
-
-    /**
-     * Returns a copy of this format using the specified quoteChar character.
-     *
-     * @param quoteChar
-     *            the quoteChar character
-     * @return A copy of this format using the specified quoteChar character
-     * @throws IllegalArgumentException
-     *             thrown if the specified character is a line break
-     */
-    public CSVFormat withQuoteChar(final Character quoteChar) {
-        if (isLineBreak(quoteChar)) {
-            throw new IllegalArgumentException("The quoteChar cannot be a line break");
-        }
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Returns whether an quoteChar has been defined.
      *
      * @return {@code true} if an quoteChar is defined
@@ -326,40 +250,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * 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 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");
-        }
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Specifies whether comments are supported by this format.
      *
      * Note that the comment introducer character is only recognised at the start of a line.
@@ -380,36 +270,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * 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 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");
-        }
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Returns whether escape are being processed.
      *
      * @return {@code true} if escapes are processed
@@ -429,19 +289,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * Returns a copy of this format with the specified trimming behavior.
-     *
-     * @param ignoreSurroundingSpaces
-     *            the trimming behavior, <tt>true</tt> to remove the surrounding spaces, <tt>false</tt> to leave the
-     *            spaces as is.
-     * @return A copy of this format with the specified trimming behavior.
-     */
-    public CSVFormat withIgnoreSurroundingSpaces(final boolean ignoreSurroundingSpaces) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Specifies whether empty lines between records are ignored when parsing input.
      *
      * @return <tt>true</tt> if empty lines between records are ignored, <tt>false</tt> if they are turned into empty
@@ -452,19 +299,6 @@ public class CSVFormat implements Serial
     }
 
     /**
-     * Returns a copy of this format with the specified empty line skipping behavior.
-     *
-     * @param ignoreEmptyLines
-     *            the empty line skipping behavior, <tt>true</tt> to ignore the empty lines between the records,
-     *            <tt>false</tt> to translate empty lines to empty records.
-     * @return A copy of this format with the specified empty line skipping behavior.
-     */
-    public CSVFormat withIgnoreEmptyLines(final boolean ignoreEmptyLines) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Returns the line separator delimiting output records.
      *
      * @return the line separator
@@ -473,74 +307,11 @@ public class CSVFormat implements Serial
         return recordSeparator;
     }
 
-    /**
-     * Returns a copy of this format using the specified output record separator.
-     *
-     * @param recordSeparator
-     *            the record separator to use for output.
-     *
-     * @return A copy of this format using the specified output record separator
-     */
-    public CSVFormat withRecordSeparator(final char recordSeparator) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, String.valueOf(recordSeparator), header);
-    }
-
-    /**
-     * Returns a copy of this format using the specified output record separator.
-     *
-     * @param recordSeparator
-     *            the record separator to use for output.
-     *
-     * @return A copy of this format using the specified output record separator
-     */
-    public CSVFormat withRecordSeparator(final String recordSeparator) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
-     * Returns a copy of this format using the specified output quote policy.
-     *
-     * @param quotePolicy
-     *            the quote policy to use for output.
-     *
-     * @return A copy of this format using the specified output line separator
-     */
-    public CSVFormat withQuotePolicy(final Quote quotePolicy) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
     String[] getHeader() {
         return header;
     }
 
     /**
-     * Returns a copy of this format using the specified header. The header can either be parsed automatically from the
-     * input file with:
-     *
-     * <pre>
-     * CSVFormat format = aformat.withHeader();
-     * </pre>
-     *
-     * or specified manually with:
-     *
-     * <pre>
-     * CSVFormat format = aformat.withHeader(&quot;name&quot;, &quot;email&quot;, &quot;phone&quot;);
-     * </pre>
-     *
-     * @param header
-     *            the header, <tt>null</tt> if disabled, empty if parsed automatically, user specified otherwise.
-     *
-     * @return A copy of this format using the specified header
-     */
-    public CSVFormat withHeader(final String... header) {
-        return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
-                ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
-    }
-
-    /**
      * Parses the specified content.
      *
      * @param in
@@ -600,5 +371,307 @@ public class CSVFormat implements Serial
     public Quote getQuotePolicy() {
         return quotePolicy;
     }
+    
+    public static class CSVFormatBuilder {
 
+        private char delimiter;
+        private Character quoteChar;
+        private Quote quotePolicy;
+        private Character commentStart;
+        private Character escape;
+        private boolean ignoreSurroundingSpaces; // Should leading/trailing spaces be ignored around values?
+        private boolean ignoreEmptyLines;
+        private String recordSeparator; // for outputs
+        private String[] header;
+
+        /**
+         * Creates a customized CSV format.
+         *
+         * @param delimiter
+         *            the char used for value separation, must not be a line break character
+         * @param quoteChar
+         *            the char used as value encapsulation marker
+         * @param quotePolicy 
+         *            the quote policy
+         * @param commentStart
+         *            the char used for comment identification
+         * @param escape
+         *            the char used to escape special characters in values
+         * @param ignoreSurroundingSpaces
+         *            <tt>true</tt> when whitespaces enclosing values should be ignored
+         * @param ignoreEmptyLines
+         *            <tt>true</tt> when the parser should skip empty lines
+         * @param recordSeparator
+         *            the line separator to use for output
+         * @param header
+         *            the header
+         * @throws IllegalArgumentException if the delimiter is a line break character
+         */
+        // package protected for use by test code
+        CSVFormatBuilder(final char delimiter, final Character quoteChar, final Quote quotePolicy, final Character commentStart, final Character escape, final 
+                        boolean ignoreSurroundingSpaces, final boolean ignoreEmptyLines, final String lineSeparator, 
+                final String[] header) {
+            if (isLineBreak(delimiter)) {
+                throw new IllegalArgumentException("The delimiter cannot be a line break");
+            }
+            this.delimiter = delimiter;
+            this.quoteChar = quoteChar;
+            this.quotePolicy = quotePolicy;
+            this.commentStart = commentStart;
+            this.escape = escape;
+            this.ignoreSurroundingSpaces = ignoreSurroundingSpaces;
+            this.ignoreEmptyLines = ignoreEmptyLines;
+            this.recordSeparator = lineSeparator;
+            this.header = header;
+        }
+
+        /**
+         * Creates a basic CSVFormatBuilder.
+         * 
+         * @param delimiter 
+         *            the char used for value separation, must not be a line break character
+         * @throws IllegalArgumentException if the delimiter is a line break character
+         */
+        private CSVFormatBuilder(char delimiter){
+            this(delimiter, null, null, null, null, false, false, null, null);
+        }
+
+        public CSVFormat build() {
+            validate();
+            return new CSVFormat(delimiter, quoteChar, quotePolicy, commentStart, escape,
+                                 ignoreSurroundingSpaces, ignoreEmptyLines, recordSeparator, header);
+        }
+        
+        /**
+         * Verifies the consistency of the parameters and throws an IllegalStateException if necessary.
+         * 
+         * @throws IllegalStateException
+         */
+        private void validate() throws IllegalStateException {
+            if (quoteChar != null && delimiter == quoteChar.charValue()) {
+                throw new IllegalStateException("The quoteChar character and the delimiter cannot be the same ('" + quoteChar + "')");
+            }
+        
+            if (escape != null && delimiter == escape.charValue()) {
+                throw new IllegalStateException("The escape character and the delimiter cannot be the same ('" + escape + "')");
+            }
+        
+            if (commentStart != null && delimiter == commentStart.charValue()) {
+                throw new IllegalStateException("The comment start character and the delimiter cannot be the same ('" + commentStart + 
+                        "')");
+            }
+        
+            if (quoteChar != null && quoteChar.equals(commentStart)) {
+                throw new IllegalStateException("The comment start character and the quoteChar cannot be the same ('" + commentStart + 
+                        "')");
+            }
+        
+            if (escape != null && escape.equals(commentStart)) {
+                throw new IllegalStateException("The comment start and the escape character cannot be the same ('" + commentStart + "')");
+            }
+        
+            if (escape == null && quotePolicy == Quote.NONE) {
+                throw new IllegalStateException("No quotes mode set but no escape character is set");
+            }
+        }
+
+        /**
+         * Sets the delimiter of the format to the specified character.
+         *
+         * @param delimiter
+         *            the delimiter character
+         * @return This builder with the specified character as delimiter
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withDelimiter(final char delimiter) {
+            if (isLineBreak(delimiter)) {
+                throw new IllegalArgumentException("The delimiter cannot be a line break");
+            }
+            this.delimiter = delimiter; 
+            return this;
+        }
+
+        /**
+         * Sets the quoteChar of the format to the specified character.
+         *
+         * @param quoteChar
+         *            the quoteChar character
+         * @return This builder with the specified character as quoteChar
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withQuoteChar(final char quoteChar) {
+            return withQuoteChar(Character.valueOf(quoteChar));
+        }
+
+        /**
+         * Sets the quoteChar of the format to the specified character.
+         *
+         * @param quoteChar
+         *            the quoteChar character
+         * @return This builder with the specified character as quoteChar
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withQuoteChar(final Character quoteChar) {
+            if (isLineBreak(quoteChar)) {
+                throw new IllegalArgumentException("The quoteChar cannot be a line break");
+            }
+            this.quoteChar = quoteChar;
+            return this;
+        }
+
+        /**
+         * Sets the comment start marker of the format to the specified character.
+         *
+         * Note that the comment introducer character is only recognised at the start of a line.
+         *
+         * @param commentStart
+         *            the comment start marker
+         * @return This builder with the specified character as the comment start marker
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withCommentStart(final char commentStart) {
+            return withCommentStart(Character.valueOf(commentStart));
+        }
+
+        /**
+         * Sets the comment start marker of the format to the specified character.
+         *
+         * Note that the comment introducer character is only recognised at the start of a line.
+         *
+         * @param commentStart
+         *            the comment start marker
+         * @return This builder with the specified character as the comment start marker
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withCommentStart(final Character commentStart) {
+            if (isLineBreak(commentStart)) {
+                throw new IllegalArgumentException("The comment start character cannot be a line break");
+            }
+            this.commentStart = commentStart;
+            return this;
+        }
+
+        /**
+         * Sets the escape character of the format to the specified character.
+         *
+         * @param escape
+         *            the escape character
+         * @return This builder with the specified character as the escape character
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withEscape(final char escape) {
+            return withEscape(Character.valueOf(escape));
+        }
+
+        /**
+         * Sets the escape character of the format to the specified character.
+         *
+         * @param escape
+         *            the escape character
+         * @return This builder with the specified character as the escape character
+         * @throws IllegalArgumentException
+         *             thrown if the specified character is a line break
+         */
+        public CSVFormatBuilder withEscape(final Character escape) {
+            if (isLineBreak(escape)) {
+                throw new IllegalArgumentException("The escape character cannot be a line break");
+            }
+            this.escape = escape;
+            return this;
+        }
+
+        /**
+         * Sets the header of the format. The header can either be parsed automatically from the
+         * input file with:
+         *
+         * <pre>
+         * CSVFormat format = aformat.withHeader();
+         * </pre>
+         *
+         * or specified manually with:
+         *
+         * <pre>
+         * CSVFormat format = aformat.withHeader(&quot;name&quot;, &quot;email&quot;, &quot;phone&quot;);
+         * </pre>
+         *
+         * @param header
+         *            the header, <tt>null</tt> if disabled, empty if parsed automatically, user specified otherwise.
+         *
+         * @return This builder with the specified header
+         */
+        public CSVFormatBuilder withHeader(final String... header) {
+            this.header = header;
+            return this;
+        }
+        
+        /**
+         * Sets the trimming behavior of the format.
+         *
+         * @param ignoreSurroundingSpaces
+         *            the trimming behavior, <tt>true</tt> to remove the surrounding spaces, <tt>false</tt> to leave the
+         *            spaces as is.
+         * @return This builder with the specified trimming behavior.
+         */
+        public CSVFormatBuilder withIgnoreSurroundingSpaces(final boolean ignoreSurroundingSpaces) {
+            this.ignoreSurroundingSpaces = ignoreSurroundingSpaces;
+            return this;
+        }
+
+        /**
+         * Sets the empty line skipping behavior of the format.
+         *
+         * @param ignoreEmptyLines
+         *            the empty line skipping behavior, <tt>true</tt> to ignore the empty lines between the records,
+         *            <tt>false</tt> to translate empty lines to empty records.
+         * @return This builder with the specified empty line skipping behavior.
+         */
+        public CSVFormatBuilder withIgnoreEmptyLines(final boolean ignoreEmptyLines) {
+            this.ignoreEmptyLines = ignoreEmptyLines;
+            return this;
+        }
+
+        /**
+         * Sets the record separator of the format to the specified character.
+         *
+         * @param recordSeparator
+         *            the record separator to use for output.
+         *
+         * @return This builder with the the specified output record separator
+         */
+        public CSVFormatBuilder withRecordSeparator(final char recordSeparator) {
+            return withRecordSeparator(String.valueOf(recordSeparator));
+        }
+
+        /**
+         * Sets the record separator of the format to the specified String.
+         *
+         * @param recordSeparator
+         *            the record separator to use for output.
+         *
+         * @return This builder with the the specified output record separator
+         */
+        public CSVFormatBuilder withRecordSeparator(final String recordSeparator) {
+            this.recordSeparator = recordSeparator;
+            return this;
+        }
+
+        /**
+         * Sets the output quote policy of the format to the specified value.
+         *
+         * @param quotePolicy
+         *            the quote policy to use for output.
+         *
+         * @return This builder with the specified quote policy
+         */
+        public CSVFormatBuilder withQuotePolicy(final Quote quotePolicy) {
+            this.quotePolicy = quotePolicy;
+            return this;
+        }
+    }
 }

Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java (original)
+++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java Wed Nov 14 21:50:36 2012
@@ -103,7 +103,6 @@ public class CSVParser implements Iterab
      *             thrown if the parameters of the format are inconsistent
      */
     public CSVParser(final Reader input, final CSVFormat format) throws IOException {
-        format.validate();
         this.lexer = new CSVLexer(format, new ExtendedBufferedReader(input));
         this.headerMap = initializeHeader(format);
     }

Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVPrinter.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVPrinter.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVPrinter.java (original)
+++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVPrinter.java Wed Nov 14 21:50:36 2012
@@ -59,7 +59,6 @@ public class CSVPrinter implements Flush
     public CSVPrinter(final Appendable out, final CSVFormat format) {
         this.out = out;
         this.format = format == null ? CSVFormat.DEFAULT : format;
-        this.format.validate();
     }
 
     // ======================================================

Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFileParserTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFileParserTest.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFileParserTest.java (original)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFileParserTest.java Wed Nov 14 21:50:36 2012
@@ -32,6 +32,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -89,17 +90,18 @@ public class CSVFileParserTest {
         assertTrue(testName+" require 1 param", split.length >= 1);
          // first line starts with csv data file name
         final BufferedReader csvFile = new BufferedReader(new FileReader(new File(BASE, split[0])));
-        CSVFormat fmt = new CSVFormat(',').withQuoteChar('"');
+        CSVFormatBuilder builder = CSVFormat.newFormat(',').withQuoteChar('"');
+        CSVFormat fmt = builder.build(); 
         boolean checkComments = false;
         for(int i=1; i < split.length; i++) {
             final String option = split[i];
             final String[] option_parts = option.split("=",2);
             if ("IgnoreEmpty".equalsIgnoreCase(option_parts[0])){
-                fmt = fmt.withIgnoreEmptyLines(Boolean.parseBoolean(option_parts[1]));
+                fmt = builder.withIgnoreEmptyLines(Boolean.parseBoolean(option_parts[1])).build();
             } else if ("IgnoreSpaces".equalsIgnoreCase(option_parts[0])) {
-                fmt = fmt.withIgnoreSurroundingSpaces(Boolean.parseBoolean(option_parts[1]));
+                fmt = builder.withIgnoreSurroundingSpaces(Boolean.parseBoolean(option_parts[1])).build();
             } else if ("CommentStart".equalsIgnoreCase(option_parts[0])) {
-                fmt = fmt.withCommentStart(option_parts[1].charAt(0));
+                fmt = builder.withCommentStart(option_parts[1].charAt(0)).build();
             } else if ("CheckComments".equalsIgnoreCase(option_parts[0])) {
                 checkComments = true;
             } else {

Added: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java?rev=1409449&view=auto
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java (added)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java Wed Nov 14 21:50:36 2012
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.csv;
+
+import static org.apache.commons.csv.Constants.*;
+import static org.junit.Assert.*;
+
+import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * 
+ * 
+ * @version $Id$
+ */
+public class CSVFormatBuilderTest {
+
+    private CSVFormatBuilder builder;
+
+    @Before
+    public void setUp() throws Exception {
+        builder = new CSVFormatBuilder('+', '!', null, '#', '!', true, true, CRLF, null);
+    }
+
+    @Test
+    public void testDelimiter() {
+        assertEquals('?', builder.withDelimiter('?').build().getDelimiter());
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void testNewFormatLFThrowsException() {
+        CSVFormat.newFormat(LF);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testNewFormatCRThrowsException() {
+        CSVFormat.newFormat(CR);
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void testWithDelimiterLFThrowsException() {
+        builder.withDelimiter(LF).build();
+    }
+    
+    @Test(expected = IllegalStateException.class)
+    public void testDelimiterSameAsEscapeThrowsException() {
+        builder.withDelimiter('!').withEscape('!').build();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testDelimiterSameAsCommentStartThrowsException() {
+        builder.withDelimiter('!').withCommentStart('!').build();
+    }
+
+    @Test
+    public void testQuoteChar() {
+        assertEquals('?', builder.withQuoteChar('?').build().getQuoteChar().charValue());
+    }
+    
+    @Test(expected = IllegalStateException.class)
+    public void testQuoteCharSameAsCommentStartThrowsException() {
+        builder.withQuoteChar('!').withCommentStart('!').build();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testQuoteCharSameAsCommentStartThrowsExceptionForWrapperType() {
+        // Cannot assume that callers won't use different Character objects
+        builder.withQuoteChar(new Character('!')).withCommentStart('!').build();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testQuoteCharSameAsDelimiterThrowsException() {
+        builder.withQuoteChar('!').withDelimiter('!').build();
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testWithQuoteLFThrowsException() {
+        builder.withQuoteChar(LF).build();
+    }
+
+    @Test
+    public void testQuotePolicy() {
+        assertEquals(Quote.ALL, builder.withQuotePolicy(Quote.ALL).build().getQuotePolicy());
+    }
+    
+    @Test(expected = IllegalStateException.class)
+    public void testQuotePolicyNoneWithoutEscapeThrowsException() {
+        CSVFormat.newFormat('!').withQuotePolicy(Quote.NONE).build();
+    }
+
+    @Test
+    public void testCommentStart() {
+        assertEquals('?', builder.withCommentStart('?').build().getCommentStart().charValue());
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void testWithCommentStartCRThrowsException() {
+        builder.withCommentStart(CR).build();
+    }
+
+    @Test
+    public void testRecoardSeparator() {
+        assertEquals("?", builder.withRecordSeparator("?").build().getRecordSeparator());
+    }
+    
+    @Test
+    public void testEscape() {
+        assertEquals('?', builder.withEscape('?').build().getEscape().charValue());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testWithEscapeCRThrowsExceptions() {
+        builder.withEscape(CR).build();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testEscapeSameAsCommentStartThrowsException() {
+        builder.withEscape('!').withCommentStart('!').build();
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testEscapeSameAsCommentStartThrowsExceptionForWrapperType() {
+        // Cannot assume that callers won't use different Character objects
+        builder.withEscape(new Character('!')).withCommentStart(new Character('!')).build();
+    }
+
+    @Test
+    public void testIgnoreSurroundingSpaces() {
+        assertFalse(builder.withIgnoreSurroundingSpaces(false).build().getIgnoreSurroundingSpaces());
+    }
+    
+    @Test
+    public void testIgnoreEmptyLines() {
+        assertFalse(builder.withIgnoreEmptyLines(false).build().getIgnoreEmptyLines());
+    }
+}

Propchange: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

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=1409449&r1=1409448&r2=1409449&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 Wed Nov 14 21:50:36 2012
@@ -29,6 +29,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 
+import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
 import org.junit.Test;
 
 /**
@@ -39,46 +40,6 @@ import org.junit.Test;
 public class CSVFormatTest {
 
     @Test
-    public void testImmutalibity() {
-        final CSVFormat format = new CSVFormat('!', '!', Quote.MINIMAL, '!', '!', true, true, CRLF, null);
-
-        format.withDelimiter('?');
-        format.withQuoteChar('?');
-        format.withQuotePolicy(Quote.ALL);
-        format.withCommentStart('?');
-        format.withRecordSeparator("?");
-        format.withEscape('?');
-        format.withIgnoreSurroundingSpaces(false);
-        format.withIgnoreEmptyLines(false);
-
-        assertEquals('!', format.getDelimiter());
-        assertEquals('!', format.getQuoteChar().charValue());
-        assertEquals('!', format.getCommentStart().charValue());
-        assertEquals('!', format.getEscape().charValue());
-        assertEquals(CRLF, format.getRecordSeparator());
-
-        assertTrue(format.getIgnoreSurroundingSpaces());
-        assertTrue(format.getIgnoreEmptyLines());
-
-        assertEquals(Quote.MINIMAL, format.getQuotePolicy());
-    }
-
-    @Test
-    public void testMutators() {
-        final CSVFormat format = new CSVFormat('!', '!', null, '!', '!', true, true, CRLF, null);
-
-        assertEquals('?', format.withDelimiter('?').getDelimiter());
-        assertEquals('?', format.withQuoteChar('?').getQuoteChar().charValue());
-        assertEquals(Quote.ALL, format.withQuotePolicy(Quote.ALL).getQuotePolicy());
-        assertEquals('?', format.withCommentStart('?').getCommentStart().charValue());
-        assertEquals("?", format.withRecordSeparator("?").getRecordSeparator());
-        assertEquals('?', format.withEscape('?').getEscape().charValue());
-
-        assertFalse(format.withIgnoreSurroundingSpaces(false).getIgnoreSurroundingSpaces());
-        assertFalse(format.withIgnoreEmptyLines(false).getIgnoreEmptyLines());
-    }
-
-    @Test
     public void testFormat() {
         final CSVFormat format = CSVFormat.DEFAULT;
 
@@ -87,116 +48,6 @@ public class CSVFormatTest {
         assertEquals("\"x,y\",z", format.format("x,y", "z"));
     }
 
-    @Test
-    public void testValidation() {
-        try {
-            new CSVFormat('\n');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            new CSVFormat('\r');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        final CSVFormat format = CSVFormat.DEFAULT;
-
-        try {
-            format.withDelimiter('\n');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            format.withEscape('\r');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            format.withQuoteChar('\n');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            format.withCommentStart('\r');
-            fail();
-        } catch (final IllegalArgumentException e) {
-            // expected
-        }
-
-        try {
-            format.withDelimiter('!').withEscape('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        try {
-            format.withDelimiter('!').withCommentStart('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        try {
-            format.withQuoteChar('!').withCommentStart('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        // Cannot assume that callers won't use different Character objects
-        try {
-            format.withQuoteChar(new Character('!')).withCommentStart('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        format.withQuoteChar(null).withCommentStart(null).validate();
-
-        try {
-            format.withEscape('!').withCommentStart('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        // Cannot assume that callers won't use different Character objects
-        try {
-            format.withEscape(new Character('!')).withCommentStart(new Character('!')).validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        format.withEscape(null).withCommentStart(null).validate();
-
-
-        try {
-            format.withQuoteChar('!').withDelimiter('!').validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-
-        try {
-            format.withQuoteChar('!').withQuotePolicy(Quote.NONE).validate();
-            fail();
-        } catch (final IllegalStateException e) {
-            // expected
-        }
-    }
-
     @SuppressWarnings("boxing") // no need to worry about boxing here
     @Test
     public void testSerialization() throws Exception {

Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java (original)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java Wed Nov 14 21:50:36 2012
@@ -51,7 +51,7 @@ public class CSVLexerTest {
     @Test
     public void testNextToken1() throws IOException {
         final String code = "abc,def, hijk,  lmnop,   qrst,uv ,wxy   ,z , ,";
-        final Lexer parser = getLexer(code, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true));
+        final Lexer parser = getLexer(code, CSVFormat.defaults().withIgnoreSurroundingSpaces(true).build());
         assertTokenEquals(TOKEN, "abc", parser.nextToken(new Token()));
         assertTokenEquals(TOKEN, "def", parser.nextToken(new Token()));
         assertTokenEquals(TOKEN, "hijk", parser.nextToken(new Token()));
@@ -83,7 +83,7 @@ public class CSVLexerTest {
                 "\n"+
                 "\n"+
                 "# Final comment\n";       // 7
-        final CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#');
+        final CSVFormat format = CSVFormat.defaults().withCommentStart('#').build();
         assertTrue("Should ignore empty lines", format.getIgnoreEmptyLines());
 
         final Lexer parser = getLexer(code, format);
@@ -126,7 +126,7 @@ public class CSVLexerTest {
                 "\n"+                      // 6b
                 "\n"+                      // 6c
                 "# Final comment\n";       // 7
-        final CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#').withIgnoreEmptyLines(false);
+        final CSVFormat format = CSVFormat.defaults().withCommentStart('#').withIgnoreEmptyLines(false).build();
         assertFalse("Should not ignore empty lines", format.getIgnoreEmptyLines());
 
         final Lexer parser = getLexer(code, format);
@@ -187,7 +187,7 @@ public class CSVLexerTest {
         *       \,,
         */
         final String code = "a,\\,,b\\\\\n\\,,\\\nc,d\\\r\ne";
-        final CSVFormat format = CSVFormat.DEFAULT.withEscape('\\').withIgnoreEmptyLines(false);
+        final CSVFormat format = CSVFormat.defaults().withEscape('\\').withIgnoreEmptyLines(false).build();
         assertTrue(format.isEscaping());
         final Lexer parser = getLexer(code, format);
 
@@ -204,7 +204,7 @@ public class CSVLexerTest {
     @Test
     public void testNextToken3BadEscaping() throws IOException {
         final String code = "a,b,c\\";
-        final CSVFormat format = CSVFormat.DEFAULT.withEscape('\\');
+        final CSVFormat format = CSVFormat.defaults().withEscape('\\').build();
         assertTrue(format.isEscaping());
         final Lexer parser = getLexer(code, format);
 
@@ -226,7 +226,7 @@ public class CSVLexerTest {
         *        a,  " foo " ,b
         */
         final String code = "a,\"foo\",b\na,   \" foo\",b\na,\"foo \"  ,b\na,  \" foo \"  ,b";
-        final Lexer parser = getLexer(code, CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true));
+        final Lexer parser = getLexer(code, CSVFormat.defaults().withIgnoreSurroundingSpaces(true).build());
         assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
         assertTokenEquals(TOKEN, "foo", parser.nextToken(new Token()));
         assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
@@ -264,7 +264,7 @@ public class CSVLexerTest {
         *       ;;
         */
         final String code = "a;'b and '' more\n'\n!comment;;;;\n;;";
-        final CSVFormat format = CSVFormat.DEFAULT.withDelimiter(';').withQuoteChar('\'').withCommentStart('!');
+        final CSVFormat format = CSVFormat.defaults().withDelimiter(';').withQuoteChar('\'').withCommentStart('!').build();
         final Lexer parser = getLexer(code, format);
         assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
         assertTokenEquals(EORECORD, "b and ' more\n", parser.nextToken(new Token()));

Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java (original)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java Wed Nov 14 21:50:36 2012
@@ -71,7 +71,7 @@ public class CSVParserTest {
 
     @Test
     public void testGetLine() throws IOException {
-        final CSVParser parser = new CSVParser(new StringReader(CSVINPUT), CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true));
+        final CSVParser parser = new CSVParser(new StringReader(CSVINPUT), CSVFormat.defaults().withIgnoreSurroundingSpaces(true).build());
         for (final String[] re : RESULT) {
             assertArrayEquals(re, parser.nextRecord().values());
         }
@@ -81,7 +81,7 @@ public class CSVParserTest {
 
     @Test
     public void testGetRecords() throws IOException {
-        final CSVParser parser = new CSVParser(new StringReader(CSVINPUT), CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true));
+        final CSVParser parser = new CSVParser(new StringReader(CSVINPUT), CSVFormat.defaults().withIgnoreSurroundingSpaces(true).build());
         final List<CSVRecord> records = parser.getRecords();
         assertEquals(RESULT.length, records.size());
         assertTrue(records.size() > 0);
@@ -312,8 +312,8 @@ public class CSVParserTest {
         };
 
 
-        final CSVFormat format = new CSVFormat(',').withQuoteChar('\'').withEscape('/')
-                               .withIgnoreEmptyLines(true).withRecordSeparator(CRLF);
+        final CSVFormat format = CSVFormat.newFormat(',').withQuoteChar('\'').withEscape('/')
+                               .withIgnoreEmptyLines(true).withRecordSeparator(CRLF).build();
 
         final CSVParser parser = new CSVParser(code, format);
         final List<CSVRecord> records = parser.getRecords();
@@ -342,8 +342,8 @@ public class CSVParserTest {
         };
 
 
-        final CSVFormat format = new CSVFormat(',').withEscape('/')
-                .withIgnoreEmptyLines(true).withRecordSeparator(CRLF);
+        final CSVFormat format = CSVFormat.newFormat(',').withEscape('/')
+                .withIgnoreEmptyLines(true).withRecordSeparator(CRLF).build();
 
         final CSVParser parser = new CSVParser(code, format);
         final List<CSVRecord> records = parser.getRecords();
@@ -381,7 +381,7 @@ public class CSVParserTest {
                 {"\n", " ", "#"},
         };
 
-        format = CSVFormat.DEFAULT.withCommentStart('#');
+        format = CSVFormat.defaults().withCommentStart('#').build();
         parser = new CSVParser(code, format);
         records = parser.getRecords();
 
@@ -481,7 +481,7 @@ public class CSVParserTest {
     public void testHeader() throws Exception {
         final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
 
-        final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader().parse(in).iterator();
+        final Iterator<CSVRecord> records = CSVFormat.defaults().withHeader().build().parse(in).iterator();
 
         for (int i = 0; i < 2; i++) {
             assertTrue(records.hasNext());
@@ -498,7 +498,7 @@ public class CSVParserTest {
     public void testHeaderComment() throws Exception {
         final Reader in = new StringReader("# comment\na,b,c\n1,2,3\nx,y,z");
 
-        final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withCommentStart('#').withHeader().parse(in).iterator();
+        final Iterator<CSVRecord> records = CSVFormat.defaults().withCommentStart('#').withHeader().build().parse(in).iterator();
 
         for (int i = 0; i < 2; i++) {
             assertTrue(records.hasNext());
@@ -515,7 +515,7 @@ public class CSVParserTest {
     public void testProvidedHeader() throws Exception {
         final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z");
 
-        final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("A", "B", "C").parse(in).iterator();
+        final Iterator<CSVRecord> records = CSVFormat.defaults().withHeader("A", "B", "C").build().parse(in).iterator();
 
         for (int i = 0; i < 3; i++) {
             assertTrue(records.hasNext());
@@ -536,7 +536,7 @@ public class CSVParserTest {
     public void testMappedButNotSetAsOutlook2007ContactExport() throws Exception {
         final Reader in = new StringReader("a,b,c\n1,2\nx,y,z");
 
-        final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("A", "B", "C").parse(in).iterator();
+        final Iterator<CSVRecord> records = CSVFormat.defaults().withHeader("A", "B", "C").build().parse(in).iterator();
 
         // header record
         assertTrue(records.hasNext());
@@ -578,7 +578,7 @@ public class CSVParserTest {
     }
 
     public void testGetHeaderMap() throws Exception {
-        final CSVParser parser = new CSVParser("a,b,c\n1,2,3\nx,y,z", CSVFormat.DEFAULT.withHeader("A", "B", "C"));
+        final CSVParser parser = new CSVParser("a,b,c\n1,2,3\nx,y,z", CSVFormat.defaults().withHeader("A", "B", "C").build());
         final Map<String, Integer> headerMap = parser.getHeaderMap();
         final Iterator<String> columnNames = headerMap.keySet().iterator();
         // Headers are iterated in column order.
@@ -622,7 +622,7 @@ public class CSVParserTest {
     @Test
     public void testGetRecordWithMultiiLineValues() throws Exception {
         final CSVParser parser = new CSVParser("\"a\r\n1\",\"a\r\n2\"" + CRLF + "\"b\r\n1\",\"b\r\n2\"" + CRLF + "\"c\r\n1\",\"c\r\n2\"",
-                CSVFormat.DEFAULT.withRecordSeparator(CRLF));
+                CSVFormat.defaults().withRecordSeparator(CRLF).build());
         CSVRecord record;
         assertEquals(0, parser.getRecordNumber());
         assertEquals(0, parser.getLineNumber());
@@ -654,7 +654,7 @@ public class CSVParserTest {
     }
 
     private void validateRecordNumbers(String lineSeparator) throws IOException {
-        final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.DEFAULT.withRecordSeparator(lineSeparator));
+        final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.defaults().withRecordSeparator(lineSeparator).build());
         CSVRecord record;
         assertEquals(0, parser.getRecordNumber());
         assertNotNull(record = parser.nextRecord());
@@ -671,7 +671,7 @@ public class CSVParserTest {
     }
 
     private void validateLineNumbers(String lineSeparator) throws IOException {
-        final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.DEFAULT.withRecordSeparator(lineSeparator));
+        final CSVParser parser = new CSVParser("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.defaults().withRecordSeparator(lineSeparator).build());
         assertEquals(0, parser.getLineNumber());
         assertNotNull(parser.nextRecord());
         assertEquals(1, parser.getLineNumber());

Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVPrinterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVPrinterTest.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVPrinterTest.java (original)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVPrinterTest.java Wed Nov 14 21:50:36 2012
@@ -220,7 +220,7 @@ public class CSVPrinterTest {
     @Test
     public void testMultiLineComment() throws IOException {
         final StringWriter sw = new StringWriter();
-        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withCommentStart('#'));
+        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.defaults().withCommentStart('#').build());
         printer.printComment("This is a comment\non multiple lines");
 
         assertEquals("# This is a comment" + recordSeparator + "# on multiple lines" + recordSeparator, sw.toString());
@@ -293,7 +293,7 @@ public class CSVPrinterTest {
     @Test
     public void testQuoteAll() throws IOException {
         final StringWriter sw = new StringWriter();
-        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuotePolicy(Quote.ALL));
+        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.defaults().withQuotePolicy(Quote.ALL).build());
         printer.printRecord("a", "b\nc", "d");
         assertEquals("\"a\",\"b\nc\",\"d\"" + recordSeparator, sw.toString());
     }
@@ -301,7 +301,7 @@ public class CSVPrinterTest {
     @Test
     public void testQuoteNonNumeric() throws IOException {
         final StringWriter sw = new StringWriter();
-        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withQuotePolicy(Quote.NON_NUMERIC));
+        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.defaults().withQuotePolicy(Quote.NON_NUMERIC).build());
         printer.printRecord("a", "b\nc", Integer.valueOf(1));
         assertEquals("\"a\",\"b\nc\",1" + recordSeparator, sw.toString());
     }
@@ -317,7 +317,7 @@ public class CSVPrinterTest {
     @Test
     public void testSingleLineComment() throws IOException {
         final StringWriter sw = new StringWriter();
-        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.DEFAULT.withCommentStart('#'));
+        final CSVPrinter printer = new CSVPrinter(sw, CSVFormat.defaults().withCommentStart('#').build());
         printer.printComment("This is a comment");
 
         assertEquals("# This is a comment" + recordSeparator, sw.toString());

Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java
URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java?rev=1409449&r1=1409448&r2=1409449&view=diff
==============================================================================
--- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java (original)
+++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/perf/PerformanceTest.java Wed Nov 14 21:50:36 2012
@@ -66,7 +66,7 @@ public class PerformanceTest {
     }
 
     private long parse(final Reader in, boolean traverseColumns) throws IOException {
-        final CSVFormat format = CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(false);
+        final CSVFormat format = CSVFormat.defaults().withIgnoreSurroundingSpaces(false).build();
         long recordCount = 0;
         for (final CSVRecord record : format.parse(in)) {
             recordCount++;



Mime
View raw message