You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/09/21 19:38:27 UTC

svn commit: r817339 - /incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java

Author: tvolkert
Date: Mon Sep 21 17:38:26 2009
New Revision: 817339

URL: http://svn.apache.org/viewvc?rev=817339&view=rev
Log:
PIVOT-302 :: Fix CSVSerializer

Modified:
    incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java?rev=817339&r1=817338&r2=817339&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/serialization/CSVSerializer.java Mon Sep 21 17:38:26 2009
@@ -266,7 +266,8 @@
     }
 
     private void logException(Exception exception) {
-        System.err.println("An error occurred while processing input at line number " + getLineNumber());
+        System.err.println("An error occurred while processing input at line number "
+            + getLineNumber());
     }
 
     /**
@@ -367,14 +368,24 @@
             }
 
             while (c != -1
-                && (quoted || c != ',')
-                && (c != '\r' && c != '\n')) {
+                && (quoted || (c != ',' && c != '\r' && c != '\n'))) {
                 if (c == '"') {
+                    if (!quoted) {
+                        throw new SerializationException("Dangling quote.");
+                    }
+
                     c = reader.read();
+
+                    if (c != '"'
+                        && (c != ',' && c != '\r' && c != '\n' && c != -1)) {
+                        throw new SerializationException("Prematurely terminated quote.");
+                    }
+
                     quoted &= (c == '"');
                 }
 
-                if (quoted || c != ',') {
+                if (c != -1
+                    && (quoted || (c != ',' && c != '\r' && c != '\n'))) {
                     valueBuilder.append((char)c);
                     c = reader.read();
                 }
@@ -458,7 +469,27 @@
                 }
 
                 Object value = itemDictionary.get(key);
-                writer.append(value.toString());
+
+                if (value != null) {
+                    String string = value.toString();
+
+                    if (string.indexOf(',') >= 0
+                        || string.indexOf('"') >= 0
+                        || string.indexOf('\r') >= 0
+                        || string.indexOf('\n') >= 0) {
+                        writer.append('"');
+
+                        if (string.indexOf('"') == -1) {
+                            writer.append(string);
+                        } else {
+                            writer.append(string.replace("\"", "\"\""));
+                        }
+
+                        writer.append('"');
+                    } else {
+                        writer.append(string);
+                    }
+                }
             }
 
             writer.append("\r\n");