diff --git a/main/src/com/google/refine/commands/project/ExportRowsCommand.java b/main/src/com/google/refine/commands/project/ExportRowsCommand.java index ebdbed118..2a346fb4b 100644 --- a/main/src/com/google/refine/commands/project/ExportRowsCommand.java +++ b/main/src/com/google/refine/commands/project/ExportRowsCommand.java @@ -15,6 +15,8 @@ import com.google.refine.commands.Command; import com.google.refine.exporters.CsvExporter; import com.google.refine.exporters.Exporter; import com.google.refine.exporters.ExporterRegistry; +import com.google.refine.exporters.StreamExporter; +import com.google.refine.exporters.WriterExporter; import com.google.refine.model.Project; public class ExportRowsCommand extends Command { @@ -50,11 +52,15 @@ public class ExportRowsCommand extends Command { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", exporter.getContentType()); - if (exporter.takeWriter()) { + if (exporter instanceof WriterExporter) { PrintWriter writer = response.getWriter(); - exporter.export(project, options, engine, writer); + ((WriterExporter) exporter).export(project, options, engine, writer); + } else if (exporter instanceof StreamExporter) { + ((StreamExporter) exporter).export(project, options, engine, response.getOutputStream()); + } else if (exporter instanceof StreamExporter) { + ((StreamExporter) exporter).export(project, options, engine, response.getOutputStream()); } else { - exporter.export(project, options, engine, response.getOutputStream()); + respondException(response, new RuntimeException("Unknown exporter type")); } } catch (Exception e) { respondException(response, e); diff --git a/main/src/com/google/refine/exporters/CsvExporter.java b/main/src/com/google/refine/exporters/CsvExporter.java index a4f2fc2ce..6d3e0ccf6 100644 --- a/main/src/com/google/refine/exporters/CsvExporter.java +++ b/main/src/com/google/refine/exporters/CsvExporter.java @@ -1,7 +1,6 @@ package com.google.refine.exporters; import java.io.IOException; -import java.io.OutputStream; import java.io.Writer; import java.util.Properties; @@ -17,7 +16,7 @@ import com.google.refine.model.Column; import com.google.refine.model.Project; import com.google.refine.model.Row; -public class CsvExporter implements Exporter{ +public class CsvExporter implements WriterExporter{ final static Logger logger = LoggerFactory.getLogger("CsvExporter"); char separator; @@ -30,12 +29,6 @@ public class CsvExporter implements Exporter{ this.separator = separator; } - @Override - public void export(Project project, Properties options, Engine engine, OutputStream outputStream) - throws IOException { - throw new RuntimeException("Not implemented"); - } - @Override public void export(Project project, Properties options, Engine engine, Writer writer) throws IOException { boolean printColumnHeader = true; @@ -107,9 +100,4 @@ public class CsvExporter implements Exporter{ return "application/x-unknown"; } - @Override - public boolean takeWriter() { - return true; - } - } diff --git a/main/src/com/google/refine/exporters/Exporter.java b/main/src/com/google/refine/exporters/Exporter.java index f92b32fe4..ecd5778e0 100644 --- a/main/src/com/google/refine/exporters/Exporter.java +++ b/main/src/com/google/refine/exporters/Exporter.java @@ -1,19 +1,9 @@ package com.google.refine.exporters; -import java.io.IOException; -import java.io.OutputStream; -import java.io.Writer; -import java.util.Properties; - -import com.google.refine.browsing.Engine; -import com.google.refine.model.Project; public interface Exporter { + /** + * @return MIME content type handled by exporter + */ public String getContentType(); - - public boolean takeWriter(); - - public void export(Project project, Properties options, Engine engine, OutputStream outputStream) throws IOException; - - public void export(Project project, Properties options, Engine engine, Writer writer) throws IOException; } diff --git a/main/src/com/google/refine/exporters/StreamExporter.java b/main/src/com/google/refine/exporters/StreamExporter.java new file mode 100644 index 000000000..925ea975c --- /dev/null +++ b/main/src/com/google/refine/exporters/StreamExporter.java @@ -0,0 +1,15 @@ +package com.google.refine.exporters; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Properties; + +import com.google.refine.browsing.Engine; +import com.google.refine.model.Project; + + +public interface StreamExporter extends Exporter { + + public void export(Project project, Properties options, Engine engine, OutputStream outputStream) throws IOException; + +} diff --git a/main/src/com/google/refine/exporters/UrlExporter.java b/main/src/com/google/refine/exporters/UrlExporter.java new file mode 100644 index 000000000..50358768f --- /dev/null +++ b/main/src/com/google/refine/exporters/UrlExporter.java @@ -0,0 +1,16 @@ +package com.google.refine.exporters; + +import java.io.IOException; +import java.net.URL; +import java.util.Properties; + +import com.google.refine.browsing.Engine; +import com.google.refine.model.Project; + + +public interface UrlExporter extends Exporter { + + + public void export(Project project, Properties options, Engine engine, URL url) throws IOException; + +} diff --git a/main/src/com/google/refine/exporters/WriterExporter.java b/main/src/com/google/refine/exporters/WriterExporter.java new file mode 100644 index 000000000..b9c9580f4 --- /dev/null +++ b/main/src/com/google/refine/exporters/WriterExporter.java @@ -0,0 +1,15 @@ + +package com.google.refine.exporters; + +import java.io.IOException; +import java.io.Writer; +import java.util.Properties; + +import com.google.refine.browsing.Engine; +import com.google.refine.model.Project; + +public interface WriterExporter extends Exporter { + + public void export(Project project, Properties options, Engine engine, Writer writer) throws IOException; + +}