View Javadoc

1   /*
2    *  DISCLAIMER
3    */
4   
5   package org.flowfuse.base.services.workflow.functions.implementation;
6   
7   import com.opensymphony.module.propertyset.PropertySet;
8   import com.opensymphony.workflow.FunctionProvider;
9   import com.opensymphony.workflow.WorkflowException;
10  import com.opensymphony.workflow.spi.WorkflowEntry;
11  import org.apache.commons.logging.Log;
12  import org.apache.commons.logging.LogFactory;
13  import org.flowfuse.base.Constants;
14  import org.flowfuse.base.model.Comment;
15  import org.flowfuse.base.model.WorkItem;
16  import org.flowfuse.base.services.workflow.functions.StorePayloadPreprocessor;
17  import org.flowfuse.base.services.workitem.WorkItemManagementService;
18  
19  import java.util.Map;
20  
21  /***
22   * @author <a href="stefan@flowfuse.org">Stefan Kleineikenscheidt</a>,
23   *         Flowfuse.org
24   * @version $Id: StoreWorkItemFunction.java,v 1.1 2006/01/27 20:00:24 skleinei Exp $
25   */
26  public class StoreWorkItemFunction implements FunctionProvider {
27  
28    /* RCS ID */
29    public final static String rcsid = "$Id: StoreWorkItemFunction.java,v 1.1 2006/01/27 20:00:24 skleinei Exp $";
30  
31    /* Logger */
32    protected final Log logger = LogFactory.getLog(this.getClass());
33  
34    private WorkItemManagementService workItemManagementService = null;
35  
36    public static final String ARG_STORE_PAYLOAD_PREPROCESSOR =
37            "payload.store.preprocessor";
38  
39    public void execute(Map transientVars, Map args, PropertySet ps)
40            throws WorkflowException {
41      StorePayloadPreprocessor preprocessor;
42      preprocessor = getPreprocessor(args);
43  
44      WorkItem workItem = (WorkItem) transientVars.get(
45              Constants.WF_FUNCTION_WORKFLOWDATA);
46      Comment comment = (Comment) transientVars.get(
47              Constants.WF_FUNCTION_COMMENT);
48  
49      if(comment != null) {
50        workItem.addComment(comment);
51      }
52  
53      if (preprocessor != null) {
54        Object payload = preprocessor.processPayload(workItem.getPayload());
55        workItem.setPayload(payload);
56      }
57  
58      WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry");
59      long id = entry.getId();
60  
61      workItem.setOswfId(new Long(id));
62  
63      this.workItemManagementService.saveWorkflowInstance(workItem);
64    }
65  
66    private StorePayloadPreprocessor getPreprocessor(Map args)
67            throws WorkflowException {
68      StorePayloadPreprocessor preprocessor;
69      String classname = (String) args.get(ARG_STORE_PAYLOAD_PREPROCESSOR);
70  
71      if (classname == null) {
72        return null;
73      }
74  
75      try {
76        Class clazz = Class.forName(classname);
77        preprocessor = (StorePayloadPreprocessor) clazz.newInstance();
78      } catch (ClassNotFoundException cnfe) {
79        cnfe.printStackTrace();
80        throw new WorkflowException("StorePayloadPreprocessor '" +
81                classname +
82                "' not found.  Please check workflow configuration file.");
83      } catch (ClassCastException cce) {
84        throw new WorkflowException("StorePayloadPreprocessor '" +
85                classname +
86                "' could not be casted.  Does it correctly implement the" +
87                "StorePayloadPreprocessor interface?");
88      } catch (IllegalAccessException iae) {
89        throw new WorkflowException("StorePayloadPreprocessor '" +
90                classname +
91                "' could not accessed.", iae);
92      } catch (InstantiationException ie) {
93        throw new WorkflowException("StorePayloadPreprocessor '" +
94                classname +
95                "' could not instantiated.", ie);
96      }
97      return preprocessor;
98    }
99  
100   public WorkItemManagementService getWorkItemManagementService() {
101     return workItemManagementService;
102   }
103 
104   public void setWorkItemManagementService(
105           WorkItemManagementService workItemManagementService) {
106     this.workItemManagementService = workItemManagementService;
107   }
108 
109 }