package org.onehippo.forge.konakart.hst.wizard.checkout;
import org.hippoecm.hst.component.support.forms.FormMap;
import org.onehippo.forge.konakart.hst.utils.KKActionsConstants;
import org.onehippo.forge.konakart.hst.utils.KKUtil;
import org.onehippo.forge.konakart.hst.wizard.Activity;
import org.onehippo.forge.konakart.hst.wizard.ActivityException;
import org.onehippo.forge.konakart.hst.wizard.BaseProcessor;
import org.onehippo.forge.konakart.hst.wizard.SeedData;
import org.onehippo.forge.konakart.hst.wizard.checkout.activity.BaseCheckoutActivity;
import java.util.List;
public class CheckoutProcessor extends BaseProcessor {
@Override
public boolean supports(Activity activity) {
return activity instanceof BaseCheckoutActivity;
}
@Override
public void doBeforeRender(SeedData seedObject) throws ActivityException {
String currentState = getCurrentState(seedObject.getRequest());
String nextState = getNextState(seedObject.getRequest());
// Set state
((CheckoutSeedData) seedObject).setState(currentState);
((CheckoutSeedData) seedObject).setAction(getCurrentAction(seedObject.getRequest()));
if (log.isDebugEnabled()) {
log.debug("doBeforeRender - " + getClass().getSimpleName() + " processor is running..");
}
//retrieve injected by Spring
List<Activity> activities = getActivities();
// Create the processor context
CheckoutProcessContext context = new CheckoutProcessContext();
context.setSeedData(seedObject);
for (Activity activity : activities) {
if (log.isDebugEnabled()) {
log.debug("running activity:" + activity.getClass().getSimpleName() + " using arguments:" + context);
}
activity.initialize(context);
if (activity.acceptState(nextState)) {
// Check if a form associated with the activity contains errors.
// If so, the current page should be refreashed.
if (activity.hasErrors()) {
activity.doBeforeRender();
} else {
// If an activity accept the initial state, this is means that this activity has been already
// executed so the real activity to execute is the next one.
if (activity.acceptState(currentState) && !isEditAction(seedObject.getRequest())) {
nextState = activity.computeNextState();
} else {
activity.doBeforeRender();
}
activity.doApplyTemplateRenderPath();
}
seedObject.getRequest().setAttribute("form", activity.getFormMap());
}
}
((CheckoutSeedData) seedObject).setState(nextState);
seedObject.getRequest().setAttribute(KKActionsConstants.STATE, nextState);
}
@Override
public FormMap doAction(SeedData seedObject) throws ActivityException {
FormMap formMap = null;
String currentState = KKUtil.getActionRequestParameter(seedObject.getRequest(), KKActionsConstants.STATE);
if (log.isDebugEnabled()) {
log.debug("doAction - " + getClass().getSimpleName() + " processor is running..");
}
//retrieve injected by Spring
List<Activity> activities = getActivities();
// Create the processor context
CheckoutProcessContext context = new CheckoutProcessContext();
context.setProcessor(this);
context.setSeedData(seedObject);
((CheckoutSeedData) seedObject).setState(currentState);
for (Activity activity : activities) {
if (log.isDebugEnabled()) {
log.debug("running activity:" + activity.getClass().getSimpleName() + " using arguments:" + context);
}
if (activity.acceptState(currentState)) {
activity.initialize(context);
if (activity.doValidForm()) {
activity.doAction();
}
formMap = activity.getFormMap();
}
}
seedObject.getResponse().setRenderParameter(KKActionsConstants.STATE, currentState);
seedObject.getResponse().setRenderParameter(KKActionsConstants.ACTION, ((CheckoutSeedData) seedObject).getAction());
return formMap;
}
@Override
public void doAdditionalData(SeedData seedObject) throws ActivityException {
//retrieve injected by Spring
List<Activity> activities = getActivities();
// Create the processor context
CheckoutProcessContext context = new CheckoutProcessContext();
context.setSeedData(seedObject);
for (Activity activity : activities) {
if (log.isDebugEnabled()) {
log.debug("running activity:" + activity.getClass().getSimpleName() + " using arguments:" + context);
}
activity.initialize(context);
activity.doAdditionalData();
}
}
}