package com.cfinkel.reports.wrappers;
import com.cfinkel.reports.exceptions.BadReportSyntaxException;
import com.cfinkel.reports.generatedbeans.OutputElement;
import com.cfinkel.reports.generatedbeans.QueryElement;
import com.cfinkel.reports.web.AppData;
import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
/**
* $Author:charles $
* $Revision:9037 $
* $Date:2006-05-08 13:14:49 -0400 (Mon, 08 May 2006) $
*
* Created by IntelliJ IDEA.
* User: charles
* Date: Mar 25, 2006
* Time: 6:09:54 PM
* To change this template use File | Settings | File Templates.
*/
public abstract class Query {
private static final Logger log = Logger.getLogger(Query.class);
protected JdbcTemplate jdbcTemplate;
public DataSource getDataSource() {
return dataSource;
}
private DataSource dataSource;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
// sets jdbctemplate and maxrows
public Query(QueryElement queryElement, OutputElement outputElement) throws BadReportSyntaxException {
String datasourceName = queryElement.getDatasource();
dataSource = AppData.getDataSources().get(datasourceName);
if (dataSource == null) {
try {
dataSource = AppData.addAndReturnDataSource(datasourceName);
} catch (NamingException e) {
String errorMessage = "Couldn't find JNDI value for datasource: " + datasourceName + ". Didn't add datasource.";
log.info(errorMessage,e);
throw new BadReportSyntaxException(errorMessage);
} catch (SQLException e) {
String errorMessage = "SQL Exception - error";
log.error(errorMessage,e);
throw new RuntimeException(errorMessage,e);
}
}
jdbcTemplate = new JdbcTemplate(dataSource);
if (outputElement != null && outputElement.getMaxRowsForDisplayTag() > 0) {
jdbcTemplate.setMaxRows(outputElement.getMaxRowsForDisplayTag());
}
}
public abstract QueryElement getQueryElement();
/**
* @param parameters
* @return
* @throws DataAccessException
*/
abstract List getData(Map<Input, Object> parameters) throws DataAccessException, ParseException;
public abstract String getQueryString(Map<Input, Object> parameters) throws ParseException;
}