package net.databinder.components.ao;
import java.sql.SQLException;
import net.databinder.ao.Databinder;
import net.java.ao.EntityManager;
import net.java.ao.Transaction;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.form.ImageButton;
/** Button that provides a submit transaction similar to TransactionalForm. */
public abstract class TransactionalImageButton extends ImageButton {
public TransactionalImageButton(String id, ResourceReference resourceReference) {
super(id, resourceReference);
}
/** Called when the form is submitted, do not override if you want transactional behavior. */
public void onSubmit() {
try {
new Transaction<Object>(Databinder.getEntityManager()) {
@Override
protected Object run() throws SQLException {
inSubmitTransaction(Databinder.getEntityManager());
return null;
}
}.execute();
} catch (SQLException e) {
throw new WicketRuntimeException(e);
}
afterSubmit();
}
/**
* Called inside onSubmit's database transaction.
* @param entityManager associated with button, provided for convenience
*/
protected abstract void inSubmitTransaction(EntityManager entityManager) throws SQLException;
/** Called after onSubmit's database transaction. */
protected void afterSubmit() { };
}