From 6fb2b05739dfe5d228bf2cc54db4cee4eccf1e36 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Tue, 28 Dec 2010 15:54:24 +0000 Subject: [PATCH] Fixed issue 294: "Exporting date type column to TSV/CSV shows java debugging information instead of value" with help from Gabriel Sjoberg. git-svn-id: http://google-refine.googlecode.com/svn/trunk@1967 7d457c2a-affb-35e4-300a-418c747d4874 --- .../google/refine/exporters/CsvExporter.java | 13 +++++++++- .../tests/exporters/CsvExporterTests.java | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/main/src/com/google/refine/exporters/CsvExporter.java b/main/src/com/google/refine/exporters/CsvExporter.java index 3d44a01a0..cf3a146e0 100644 --- a/main/src/com/google/refine/exporters/CsvExporter.java +++ b/main/src/com/google/refine/exporters/CsvExporter.java @@ -35,6 +35,8 @@ package com.google.refine.exporters; import java.io.IOException; import java.io.Writer; +import java.util.Calendar; +import java.util.Date; import java.util.Properties; import org.slf4j.Logger; @@ -48,6 +50,7 @@ import com.google.refine.browsing.RowVisitor; import com.google.refine.model.Column; import com.google.refine.model.Project; import com.google.refine.model.Row; +import com.google.refine.util.ParsingUtilities; public class CsvExporter implements WriterExporter{ @@ -94,7 +97,15 @@ public class CsvExporter implements WriterExporter{ Object value = row.getCellValue(cellIndex); if (value != null) { - vals[i] = value instanceof String ? (String) value : value.toString(); + if (value instanceof String) { + vals[i] = (String) value; + } else if (value instanceof Calendar) { + vals[i] = ParsingUtilities.dateToString(((Calendar) value).getTime()); + } else if (value instanceof Date) { + vals[i] = ParsingUtilities.dateToString((Date) value); + } else { + vals[i] = value.toString(); + } } i++; } diff --git a/main/tests/server/src/com/google/refine/tests/exporters/CsvExporterTests.java b/main/tests/server/src/com/google/refine/tests/exporters/CsvExporterTests.java index d8a87c732..7b878706f 100644 --- a/main/tests/server/src/com/google/refine/tests/exporters/CsvExporterTests.java +++ b/main/tests/server/src/com/google/refine/tests/exporters/CsvExporterTests.java @@ -35,6 +35,8 @@ package com.google.refine.tests.exporters; import java.io.IOException; import java.io.StringWriter; +import java.util.Calendar; +import java.util.Date; import java.util.Properties; import static org.mockito.Mockito.mock; @@ -57,6 +59,7 @@ import com.google.refine.model.ModelException; import com.google.refine.model.Project; import com.google.refine.model.Row; import com.google.refine.tests.RefineTest; +import com.google.refine.util.ParsingUtilities; public class CsvExporterTests extends RefineTest { @@ -192,6 +195,28 @@ public class CsvExporterTests extends RefineTest { "row1cell0,,row1cell2\n" + ",row2cell1,row2cell2\n"); } + + @Test + public void exportDateColumns(){ + CreateGrid(1,1); + Calendar calendar = Calendar.getInstance(); + Date date = new Date(); + + when(options.getProperty("printColumnHeader")).thenReturn("false"); + project.rows.get(0).cells.set(0, new Cell(calendar, null)); + project.rows.get(0).cells.set(1, new Cell(date, null)); + + try { + SUT.export(project, options, engine, writer); + } catch (IOException e) { + Assert.fail(); + } + + String expectedOutput = ParsingUtilities.dateToString(calendar.getTime()) + "," + + ParsingUtilities.dateToString(date) + "\n"; + + Assert.assertEquals(writer.toString(), expectedOutput); + } //helper methods