package is.idega.idegaweb.egov.bpm.cases.actionhandlers;
import is.idega.idegaweb.egov.bpm.cases.CasesBPMProcessConstants;
import is.idega.idegaweb.egov.cases.business.CasesBusiness;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.IBORuntimeException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.presentation.IWContext;
/**
* @author <a href="mailto:civilis@idega.com">Vytautas Čivilis</a>
* @version $Revision: 1.2 $
*
* Last modified: $Date: 2008/02/25 16:16:25 $ by $Author: civilis $
*/
public class StatusDecisionHandler implements ActionHandler {
private static final long serialVersionUID = -6527613958449076385L;
private static final String toEndTransitionName = "toEnd";
private static final String toCreateResponseTransitionName = "toCreateResponse";
public StatusDecisionHandler() { }
public StatusDecisionHandler(String parm) { }
public void execute(ExecutionContext ctx) throws Exception {
// TODO: check the difference: ctx.getContextInstance().getVariable
String status = (String)ctx.getVariable(CasesBPMProcessConstants.caseStatusVariableName);
if(status == null) {
Logger.getLogger(StatusDecisionHandler.class.getName()).log(Level.WARNING, "Status decision action handler called, but status not specified. Taking default transition: "+toCreateResponseTransitionName);
ctx.leaveNode(toCreateResponseTransitionName);
return;
}
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
CasesBusiness casesBusiness = getCasesBusiness(iwc);
if(status.equals(casesBusiness.getCaseStatusReady().getStatus()) || status.equals(casesBusiness.getCaseStatusInactive().getStatus()))
ctx.leaveNode(toEndTransitionName);
else
ctx.leaveNode(toCreateResponseTransitionName);
}
protected CasesBusiness getCasesBusiness(IWApplicationContext iwac) {
try {
return (CasesBusiness) IBOLookup.getServiceInstance(iwac, CasesBusiness.class);
}
catch (IBOLookupException ile) {
throw new IBORuntimeException(ile);
}
}
}