package net.codjo.broadcast.server;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Statement;
import net.codjo.broadcast.common.Context;
import net.codjo.broadcast.common.Selector;
import net.codjo.broadcast.server.api.SqlUtil;
import net.codjo.database.common.api.DatabaseFactory;
import net.codjo.database.common.api.DatabaseQueryHelper;
import net.codjo.database.common.api.structure.SqlTable;
public abstract class AbstractSelector implements Selector {
protected AbstractSelector() {
}
public final void proceed(Context context,
Connection connection,
String selectionTableName,
Date broadcastDate) throws SQLException {
if (context != null) {
context.putParameter("selectionTable", selectionTableName);
if (broadcastDate != null) {
context.putParameter("broadcastDate", broadcastDate.toString());
}
}
proceedImpl(context, connection, selectionTableName, broadcastDate);
}
protected abstract void proceedImpl(Context context,
Connection connection,
String selectionTableName,
Date broadcastDate) throws SQLException;
public void cleanup(Context ctxt,
Connection connection,
String selectionTableName,
Date broadcastDate) throws SQLException {
SqlUtil.dropTable(connection, selectionTableName);
}
protected String loadQuery(String queryName) throws SQLException {
return SqlUtil.loadQuery(this, queryName);
}
protected void executeUpdate(Connection connection, String sqlQuery) throws SQLException {
Statement statement = connection.createStatement();
try {
statement.executeUpdate(sqlQuery);
}
finally {
statement.close();
}
}
protected void createTempTable(Connection connection, String tableName, String body) throws SQLException {
SqlUtil.dropTable(connection, tableName);
DatabaseQueryHelper queryHelper = new DatabaseFactory().getDatabaseQueryHelper();
executeUpdate(connection,
queryHelper.buildCreateTableQuery(SqlTable.temporaryTable(tableName), body));
}
protected String loadQuery(String queryName, Context context) throws SQLException {
return context.replaceVariables(loadQuery(queryName));
}
}