package eu.dnetlib.data.claimsDemo;

/**
 * Created by Eri on 18/11/2015.
 */


import org.apache.log4j.Logger;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @author eri
 */

public class SqlDAO {
	private SqlStore sqlStore;
	//private QueryGenerator queryGenerator;

	private Logger log = Logger.getLogger(this.getClass());
	private long startTime;
	private long endtime;

	public SqlDAO() throws Exception {

	}



	/**
	 * Example of calling a stored procedure
	 *
	 * @throws Exception
	 *
	public void callStoredProcedure() throws Exception {
		log.info("  Executing Stored Procedure...");
		sqlStore.getConnection();
		startTime = System.currentTimeMillis();

		String q = queryGenerator.callProcedure("create_views");
		sqlStore.executeStoredProcedure(q);
		sqlStore.closeConnection();
		endtime = System.currentTimeMillis();
		log.info("Total time for  Procedure    : " + ((endtime - startTime) / 60000) + " minutes ");
	}
	*/

	/**
	 * Example of executing a prepared query with a result set
	 * with Query and parameters given as arguements
	 *
	 * @throws Exception
	 */
	public String executePreparedQuery(String q, ArrayList<String> data) throws SQLException, SQLStoreException {

			ResultSet rs = sqlStore.executeQuery(q, data);
			return sqlStore.getResults(rs);
	}

	/**
	 * Example of executing a prepared query with a result set
	 * with query set from Query Generator class
	 *
	 * @throws Exception
	 *
	public String executePreparedQuery(ArrayList<String> data) throws Exception {
		try {
			ResultSet rs = sqlStore.executeQuery(queryGenerator.generateSelectAllClaimsQuery(), data);
			return sqlStore.getResults(rs);

		} catch (Exception e)

		{
			log.error(e.getMessage());
			throw new Exception(e);
		}

	} */

	/**
	 * Example of executing a custom prepared query
	 *
	 * @throws Exception
	 */
	public ResultSet executePreparedQuery(String q) throws SQLStoreException, SQLException {
 			ResultSet rs = sqlStore.executeQuery(q);
			log.debug("Executing query " + q);
			return rs;



	}

	public void executeUpdateQuery(String q) throws Exception {
		try {
			log.debug("Executing query " + q);
			sqlStore.executeUpdate(q);

		} catch (Exception e)

		{
            log.debug("\n Query is:"+q);
			log.error("Fail to execute query:" + q, e);
			throw new Exception(e);
		}

	}

	public SqlStore getSqlStore() {
		return sqlStore;
	}

	public void setSqlStore(SqlStore sqlStore) {
		this.sqlStore = sqlStore;
	}

	/*public QueryGenerator getQueryGenerator() {
		return queryGenerator;
	}

	public void setQueryGenerator(QueryGenerator queryGenerator) {
		this.queryGenerator = queryGenerator;
	}*/
}
