ingo@1127: /*
ingo@1127: * Copyright (c) 2010 by Intevation GmbH
ingo@1127: *
ingo@1127: * This program is free software under the LGPL (>=v2.1)
ingo@1127: * Read the file LGPL.txt coming with the software for details
ingo@1127: * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@1127: */
ingo@1127:
tim@132: package de.intevation.gnv.geobackend.base.query;
tim@132:
tim@895: import java.sql.ResultSet;
tim@895: import java.sql.ResultSetMetaData;
tim@895: import java.sql.SQLException;
tim@895: import java.util.ArrayList;
tim@895: import java.util.Collection;
tim@895: import java.util.List;
tim@895:
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.
sascha@887: * @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: }
sascha@885:
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@133: returnValue = returnValue.replaceFirst("[?]", filter[i]);
tim@132: }
tim@132: return returnValue;
tim@132: }
sascha@885:
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();
sascha@885:
tim@132: ResultDescriptor resultDescriptor = null;
tim@132: int columns = -1;
tim@271:
tim@132: List columnNames = null;
tim@271:
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@271:
tim@132: for (int i = 1; i <= columns; i++){
tim@132: resultDescriptor.addColumn(rsmd.getColumnName(i), rsmd.getColumnClassName(i));
tim@132: }
tim@132: }
sascha@885:
tim@271: Result result = convertResult(resultSet, resultDescriptor);
sascha@885:
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: * @return an new Result-Objects containing the Values of the ResultSet-Entry
tim@132: * @throws SQLException
tim@132: */
tim@271: private Result convertResult(ResultSet resultSet, ResultDescriptor resultDescriptor)
tim@271: throws SQLException {
tim@271:
tim@132: Result result = new DefaultResult(resultDescriptor);
tim@271:
tim@271: for (int i = 0, N = resultDescriptor.getColumnCount(); i < N; i++) {
tim@271: result.addColumnValue(i, resultSet.getObject(i+1));
tim@132: }
tim@132: return result;
tim@132: }
tim@132:
sascha@541: public Collection cachedResults(String query) {
sascha@541: return null;
sascha@541: }
sascha@541:
sascha@541: public void cacheResults(String query, Collection result) {
sascha@541: }
sascha@541:
tim@895: public void clearCache(String[] tableNames) {
tim@895: }
tim@895:
tim@132: }