Author: ggregory
Date: Thu Nov 15 21:56:36 2012
New Revision: 1410045

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

Modified:
    commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVFormat.java
    
commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.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=1410045&r1=1410044&r2=1410045&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 
Thu Nov 15 21:56:36 2012
@@ -84,7 +84,7 @@ public class CSVFormat implements Serial
      * For example for parsing or generating a CSV file on a French system the 
following format will be used:
      *
      * <pre>
-     * CSVFormat fmt = CSVFormat.EXCEL.withDelimiter(';');
+     * CSVFormat fmt = CSVFormat.newBuilder(EXCEL).withDelimiter(';').build();
      * </pre>
      * Settings are:
      * <ul>
@@ -134,6 +134,10 @@ public class CSVFormat implements Serial
         return new CSVFormatBuilder(delimiter);
     }
 
+    public static CSVFormatBuilder newBuilder(final CSVFormat format) {
+        return new CSVFormatBuilder(format);
+    }
+    
     /**
      * Standard comma separated format, as for {@link #RFC4180} but allowing 
blank lines.
      * <ul>
@@ -422,6 +426,20 @@ public class CSVFormat implements Serial
             this.recordSeparator = lineSeparator;
             this.header = header;
         }
+        
+        /**
+         * 
+         * Creates a CSVFormatBuilder, using the values of the given CSVFormat.
+         * 
+         * @param format
+         *            The format to use values from
+         */
+        private CSVFormatBuilder(CSVFormat format) {
+            this(format.delimiter, format.quoteChar, format.quotePolicy,
+                    format.commentStart, format.escape,
+                    format.ignoreSurroundingSpaces, format.ignoreEmptyLines,
+                    format.recordSeparator, format.header);
+        }
 
         /**
          * Creates a basic CSVFormatBuilder.

Modified: 
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=1410045&r1=1410044&r2=1410045&view=diff
==============================================================================
--- 
commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java
 (original)
+++ 
commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVFormatBuilderTest.java
 Thu Nov 15 21:56:36 2012
@@ -17,11 +17,14 @@
 
 package org.apache.commons.csv;
 
+import static org.apache.commons.csv.CSVFormat.RFC4180;
 import static org.apache.commons.csv.Constants.CR;
 import static org.apache.commons.csv.Constants.CRLF;
 import static org.apache.commons.csv.Constants.LF;
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
 import org.junit.Before;
@@ -152,4 +155,29 @@ public class CSVFormatBuilderTest {
     public void testIgnoreEmptyLines() {
         
assertFalse(builder.withIgnoreEmptyLines(false).build().getIgnoreEmptyLines());
     }
+    
+    @Test
+    public void testCopiedFormatIsEqualToOriginal() {
+        CSVFormat copyOfRCF4180 = CSVFormat.newBuilder(RFC4180).build();
+        assertEqualFormats(RFC4180, copyOfRCF4180);
+    }
+
+    @Test
+    public void testCopiedFormatWithChanges() {
+        CSVFormat newFormat = 
CSVFormat.newBuilder(RFC4180).withDelimiter('!').build();
+        assertTrue(newFormat.getDelimiter() != RFC4180.getDelimiter());
+    }
+    
+    // FIXME implement equals on CSVFormat to allow use of 
Assert.assertEquals()
+    private static void assertEqualFormats(CSVFormat expected, CSVFormat 
acutal) {
+        assertEquals(expected.getCommentStart(), acutal.getCommentStart());
+        assertEquals(expected.getDelimiter(), acutal.getDelimiter());
+        assertEquals(expected.getEscape(), acutal.getEscape());
+        assertArrayEquals(expected.getHeader(), acutal.getHeader());
+        assertEquals(expected.getIgnoreEmptyLines(), 
acutal.getIgnoreEmptyLines());
+        assertEquals(expected.getIgnoreSurroundingSpaces(), 
acutal.getIgnoreSurroundingSpaces());
+        assertEquals(expected.getQuoteChar(), acutal.getQuoteChar());
+        assertEquals(expected.getQuotePolicy(), acutal.getQuotePolicy());
+        assertEquals(expected.getRecordSeparator(), 
acutal.getRecordSeparator());
+    }
 }


Reply via email to