Skip to content

Commit c446430

Browse files
Abstraction of export facade.
Only CSV supported right now.
1 parent 2a6343b commit c446430

File tree

10 files changed

+170
-72
lines changed

10 files changed

+170
-72
lines changed

src/main/java/org/fugerit/java/query/export/tool/data/FieldHandler.java renamed to src/main/java/org/fugerit/java/query/export/data/FieldHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.fugerit.java.query.export.tool.data;
1+
package org.fugerit.java.query.export.data;
22

33
public interface FieldHandler {
44

src/main/java/org/fugerit/java/query/export/tool/data/FieldMetaData.java renamed to src/main/java/org/fugerit/java/query/export/data/FieldMetaData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.fugerit.java.query.export.tool.data;
1+
package org.fugerit.java.query.export.data;
22

33
import org.fugerit.java.core.util.collection.KeyObject;
44

src/main/java/org/fugerit/java/query/export/tool/data/QueryMetaData.java renamed to src/main/java/org/fugerit/java/query/export/data/QueryMetaData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.fugerit.java.query.export.tool.data;
1+
package org.fugerit.java.query.export.data;
22

33
import org.fugerit.java.core.util.collection.ListMapStringKey;
44

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.fugerit.java.query.export.data;
2+
3+
public class QueryResultHandler {
4+
5+
6+
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.fugerit.java.query.export.data;
2+
3+
public class RecordHandler {
4+
5+
6+
7+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.fugerit.java.query.export.facade;
2+
3+
import java.io.OutputStream;
4+
import java.sql.Connection;
5+
6+
public class QueryExportConfig {
7+
8+
public static QueryExportConfig newConfigCSV( OutputStream output, Connection conn, String query ) {
9+
return new QueryExportConfig( QueryExportFacade.FORMAT_CSV , QueryExportFacade.CSV_SEPARATOR_DEF, output, conn, query );
10+
}
11+
12+
public static QueryExportConfig newConfigCSV( OutputStream output, Connection conn, String query, char separator ) {
13+
return new QueryExportConfig( QueryExportFacade.FORMAT_CSV , separator, output, conn, query );
14+
}
15+
16+
public QueryExportConfig(String format, char separator, OutputStream output, Connection conn, String query) {
17+
super();
18+
this.format = format;
19+
this.separator = separator;
20+
this.output = output;
21+
this.conn = conn;
22+
this.query = query;
23+
}
24+
25+
private String format;
26+
27+
private char separator;
28+
29+
private OutputStream output;
30+
31+
private Connection conn;
32+
33+
private String query;
34+
35+
public String getFormat() {
36+
return format;
37+
}
38+
39+
public char getSeparator() {
40+
return separator;
41+
}
42+
43+
public Connection getConn() {
44+
return conn;
45+
}
46+
47+
public String getQuery() {
48+
return query;
49+
}
50+
51+
public void setFormat(String format) {
52+
this.format = format;
53+
}
54+
55+
public void setSeparator(char separator) {
56+
this.separator = separator;
57+
}
58+
59+
public void setConn(Connection conn) {
60+
this.conn = conn;
61+
}
62+
63+
public void setQuery(String query) {
64+
this.query = query;
65+
}
66+
public OutputStream getOutput() {
67+
return output;
68+
}
69+
public void setOutput(OutputStream output) {
70+
this.output = output;
71+
}
72+
73+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.fugerit.java.query.export.facade;
2+
3+
import java.io.BufferedWriter;
4+
import java.io.OutputStreamWriter;
5+
import java.nio.charset.Charset;
6+
import java.sql.ResultSet;
7+
import java.sql.ResultSetMetaData;
8+
import java.sql.Statement;
9+
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
import com.opencsv.CSVWriter;
14+
15+
public class QueryExportFacade {
16+
17+
public static final String FORMAT_CSV = "csv";
18+
public static final String FORMAT_DEFAULT = FORMAT_CSV;
19+
public static final char CSV_SEPARATOR_DEF = ',';
20+
21+
protected static final Logger logger = LoggerFactory.getLogger(QueryExportFacade.class);
22+
23+
public static int export( QueryExportConfig config ) throws Exception {
24+
int res = 0;
25+
Statement stm = config.getConn().createStatement();
26+
logger.info( "sql : "+config.getQuery() );
27+
ResultSet rs = stm.executeQuery( config.getQuery() );
28+
int count = 0;
29+
ResultSetMetaData rsmd = rs.getMetaData();
30+
if ( FORMAT_CSV.equalsIgnoreCase( config.getFormat() ) ) {
31+
char separator = config.getSeparator();
32+
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( config.getOutput() , Charset.forName( "UTF-8" ) ) );
33+
CSVWriter csvwriter = new CSVWriter( writer,
34+
separator,
35+
'"',
36+
CSVWriter.NO_ESCAPE_CHARACTER,
37+
CSVWriter.DEFAULT_LINE_END);
38+
String[] line = new String[ rsmd.getColumnCount() ];
39+
for ( int k=0; k<rsmd.getColumnCount(); k++ ) {
40+
line[k] = rsmd.getColumnLabel( k+1 );
41+
}
42+
csvwriter.writeNext( line );
43+
while ( rs.next() ) {
44+
for ( int k=0; k<rsmd.getColumnCount(); k++ ) {
45+
line[k] = rs.getString( k+1 );
46+
}
47+
csvwriter.writeNext( line );
48+
count++;
49+
}
50+
csvwriter.flush();
51+
csvwriter.close();
52+
}
53+
rs.close();
54+
stm.close();
55+
logger.info( "record count "+count );
56+
return res;
57+
}
58+
59+
}

src/main/java/org/fugerit/java/query/export/tool/QueryExportToolMain.java

Lines changed: 21 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.fugerit.java.core.db.connect.ConnectionFactoryImpl;
1616
import org.fugerit.java.core.io.FileIO;
1717
import org.fugerit.java.core.util.PropsIO;
18+
import org.fugerit.java.query.export.facade.QueryExportFacade;
1819
import org.slf4j.Logger;
1920
import org.slf4j.LoggerFactory;
2021

@@ -29,78 +30,43 @@ public class QueryExportToolMain {
2930
public static final String ARG_OUTPUT_FILE = "output-file";
3031

3132
public static final String ARG_OUTPUT_FORMAT = "output-format";
32-
public static final String ARG_OUTPUT_FORMAT_CSV = "csv";
33-
public static final String ARG_OUTPUT_FORMAT_DEFAULT = ARG_OUTPUT_FORMAT_CSV;
34-
33+
3534
public static final String ARG_CSV_SEPARATOR = "csv-separator";
36-
public static final String ARG_CSV_SEPARATOR_DEF = ",";
3735

3836
protected static final Logger logger = LoggerFactory.getLogger(QueryExportToolMain.class);
3937

40-
public static void main( String[] args ) {
41-
Properties params = ArgUtils.getArgs( args );
38+
public static void main(String[] args) {
39+
Properties params = ArgUtils.getArgs(args);
4240
try {
43-
logger.info( "params: "+params );
44-
String dbConfig = params.getProperty( ARG_DB_CONFIG );
45-
String queryFile = params.getProperty( ARG_QUERY_FILE );
46-
String outputFile = params.getProperty( ARG_OUTPUT_FILE );
47-
String outputFormat = params.getProperty( ARG_OUTPUT_FORMAT, ARG_OUTPUT_FORMAT_DEFAULT );
48-
logger.info( "param : "+ARG_DB_CONFIG+"="+dbConfig );
49-
logger.info( "param : "+ARG_QUERY_FILE+"="+queryFile );
50-
logger.info( "param : "+ARG_OUTPUT_FILE+"="+outputFile );
51-
logger.info( "param : "+ARG_OUTPUT_FORMAT+"="+outputFormat );
52-
if ( queryFile == null || outputFile == null ) {
53-
throw new Exception( "Missing required arguments "+ARG_OUTPUT_FILE+", "+ARG_QUERY_FILE );
41+
logger.info("params: " + params);
42+
String dbConfig = params.getProperty(ARG_DB_CONFIG);
43+
String queryFile = params.getProperty(ARG_QUERY_FILE);
44+
String outputFile = params.getProperty(ARG_OUTPUT_FILE);
45+
String outputFormat = params.getProperty(ARG_OUTPUT_FORMAT, QueryExportFacade.FORMAT_DEFAULT );
46+
logger.info("param : " + ARG_DB_CONFIG + "=" + dbConfig);
47+
logger.info("param : " + ARG_QUERY_FILE + "=" + queryFile);
48+
logger.info("param : " + ARG_OUTPUT_FILE + "=" + outputFile);
49+
logger.info("param : " + ARG_OUTPUT_FORMAT + "=" + outputFormat);
50+
if (queryFile == null || outputFile == null) {
51+
throw new Exception("Missing required arguments " + ARG_OUTPUT_FILE + ", " + ARG_QUERY_FILE);
5452
} else {
55-
Properties props = PropsIO.loadFromFile( dbConfig );
56-
ConnectionFactory cf = ConnectionFactoryImpl.newInstance( props );
53+
Properties props = PropsIO.loadFromFile(dbConfig);
54+
ConnectionFactory cf = ConnectionFactoryImpl.newInstance(props);
5755
Connection conn = cf.getConnection();
5856
try {
59-
60-
61-
Statement stm = conn.createStatement();
57+
BufferedWriter writer = Files.newBufferedWriter( Paths.get( outputFile ), StandardCharsets.UTF_8 );
6258
String sql = FileIO.readString( queryFile );
63-
logger.info( "sql : "+sql );
64-
ResultSet rs = stm.executeQuery( sql );
65-
int count = 0;
66-
ResultSetMetaData rsmd = rs.getMetaData();
67-
if ( ARG_OUTPUT_FORMAT_CSV.equalsIgnoreCase( outputFormat ) ) {
68-
String separator = params.getProperty( ARG_CSV_SEPARATOR, ARG_CSV_SEPARATOR_DEF );
69-
BufferedWriter writer = Files.newBufferedWriter( Paths.get( outputFile ), StandardCharsets.UTF_8 );
70-
CSVWriter csvwriter = new CSVWriter( writer,
71-
separator.charAt( 0 ),
72-
'"',
73-
CSVWriter.NO_ESCAPE_CHARACTER,
74-
CSVWriter.DEFAULT_LINE_END);
75-
String[] line = new String[ rsmd.getColumnCount() ];
76-
for ( int k=0; k<rsmd.getColumnCount(); k++ ) {
77-
line[k] = rsmd.getColumnLabel( k+1 );
78-
}
79-
csvwriter.writeNext( line );
80-
while ( rs.next() ) {
81-
for ( int k=0; k<rsmd.getColumnCount(); k++ ) {
82-
line[k] = rs.getString( k+1 );
83-
}
84-
csvwriter.writeNext( line );
85-
count++;
86-
}
87-
csvwriter.flush();
88-
csvwriter.close();
89-
}
90-
91-
rs.close();
92-
stm.close();
93-
logger.info( "record count "+count );
59+
9460
} catch (Exception e) {
9561
throw e;
9662
} finally {
97-
if ( conn != null ) {
63+
if (conn != null) {
9864
conn.close();
9965
}
10066
}
10167
}
10268
} catch (Exception e) {
103-
logger.error( e.getMessage(), e );
69+
logger.error(e.getMessage(), e);
10470
}
10571
}
10672

src/main/java/org/fugerit/java/query/export/tool/data/QueryResultHandler.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/main/java/org/fugerit/java/query/export/tool/data/RecordHandler.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)