package org.apache.isis.viewer.wicket.ui.components.actions;
import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
import org.apache.isis.viewer.wicket.ui.panels.FormExecutorAbstract;
public class ActionParametersFormExecutor extends FormExecutorAbstract<ActionModel> {
public ActionParametersFormExecutor(final ActionModel actionModel) {
super(actionModel);
}
protected ObjectAdapter obtainTargetAdapter() {
return model.getTargetAdapter();
}
protected String getReasonInvalidIfAny() {
return model.getReasonInvalidIfAny();
}
protected void onExecuteAndProcessResults(final AjaxRequestTarget target) {
if (model.isBookmarkable()) {
bookmarkPage(model);
}
if (actionPrompt != null) {
actionPrompt.closePrompt(target);
// cos will be reused next time, so mustn't cache em.
model.clearArguments();
}
}
protected ObjectAdapter obtainResultAdapter() {
return model.execute();
}
protected void redirectTo(
final ObjectAdapter resultAdapter,
final AjaxRequestTarget targetIfany) {
ActionResultResponse resultResponse = ActionResultResponseType
.determineAndInterpretResult(model, targetIfany, resultAdapter);
resultResponse.getHandlingStrategy().handleResults(resultResponse, getIsisSessionFactory());
}
///////////////////////////////////////////////////////
protected void bookmarkPage(BookmarkableModel<?> model) {
getBookmarkedPagesModel().bookmarkPage(model);
}
private BookmarkedPagesModel getBookmarkedPagesModel() {
BookmarkedPagesModelProvider application = (BookmarkedPagesModelProvider) getSession();
return application.getBookmarkedPagesModel();
}
Session getSession() {
return Session.get();
}
///////////////////////////////////////////////////////
// Dependencies (from context)
///////////////////////////////////////////////////////
private ActionPrompt actionPrompt;
void setActionPrompt(final ActionPrompt actionPrompt) {
this.actionPrompt = actionPrompt;
}
}