Skip to content

Commit 97e195e

Browse files
Added export format for XLS/XLSX (poi)
Created handler for output format
1 parent 61729b0 commit 97e195e

File tree

10 files changed

+330
-40
lines changed

10 files changed

+330
-40
lines changed

pom.xml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
<dependency>
6262
<groupId>org.fugerit.java</groupId>
6363
<artifactId>fj-core</artifactId>
64-
<version>0.2.4.6</version>
64+
<version>0.4.6</version>
6565
</dependency>
6666

6767
<!-- java core dependancies -->
@@ -83,6 +83,19 @@
8383
<version>4.6</version>
8484
</dependency>
8585

86+
<dependency>
87+
<groupId>org.apache.poi</groupId>
88+
<artifactId>poi</artifactId>
89+
<version>3.16</version>
90+
</dependency>
91+
92+
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
93+
<dependency>
94+
<groupId>org.apache.poi</groupId>
95+
<artifactId>poi-ooxml</artifactId>
96+
<version>3.16</version>
97+
</dependency>
98+
8699
<dependency>
87100
<groupId>org.hsqldb</groupId>
88101
<artifactId>hsqldb</artifactId>

src/main/java/org/fugerit/java/query/export/facade/QueryExportConfig.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.OutputStream;
44
import java.sql.Connection;
5+
import java.util.Properties;
56

67
import org.fugerit.java.query.export.meta.BasicObjectFormat;
78

@@ -49,6 +50,16 @@ public QueryExportConfig(String format, char separator, OutputStream output, Con
4950

5051
private BasicObjectFormat objectFormat;
5152

53+
private Properties params;
54+
55+
public Properties getParams() {
56+
return params;
57+
}
58+
59+
public void setParams(Properties params) {
60+
this.params = params;
61+
}
62+
5263
public String getFormat() {
5364
return format;
5465
}

src/main/java/org/fugerit/java/query/export/facade/QueryExportFacade.java

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,36 @@
11
package org.fugerit.java.query.export.facade;
22

3-
import java.io.BufferedWriter;
4-
import java.io.OutputStreamWriter;
5-
import java.nio.charset.Charset;
63
import java.sql.ResultSet;
74
import java.sql.Statement;
8-
import java.util.Iterator;
95

6+
import org.fugerit.java.core.util.collection.ListMapStringKey;
7+
import org.fugerit.java.query.export.facade.format.QueryExportHandlerCSV;
8+
import org.fugerit.java.query.export.facade.format.QueryExportHandlerXLS;
9+
import org.fugerit.java.query.export.facade.format.QueryExportHandlerXLSX;
1010
import org.fugerit.java.query.export.meta.BasicMetaRSE;
1111
import org.fugerit.java.query.export.meta.BasicMetaResult;
12-
import org.fugerit.java.query.export.meta.MetaField;
13-
import org.fugerit.java.query.export.meta.MetaRecord;
1412
import org.fugerit.java.query.export.meta.MetaResult;
1513
import org.slf4j.Logger;
1614
import org.slf4j.LoggerFactory;
1715

18-
import com.opencsv.CSVWriter;
19-
2016
public class QueryExportFacade {
2117

18+
public static final String FORMAT_XLS = "xls";
19+
public static final String FORMAT_XLSX = "xlsx";
20+
2221
public static final String FORMAT_CSV = "csv";
2322
public static final String FORMAT_DEFAULT = FORMAT_CSV;
2423
public static final char CSV_SEPARATOR_DEF = ',';
2524

2625
protected static final Logger logger = LoggerFactory.getLogger(QueryExportFacade.class);
2726

27+
private static ListMapStringKey<QueryExportHandler> HANDLERS = new ListMapStringKey<QueryExportHandler>();
28+
static {
29+
HANDLERS.add( new QueryExportHandlerCSV() );
30+
HANDLERS.add( new QueryExportHandlerXLS() );
31+
HANDLERS.add( new QueryExportHandlerXLSX() );
32+
}
33+
2834
public static int export( QueryExportConfig config ) throws Exception {
2935
int res = 0;
3036
Statement stm = config.getConn().createStatement();
@@ -38,39 +44,14 @@ public static int export( QueryExportConfig config ) throws Exception {
3844
return res;
3945
}
4046

41-
private static void writeRecordCSV( String[] line, Iterator<MetaField> itField, CSVWriter csvwriter ) throws Exception {
42-
int k = 0;
43-
while ( itField.hasNext() ) {
44-
MetaField field = itField.next();
45-
line[k] = field.getStringValue();
46-
k++;
47-
}
48-
csvwriter.writeNext( line );
49-
}
50-
5147
public static int export( QueryExportConfig config, MetaResult meta ) throws Exception {
5248
int res = 0;
53-
int columnCount = meta.getColumnCount();
54-
if ( FORMAT_CSV.equalsIgnoreCase( config.getFormat() ) ) {
55-
char separator = config.getSeparator();
56-
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( config.getOutput() , Charset.forName( "UTF-8" ) ) );
57-
CSVWriter csvwriter = new CSVWriter( writer,
58-
separator,
59-
'"',
60-
CSVWriter.NO_ESCAPE_CHARACTER,
61-
CSVWriter.DEFAULT_LINE_END);
62-
String[] line = new String[ columnCount ];
63-
if ( meta.hasHeader() ) {
64-
writeRecordCSV(line, meta.headerIterator(), csvwriter);
65-
}
66-
Iterator<MetaRecord> itRec = meta.recordIterator();
67-
while ( itRec.hasNext() ) {
68-
MetaRecord record = itRec.next();
69-
Iterator<MetaField> itField = record.fieldIterator();
70-
writeRecordCSV(line, itField, csvwriter);
71-
}
72-
csvwriter.flush();
73-
csvwriter.close();
49+
String format = config.getFormat().toLowerCase();
50+
QueryExportHandler handler = HANDLERS.get( format );
51+
if ( handler != null ) {
52+
res = handler.export(config, meta);
53+
} else {
54+
throw new Exception( "Unsupported export format "+format );
7455
}
7556
return res;
7657
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.fugerit.java.query.export.facade;
2+
3+
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.util.Iterator;
6+
7+
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
8+
import org.apache.poi.ss.usermodel.Cell;
9+
import org.apache.poi.ss.usermodel.Row;
10+
import org.apache.poi.ss.usermodel.Sheet;
11+
import org.apache.poi.ss.usermodel.Workbook;
12+
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
13+
import org.fugerit.java.query.export.meta.MetaField;
14+
import org.fugerit.java.query.export.meta.MetaRecord;
15+
import org.fugerit.java.query.export.meta.MetaResult;
16+
17+
public class QueryExportFacadeXLS {
18+
19+
public static final String ARG_XLS_TEMPLATE = "xls-template";
20+
21+
private static void addRow( Iterator<MetaField> record, Sheet sheet, int index ) throws Exception {
22+
int col = 0;
23+
Row row = sheet.createRow( index );
24+
while ( record.hasNext() ) {
25+
MetaField field = record.next();
26+
String value = field.getStringValue();
27+
Cell cell = row.createCell( col );
28+
cell.setCellValue( value );
29+
col++;
30+
}
31+
}
32+
33+
public static int export( QueryExportConfig config, MetaResult meta ) throws Exception {
34+
int res = 0;
35+
Workbook workbook = null;
36+
Sheet sheet = null;
37+
String xlsTemplate = config.getParams().getProperty( ARG_XLS_TEMPLATE );
38+
if ( xlsTemplate == null ) {
39+
if ( QueryExportFacade.FORMAT_XLS.equalsIgnoreCase( config.getFormat() ) ) {
40+
workbook = new HSSFWorkbook();
41+
} else {
42+
workbook = new XSSFWorkbook();
43+
}
44+
sheet = workbook.createSheet();
45+
if ( meta.hasHeader() ) {
46+
addRow( meta.headerIterator() , sheet, 0 );
47+
}
48+
} else {
49+
FileInputStream fis = new FileInputStream( new File( xlsTemplate ) );
50+
if ( QueryExportFacade.FORMAT_XLS.equalsIgnoreCase( config.getFormat() ) ) {
51+
workbook = new HSSFWorkbook( fis );
52+
} else {
53+
workbook = new XSSFWorkbook( fis );
54+
}
55+
fis.close();
56+
sheet = workbook.getSheetAt( 0 );
57+
}
58+
int index = 1;
59+
Iterator<MetaRecord> itRec = meta.recordIterator();
60+
while ( itRec.hasNext() ) {
61+
MetaRecord record = itRec.next();
62+
addRow( record.fieldIterator() , sheet, index );
63+
index++;
64+
}
65+
workbook.write( config.getOutput() );
66+
workbook.close();
67+
return res;
68+
}
69+
70+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.fugerit.java.query.export.facade;
2+
3+
import org.fugerit.java.core.util.collection.KeyObject;
4+
import org.fugerit.java.query.export.meta.MetaResult;
5+
6+
public abstract class QueryExportHandler implements KeyObject<String> {
7+
8+
public static final int EXIT_OK = 0;
9+
10+
private String format;
11+
12+
public String getFormat() {
13+
return format;
14+
}
15+
16+
public QueryExportHandler(String format) {
17+
super();
18+
this.format = format;
19+
}
20+
21+
public abstract int export( QueryExportConfig config, MetaResult meta ) throws Exception;
22+
23+
@Override
24+
public String getKey() {
25+
return this.getFormat();
26+
}
27+
28+
}
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.format;
2+
3+
import java.io.BufferedWriter;
4+
import java.io.OutputStreamWriter;
5+
import java.nio.charset.Charset;
6+
import java.util.Iterator;
7+
8+
import org.fugerit.java.query.export.facade.QueryExportConfig;
9+
import org.fugerit.java.query.export.facade.QueryExportFacade;
10+
import org.fugerit.java.query.export.facade.QueryExportHandler;
11+
import org.fugerit.java.query.export.meta.MetaField;
12+
import org.fugerit.java.query.export.meta.MetaRecord;
13+
import org.fugerit.java.query.export.meta.MetaResult;
14+
15+
import com.opencsv.CSVWriter;
16+
17+
public class QueryExportHandlerCSV extends QueryExportHandler {
18+
19+
@Override
20+
public int export(QueryExportConfig config, MetaResult meta) throws Exception {
21+
int res = EXIT_OK;
22+
int columnCount = meta.getColumnCount();
23+
char separator = config.getSeparator();
24+
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( config.getOutput() , Charset.forName( "UTF-8" ) ) );
25+
CSVWriter csvwriter = new CSVWriter( writer,
26+
separator,
27+
'"',
28+
CSVWriter.NO_ESCAPE_CHARACTER,
29+
CSVWriter.DEFAULT_LINE_END);
30+
String[] line = new String[ columnCount ];
31+
if ( meta.hasHeader() ) {
32+
writeRecordCSV(line, meta.headerIterator(), csvwriter);
33+
}
34+
Iterator<MetaRecord> itRec = meta.recordIterator();
35+
while ( itRec.hasNext() ) {
36+
MetaRecord record = itRec.next();
37+
Iterator<MetaField> itField = record.fieldIterator();
38+
writeRecordCSV(line, itField, csvwriter);
39+
}
40+
csvwriter.flush();
41+
csvwriter.close();
42+
return res;
43+
}
44+
45+
public QueryExportHandlerCSV() {
46+
super( QueryExportFacade.FORMAT_CSV );
47+
}
48+
49+
private static void writeRecordCSV( String[] line, Iterator<MetaField> itField, CSVWriter csvwriter ) throws Exception {
50+
int k = 0;
51+
while ( itField.hasNext() ) {
52+
MetaField field = itField.next();
53+
line[k] = field.getStringValue();
54+
k++;
55+
}
56+
csvwriter.writeNext( line );
57+
}
58+
59+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.fugerit.java.query.export.facade.format;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
6+
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
7+
import org.apache.poi.ss.usermodel.Workbook;
8+
import org.fugerit.java.query.export.facade.QueryExportFacade;
9+
10+
public class QueryExportHandlerXLS extends QueryExportHandlerXLSBase {
11+
12+
public QueryExportHandlerXLS() {
13+
super( QueryExportFacade.FORMAT_XLS );
14+
}
15+
16+
@Override
17+
public Workbook newWorkbook() {
18+
return new HSSFWorkbook();
19+
}
20+
21+
@Override
22+
public Workbook newWorkbook(InputStream is) throws IOException {
23+
return new HSSFWorkbook( is );
24+
}
25+
26+
27+
28+
}

0 commit comments

Comments
 (0)