tim@132: /** tim@132: * tim@132: */ tim@132: package de.intevation.gnv.geobackend.base.query; tim@132: tim@132: import java.sql.ResultSet; tim@132: import java.sql.ResultSetMetaData; tim@132: import java.sql.SQLException; tim@132: import java.util.ArrayList; tim@132: import java.util.Collection; tim@132: import java.util.List; tim@132: tim@132: import de.intevation.gnv.geobackend.base.DefaultResult; tim@132: import de.intevation.gnv.geobackend.base.DefaultResultDescriptor; tim@132: import de.intevation.gnv.geobackend.base.Result; tim@132: import de.intevation.gnv.geobackend.base.ResultDescriptor; tim@132: tim@132: /** tim@132: * This is an abstract Basicimplementation of the Interface tim@132: * QueryExecutor providing several Helpermethods. tim@132: * @author Tim Englich tim@132: * tim@132: */ tim@132: public abstract class QueryExecutorBase implements QueryExecutor { tim@132: tim@132: /** tim@132: * Constructor tim@132: */ tim@132: public QueryExecutorBase() { tim@132: super(); tim@132: } tim@132: tim@132: /** tim@132: * This Method puts the Filtervalues into the Querystring tim@132: * @param queryString the Query which should be manipulated tim@132: * @param filter the values which should be put into the Query tim@132: * @return the manipulated Query tim@132: */ tim@132: protected String setFilterValues(String queryString, String[] filter){ tim@132: String returnValue = queryString; tim@132: for (int i = 0; i < filter.length; i++){ tim@132: returnValue = returnValue.replaceFirst("?", filter[i]); tim@132: } tim@132: return returnValue; tim@132: } tim@132: tim@132: /** tim@132: * This Methods converts the ResultSet into an Collection of Result-objects tim@132: * @param resultSet the ResultSet which should be converted tim@132: * @return an Collection containing Result-Objects tim@132: * @throws SQLException tim@132: */ tim@132: protected Collection createResultCollection(ResultSet resultSet) throws SQLException{ tim@132: Collection returnValue = new ArrayList(); tim@132: tim@132: ResultDescriptor resultDescriptor = null; tim@132: int columns = -1; tim@132: List columnNames = null; tim@132: while (resultSet.next()){ tim@132: if (resultDescriptor == null){ tim@132: resultDescriptor = new DefaultResultDescriptor(); tim@132: ResultSetMetaData rsmd = resultSet.getMetaData(); tim@132: columns = rsmd.getColumnCount(); tim@132: columnNames = new ArrayList(columns); tim@132: for (int i = 1; i <= columns; i++){ tim@132: resultDescriptor.addColumn(rsmd.getColumnName(i), rsmd.getColumnClassName(i)); tim@132: columnNames.add(rsmd.getColumnName(i)); tim@132: } tim@132: } tim@132: tim@132: Result result = convertResult(resultSet, resultDescriptor,columnNames); tim@132: tim@132: returnValue.add(result); tim@132: } tim@132: return returnValue; tim@132: } tim@132: tim@132: /** tim@132: * This Method converts one Singel ResultSetEntry into an Result-Object tim@132: * @param resultSet the ResultSet where the Entry should be took from. tim@132: * @param resultDescriptor the ResultsetDescriptor which describes the Entry tim@132: * @param columnNames the Name of the Columns which Values should be fetched. tim@132: * @return an new Result-Objects containing the Values of the ResultSet-Entry tim@132: * @throws SQLException tim@132: */ tim@132: private Result convertResult(ResultSet resultSet, tim@132: ResultDescriptor resultDescriptor, List columnNames) tim@132: throws SQLException { tim@132: Result result = new DefaultResult(resultDescriptor); tim@132: for (int i = 0; i < columnNames.size(); i++){ tim@132: String columnName = columnNames.get(i); tim@132: result.addColumnValue(columnName, resultSet.getObject(columnName)); tim@132: } tim@132: return result; tim@132: } tim@132: tim@132: }