package net.codjo.broadcast.server.selector; import net.codjo.broadcast.common.Context; import net.codjo.broadcast.server.AbstractSelector; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * */ public abstract class AbstractGenericSelector extends AbstractSelector { private int selectorId; protected AbstractGenericSelector(int selectorId) { this.selectorId = selectorId; } @Override public final void proceedImpl(Context context, Connection connection, String selectionTableName, Date broadcastDate) throws SQLException { beforeProceed(context, connection, selectionTableName, broadcastDate); if (selectorId < 0) { executeGenericSelector(context, connection, selectionTableName, broadcastDate, selectorId); } else { executeStaticSelector(context, connection, selectionTableName, broadcastDate, selectorId); } afterProceed(context, connection, selectionTableName, broadcastDate); } protected void beforeProceed (Context context, Connection connection, String selectionTableName, Date broadcastDate) throws SQLException{ } protected void afterProceed(Context context, Connection connection, String selectionTableName, Date broadcastDate) throws SQLException{ } protected void executeStaticSelector(Context context, Connection connection, String selectionTableName, Date broadcastDate, int selectorId) throws SQLException { } protected abstract void executeGenericSelector(Context context, Connection connection, String selectionTableName, Date broadcastDate, int selectorId) throws SQLException; protected String getSelectorQuery(Connection con, int selectorId) throws SQLException { PreparedStatement stmt = con.prepareStatement( "select SELECTOR_QUERY from PM_BROADCAST_SELECTOR where SELECTOR_ID = ?"); String selectQuery = ""; try { stmt.setInt(1, -selectorId); stmt.execute(); ResultSet resultSet = stmt.getResultSet(); if (resultSet.next()) { selectQuery = resultSet.getString("SELECTOR_QUERY"); } } finally { stmt.close(); } return selectQuery; } protected void executeQueryWithVariables(Context context, Connection connection, String query) throws SQLException { PreparedStatement stmt = connection.prepareStatement(context.replaceVariables(query)); try { stmt.executeUpdate(); } finally { stmt.close(); } } }