commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: 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 Thu, 15 Nov 2012 12:47:01 GMT
I will when we are done. I thought you said there was one more thing to do?

Gary

On Nov 15, 2012, at 4:24, Benedikt Ritter <beneritter@gmail.com> wrote:

> Hi Gary,
>
> can you add this to changes.xml please ;-)
>
> Benedikt
>
>
> 2012/11/14 <ggregory@apache.org>
>
>> 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++;
>>
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message