@Override
public void initialize(ProgressMonitor progress, TableEditableElement source) throws SQLException{
progress.setTaskName(I18N.tr("Run filter by sql request"));
try(Connection connection = source.getDataManager().getDataSource().getConnection();
Statement st = connection.createStatement()) {
PropertyChangeListener cancelListener = EventHandler.create(PropertyChangeListener.class, st, "cancel");
progress.addPropertyChangeListener(ProgressMonitor.PROP_CANCEL, cancelListener);
try{
String tablePk = source.getRowSet().getPkName();
if(!tablePk.isEmpty()) {
final ReadRowSet rowSet = source.getRowSet();
StringBuilder request = new StringBuilder(String.format("SELECT %s FROM %s WHERE %s",
TableLocation.quoteIdentifier(tablePk),
source.getTableReference(), whereText));
LOGGER.info(I18N.tr("Find field value with the following request:\n{0}",request.toString()));
try(ResultSet rs = st.executeQuery(request.toString())) {
while(rs.next()) {
filteredRows.add(rowSet.getRowId(rs.getLong(1)) - 1);
}
}
}
} finally {
progress.removePropertyChangeListener(cancelListener);
}
} catch (EditableElementException ex) {
throw new SQLException(ex);
}
}
}