package binky.reportrunner.ui.actions.dashboard.edit; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.LinkedList; import java.util.List; import javax.sql.DataSource; import org.apache.log4j.Logger; import binky.reportrunner.data.RunnerDataSource; import binky.reportrunner.service.DatasourceService; import binky.reportrunner.ui.actions.base.StandardRunnerAction; public class GetColumnNamesForQuery extends StandardRunnerAction { private static final long serialVersionUID = -2392254690021411047L; private static final Logger logger = Logger .getLogger(GetColumnNamesForQuery.class); private String itemQuery; private String dataSourceName; private DatasourceService dataSourceService; private List<String> columnNames; private String valueColumnValue; private String xaxisColumnValue; private String seriesNameColumnValue; private String labelColumnValue; @Override public String execute() throws Exception { Connection conn = null; try { columnNames = new LinkedList<String>(); columnNames.add("-"); logger.debug("getting column names for query"); logger.debug("item query is null = " + (itemQuery == null)); if (itemQuery == null) { super.addActionError("Query passed was null"); return SUCCESS; } logger.debug("item.dataSourceName is null = " + (dataSourceName == null)); if (dataSourceName == null || dataSourceName.isEmpty()) { super.addActionError("no datasource selected!"); return SUCCESS; } RunnerDataSource rds = dataSourceService .getDataSource(dataSourceName); if (rds == null) { super.addActionError("invalid datasource name!"); return SUCCESS; } DataSource ds = dataSourceService.getJDBCDataSource(rds); logger.debug("getting a jdbc connection open"); conn = ds.getConnection(); Statement stmt = conn.createStatement(); logger.debug("running sql: " + itemQuery); ResultSet rs = stmt.executeQuery(itemQuery); logger.debug("rs is null = " + (rs == null)); logger.debug("rs meta data is null = " + (rs.getMetaData() == null)); if ((rs == null) || (rs.getMetaData().getColumnCount() == 0)) { logger.debug("query failed to return any data"); super.addActionError("query failed to return any data"); return SUCCESS; } else { logger.debug("looks like this sql is valid"); logger.debug("column count " + rs.getMetaData().getColumnCount()); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { logger.debug("found column " + rs.getMetaData().getColumnName(i)); columnNames.add(rs.getMetaData().getColumnName(i)); } return SUCCESS; } } catch (Throwable t) { super.addActionError("query failed with exception - " + t.getMessage()); return SUCCESS; } finally { if (conn != null) conn.close(); } } public String getItemQuery() { return itemQuery; } public void setItemQuery(String itemQuery) { this.itemQuery = itemQuery; } public String getDataSourceName() { return dataSourceName; } public void setDataSourceName(String dataSourceName) { this.dataSourceName = dataSourceName; } public List<String> getColumnNames() { return columnNames; } public void setColumnNames(List<String> columnNames) { this.columnNames = columnNames; } public DatasourceService getDataSourceService() { return dataSourceService; } public void setDataSourceService(DatasourceService dataSourceService) { this.dataSourceService = dataSourceService; } public String getValueColumnValue() { return valueColumnValue; } public void setValueColumnValue(String valueColumnValue) { this.valueColumnValue = valueColumnValue; } public String getXaxisColumnValue() { return xaxisColumnValue; } public void setXaxisColumnValue(String xaxisColumnValue) { this.xaxisColumnValue = xaxisColumnValue; } public String getSeriesNameColumnValue() { return seriesNameColumnValue; } public void setSeriesNameColumnValue(String seriesNameColumnValue) { this.seriesNameColumnValue = seriesNameColumnValue; } public String getLabelColumnValue() { return labelColumnValue; } public void setLabelColumnValue(String labelColumnValue) { this.labelColumnValue = labelColumnValue; } }