From 05514b7f2d7164bf3a550d54efe297168a5f79f7 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 17 Mar 2015 10:31:19 +0100 Subject: [PATCH] [#4141] Add support for specifying the encoding when loading CSV or JSON with the Loader API --- .../main/java/org/jooq/LoaderSourceStep.java | 111 ++++++++++++ .../main/java/org/jooq/impl/LoaderImpl.java | 166 +++++++++++++----- 2 files changed, 233 insertions(+), 44 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/LoaderSourceStep.java b/jOOQ/src/main/java/org/jooq/LoaderSourceStep.java index c56e07aaa9..931d872aff 100644 --- a/jOOQ/src/main/java/org/jooq/LoaderSourceStep.java +++ b/jOOQ/src/main/java/org/jooq/LoaderSourceStep.java @@ -44,6 +44,9 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.Reader; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; import org.xml.sax.InputSource; @@ -64,6 +67,24 @@ public interface LoaderSourceStep> { @Support LoaderCSVStep loadCSV(File file) throws FileNotFoundException; + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException; + + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(File file, Charset cs) throws FileNotFoundException; + + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(File file, CharsetDecoder dec) throws FileNotFoundException; + /** * Load CSV data */ @@ -76,6 +97,24 @@ public interface LoaderSourceStep> { @Support LoaderCSVStep loadCSV(InputStream stream); + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(InputStream stream, String charsetName) throws UnsupportedEncodingException; + + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(InputStream stream, Charset cs); + + /** + * Load CSV data + */ + @Support + LoaderCSVStep loadCSV(InputStream stream, CharsetDecoder dec); + /** * Load CSV data */ @@ -88,6 +127,24 @@ public interface LoaderSourceStep> { @Support LoaderXMLStep loadXML(File file) throws FileNotFoundException; + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException; + + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(File file, Charset cs) throws FileNotFoundException; + + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(File file, CharsetDecoder dec) throws FileNotFoundException; + /** * Load XML data */ @@ -100,6 +157,24 @@ public interface LoaderSourceStep> { @Support LoaderXMLStep loadXML(InputStream stream); + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(InputStream stream, String charsetName) throws UnsupportedEncodingException; + + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(InputStream stream, Charset cs); + + /** + * Load XML data + */ + @Support + LoaderXMLStep loadXML(InputStream stream, CharsetDecoder dec); + /** * Load XML data */ @@ -118,6 +193,24 @@ public interface LoaderSourceStep> { @Support LoaderJSONStep loadJSON(File file) throws FileNotFoundException; + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException; + + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(File file, Charset cs) throws FileNotFoundException; + + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(File file, CharsetDecoder dec) throws FileNotFoundException; + /** * Load JSON data */ @@ -130,6 +223,24 @@ public interface LoaderSourceStep> { @Support LoaderJSONStep loadJSON(InputStream stream); + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(InputStream stream, String charsetName) throws UnsupportedEncodingException; + + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(InputStream stream, Charset cs); + + /** + * Load JSON data + */ + @Support + LoaderJSONStep loadJSON(InputStream stream, CharsetDecoder dec); + /** * Load JSON data */ diff --git a/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java b/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java index 06eb8dc1d6..e3dc900091 100644 --- a/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java @@ -42,6 +42,7 @@ package org.jooq.impl; import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; @@ -49,6 +50,9 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -269,23 +273,47 @@ class LoaderImpl> implements @Override public final LoaderImpl loadCSV(File file) throws FileNotFoundException { - content = CONTENT_CSV; - data = new BufferedReader(new FileReader(file)); - return this; + return loadCSV(new FileReader(file)); + } + + @Override + public final LoaderImpl loadCSV(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException { + return loadCSV(new FileInputStream(file), charsetName); + } + + @Override + public final LoaderImpl loadCSV(File file, Charset cs) throws FileNotFoundException { + return loadCSV(new FileInputStream(file), cs); + } + + @Override + public final LoaderImpl loadCSV(File file, CharsetDecoder dec) throws FileNotFoundException { + return loadCSV(new FileInputStream(file), dec); } @Override public final LoaderImpl loadCSV(String csv) { - content = CONTENT_CSV; - data = new BufferedReader(new StringReader(csv)); - return this; + return loadCSV(new StringReader(csv)); } @Override public final LoaderImpl loadCSV(InputStream stream) { - content = CONTENT_CSV; - data = new BufferedReader(new InputStreamReader(stream)); - return this; + return loadCSV(new InputStreamReader(stream)); + } + + @Override + public final LoaderImpl loadCSV(InputStream stream, String charsetName) throws UnsupportedEncodingException { + return loadCSV(new InputStreamReader(stream, charsetName)); + } + + @Override + public final LoaderImpl loadCSV(InputStream stream, Charset cs) { + return loadCSV(new InputStreamReader(stream, cs)); + } + + @Override + public final LoaderImpl loadCSV(InputStream stream, CharsetDecoder dec) { + return loadCSV(new InputStreamReader(stream, dec)); } @Override @@ -297,20 +325,47 @@ class LoaderImpl> implements @Override public final LoaderImpl loadXML(File file) throws FileNotFoundException { - content = CONTENT_XML; - throw new UnsupportedOperationException("This is not yet implemented"); + return loadXML(new FileReader(file)); + } + + @Override + public final LoaderImpl loadXML(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException { + return loadXML(new FileInputStream(file), charsetName); + } + + @Override + public final LoaderImpl loadXML(File file, Charset cs) throws FileNotFoundException { + return loadXML(new FileInputStream(file), cs); + } + + @Override + public final LoaderImpl loadXML(File file, CharsetDecoder dec) throws FileNotFoundException { + return loadXML(new FileInputStream(file), dec); } @Override public final LoaderImpl loadXML(String xml) { - content = CONTENT_XML; - throw new UnsupportedOperationException("This is not yet implemented"); + return loadXML(new StringReader(xml)); } @Override public final LoaderImpl loadXML(InputStream stream) { - content = CONTENT_XML; - throw new UnsupportedOperationException("This is not yet implemented"); + return loadXML(new InputStreamReader(stream)); + } + + @Override + public final LoaderImpl loadXML(InputStream stream, String charsetName) throws UnsupportedEncodingException { + return loadXML(new InputStreamReader(stream, charsetName)); + } + + @Override + public final LoaderImpl loadXML(InputStream stream, Charset cs) { + return loadXML(new InputStreamReader(stream, cs)); + } + + @Override + public final LoaderImpl loadXML(InputStream stream, CharsetDecoder dec) { + return loadXML(new InputStreamReader(stream, dec)); } @Override @@ -325,6 +380,58 @@ class LoaderImpl> implements throw new UnsupportedOperationException("This is not yet implemented"); } + @Override + public final LoaderImpl loadJSON(File file) throws FileNotFoundException { + return loadJSON(new FileReader(file)); + } + + @Override + public final LoaderImpl loadJSON(File file, String charsetName) throws FileNotFoundException, UnsupportedEncodingException { + return loadJSON(new FileInputStream(file), charsetName); + } + + @Override + public final LoaderImpl loadJSON(File file, Charset cs) throws FileNotFoundException { + return loadJSON(new FileInputStream(file), cs); + } + + @Override + public final LoaderImpl loadJSON(File file, CharsetDecoder dec) throws FileNotFoundException { + return loadJSON(new FileInputStream(file), dec); + } + + @Override + public final LoaderImpl loadJSON(String json) { + return loadJSON(new StringReader(json)); + } + + @Override + public final LoaderImpl loadJSON(InputStream stream) { + return loadJSON(new InputStreamReader(stream)); + } + + @Override + public final LoaderImpl loadJSON(InputStream stream, String charsetName) throws UnsupportedEncodingException { + return loadJSON(new InputStreamReader(stream, charsetName)); + } + + @Override + public final LoaderImpl loadJSON(InputStream stream, Charset cs) { + return loadJSON(new InputStreamReader(stream, cs)); + } + + @Override + public final LoaderImpl loadJSON(InputStream stream, CharsetDecoder dec) { + return loadJSON(new InputStreamReader(stream, dec)); + } + + @Override + public final LoaderImpl loadJSON(Reader reader) { + content = CONTENT_JSON; + data = new BufferedReader(reader); + return this; + } + // ------------------------------------------------------------------------- // CSV configuration // ------------------------------------------------------------------------- @@ -376,35 +483,6 @@ class LoaderImpl> implements return this; } - @Override - public final LoaderJSONStep loadJSON(File file) throws FileNotFoundException { - content = CONTENT_JSON; - data = new BufferedReader(new FileReader(file)); - return this; - } - - @Override - public final LoaderJSONStep loadJSON(String json) { - content = CONTENT_JSON; - data = new BufferedReader(new StringReader(json)); - return this; - - } - - @Override - public final LoaderJSONStep loadJSON(InputStream stream) { - content = CONTENT_JSON; - data = new BufferedReader(new InputStreamReader(stream)); - return this; - } - - @Override - public final LoaderJSONStep loadJSON(Reader reader) { - content = CONTENT_JSON; - data = new BufferedReader(reader); - return this; - } - // ------------------------------------------------------------------------- // XML configuration // -------------------------------------------------------------------------