package fr.openwide.core.wicket.more.markup.html.action;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxCallListener;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.attributes.IAjaxCallListener;
import fr.openwide.core.wicket.more.condition.Condition;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.AbstractAjaxModalPopupPanel;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.statement.BootstrapModalManagerStatement;
public class OneParameterModalOpenAjaxAction<T> extends AbstractOneParameterAjaxAction<T> {
private static final long serialVersionUID = 511391011732361800L;
private final AbstractAjaxModalPopupPanel<?> modal;
public OneParameterModalOpenAjaxAction(AbstractAjaxModalPopupPanel<?> modal) {
super();
this.modal = modal;
}
@Override
public void execute(AjaxRequestTarget target, T parameter) {
onShow(target, parameter);
modal.show(target);
}
@Override
public void updateAjaxAttributes(AjaxRequestAttributes attributes, T parameter) {
attributes.getAjaxCallListeners().add(getOpenModalCallListener());
super.updateAjaxAttributes(attributes, parameter);
}
protected IAjaxCallListener getOpenModalCallListener() {
AjaxCallListener openModalListener = new AjaxCallListener();
openModalListener.onBefore(BootstrapModalManagerStatement.loading().render(true));
openModalListener.onSuccess(BootstrapModalManagerStatement.show(modal.getContainer(), modal.getBootstrapModal()).render(true));
openModalListener.onFailure(BootstrapModalManagerStatement.removeLoading().render());
return openModalListener;
}
protected void onShow(AjaxRequestTarget target, T parameter) {
// Ne fait rien par défaut.
}
@Override
public Condition getActionAvailableCondition(T parameter) {
return Condition.visible(modal);
}
public AbstractAjaxModalPopupPanel<?> getModal() {
return modal;
}
}