Skip to content

Commit 1f4aa72

Browse files
Safe load for query handlers
1 parent 545b53c commit 1f4aa72

File tree

1 file changed

+68
-59
lines changed

1 file changed

+68
-59
lines changed
Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,68 @@
1-
package org.fugerit.java.query.export.facade;
2-
3-
import java.sql.ResultSet;
4-
import java.sql.Statement;
5-
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;
10-
import org.fugerit.java.query.export.meta.BasicMetaRSE;
11-
import org.fugerit.java.query.export.meta.BasicMetaResult;
12-
import org.fugerit.java.query.export.meta.MetaResult;
13-
import org.slf4j.Logger;
14-
import org.slf4j.LoggerFactory;
15-
16-
public class QueryExportFacade {
17-
18-
public static final String FORMAT_XLS = "xls";
19-
public static final String FORMAT_XLSX = "xlsx";
20-
21-
public static final String FORMAT_CSV = "csv";
22-
public static final String FORMAT_DEFAULT = FORMAT_CSV;
23-
public static final char CSV_SEPARATOR_DEF = ',';
24-
25-
protected static final Logger logger = LoggerFactory.getLogger(QueryExportFacade.class);
26-
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-
34-
public static int export( QueryExportConfig config ) throws Exception {
35-
int res = 0;
36-
Statement stm = config.getConn().createStatement();
37-
logger.info( "sql : "+config.getQuery() );
38-
ResultSet rs = stm.executeQuery( config.getQuery() );
39-
MetaResult meta = new BasicMetaResult( BasicMetaRSE.newInstanceAllToString( rs.getMetaData(), config.getObjectFormat() ) , rs );
40-
export( config, meta );
41-
int count = meta.close();
42-
stm.close();
43-
logger.info( "record count "+count );
44-
return res;
45-
}
46-
47-
public static int export( QueryExportConfig config, MetaResult meta ) throws Exception {
48-
int res = 0;
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 );
55-
}
56-
return res;
57-
}
58-
59-
}
1+
package org.fugerit.java.query.export.facade;
2+
3+
import java.sql.ResultSet;
4+
import java.sql.Statement;
5+
6+
import org.fugerit.java.core.lang.helpers.ClassHelper;
7+
import org.fugerit.java.core.util.collection.ListMapStringKey;
8+
import org.fugerit.java.query.export.meta.BasicMetaRSE;
9+
import org.fugerit.java.query.export.meta.BasicMetaResult;
10+
import org.fugerit.java.query.export.meta.MetaResult;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
public class QueryExportFacade {
15+
16+
public static final String FORMAT_XLS = "xls";
17+
public static final String FORMAT_XLSX = "xlsx";
18+
19+
public static final String FORMAT_CSV = "csv";
20+
public static final String FORMAT_DEFAULT = FORMAT_CSV;
21+
public static final char CSV_SEPARATOR_DEF = ',';
22+
23+
protected static final Logger logger = LoggerFactory.getLogger(QueryExportFacade.class);
24+
25+
private static void registerHandler( String type, ListMapStringKey<QueryExportHandler> handlers ) {
26+
try {
27+
QueryExportHandler handler = (QueryExportHandler)ClassHelper.newInstance( type );
28+
handlers.add( handler );
29+
} catch (Throwable e) {
30+
String message = "Failed to register handler : "+type+" "+e;
31+
logger.warn( message+" [set log level to debug for full stack trace]" );
32+
logger.debug( message, e );
33+
}
34+
}
35+
36+
private static ListMapStringKey<QueryExportHandler> HANDLERS = new ListMapStringKey<QueryExportHandler>();
37+
static {
38+
registerHandler( "org.fugerit.java.query.export.facade.format.QueryExportHandlerCSV" , HANDLERS );
39+
registerHandler( "org.fugerit.java.query.export.facade.format.QueryExportHandlerXLS" , HANDLERS );
40+
registerHandler( "org.fugerit.java.query.export.facade.format.QueryExportHandlerXLSX" , HANDLERS );
41+
}
42+
43+
public static int export( QueryExportConfig config ) throws Exception {
44+
int res = 0;
45+
Statement stm = config.getConn().createStatement();
46+
logger.info( "sql : "+config.getQuery() );
47+
ResultSet rs = stm.executeQuery( config.getQuery() );
48+
MetaResult meta = new BasicMetaResult( BasicMetaRSE.newInstanceAllToString( rs.getMetaData(), config.getObjectFormat() ) , rs );
49+
export( config, meta );
50+
int count = meta.close();
51+
stm.close();
52+
logger.info( "record count "+count );
53+
return res;
54+
}
55+
56+
public static int export( QueryExportConfig config, MetaResult meta ) throws Exception {
57+
int res = 0;
58+
String format = config.getFormat().toLowerCase();
59+
QueryExportHandler handler = HANDLERS.get( format );
60+
if ( handler != null ) {
61+
res = handler.export(config, meta);
62+
} else {
63+
throw new Exception( "Unsupported export format "+format );
64+
}
65+
return res;
66+
}
67+
68+
}

0 commit comments

Comments
 (0)