package org.springmodules.examples.workflow.osworkflow.service; import java.util.ArrayList; import java.util.List; import com.opensymphony.workflow.query.Expression; import com.opensymphony.workflow.query.FieldExpression; import com.opensymphony.workflow.query.NestedExpression; import com.opensymphony.workflow.query.WorkflowExpressionQuery; import com.opensymphony.workflow.spi.Step; import com.opensymphony.workflow.spi.WorkflowEntry; import org.springmodules.examples.workflow.osworkflow.model.Comment; import org.springmodules.examples.workflow.osworkflow.model.Document; import org.springmodules.workflow.osworkflow.OsWorkflowTemplate; /** * @author robh */ public class OsWorkflowDocumentApprovalWorkflow implements DocumentApprovalWorkflow { public static final String KEY_DOCUMENT = "document"; public static final String KEY_COMMENTS = "comments"; private static final int ACTION_UPLOAD = 1; private static final int ACTION_APPROVE = 2; private static final int ACTION_PASS_BACK = 3; private OsWorkflowTemplate template; public void setTemplate(OsWorkflowTemplate template) { this.template = template; } public void startNewWorkflow() { template.initialize(); } public void uploadDocument(Document document) { template.doAction(ACTION_UPLOAD, KEY_DOCUMENT, document); } public void passBack(Comment comment) { List comments = (List) this.template.getPropertySet().getAsActualType(KEY_COMMENTS); if (comments == null) { comments = new ArrayList(); } comments.add(comment); template.doAction(ACTION_PASS_BACK, KEY_COMMENTS, comments); } public void approveCurrentDocument() { template.doAction(ACTION_APPROVE); } public List getCurrentStepDescriptors() { return this.template.getCurrentStepDescriptors(); } public List getHistoryStepDescriptors() { return this.template.getHistoryStepDescriptors(); } public List getAvailableActionDescriptors() { return this.template.getAvailableActionDescriptors(); } public String getCurrentState() { return ((Step) this.template.getCurrentSteps().get(0)).getStatus(); } public List getUnderwayWorkflows() { Expression queryRight = new FieldExpression(FieldExpression.STATE, FieldExpression.ENTRY, FieldExpression.EQUALS, new Integer(WorkflowEntry.ACTIVATED)); Expression queryLeft = new FieldExpression(FieldExpression.NAME, FieldExpression.ENTRY, FieldExpression.EQUALS, this.template.getWorkflowName()); WorkflowExpressionQuery query = new WorkflowExpressionQuery( new NestedExpression(new Expression[]{queryRight, queryLeft}, NestedExpression.AND)); return this.template.query(query); } public Document getCurrentDocument() { return (Document) template.getPropertySet().getAsActualType(KEY_DOCUMENT); } public List getCurrentComments() { return (List) template.getPropertySet().getAsActualType(KEY_COMMENTS); } }