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: StoreWorkflowDataFunction.java,v 1.1 2005/11/20 15:02:23 skleinei Exp $
25   */
26  public class StoreWorkflowDataFunction implements FunctionProvider {
27  
28    /* RCS ID */
29    public final static String rcsid = "$Id: StoreWorkflowDataFunction.java,v 1.1 2005/11/20 15:02:23 skleinei Exp $";
30  
31    /* Logger */
32    protected final Log logger = LogFactory.getLog(this.getClass());
33  
34    public static final String ARG_STORE_PAYLOAD_PREPROCESSOR =
35            "payload.store.preprocessor";
36  
37    public void execute(Map transientVars, Map args, PropertySet ps)
38            throws WorkflowException {
39      StorePayloadPreprocessor preprocessor;
40      preprocessor = getPreprocessor(args);
41  
42      WorkItem workItem = (WorkItem) transientVars.get(
43              Constants.WF_FUNCTION_WORKFLOWDATA);
44      Comment comment = (Comment) transientVars.get(
45              Constants.WF_FUNCTION_COMMENT);
46  
47      if(comment != null) {
48        workItem.addComment(comment);
49      }
50  
51      if (preprocessor != null) {
52        Object payload = preprocessor.processPayload(workItem.getPayload());
53        workItem.setPayload(payload);
54      }
55  
56      WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry");
57      long id = entry.getId();
58  
59      workItem.setOswfId(new Long(id));
60  
61      WorkItemManagementService workItemManagementService =
62              (WorkItemManagementService) transientVars.get(
63                      Constants.WF_PERSISTENCE_MANAGER);
64  
65      workItemManagementService.saveWorkflowInstance(workItem);
66    }
67  
68    private StorePayloadPreprocessor getPreprocessor(Map args)
69            throws WorkflowException {
70      StorePayloadPreprocessor preprocessor;
71      String classname = (String) args.get(ARG_STORE_PAYLOAD_PREPROCESSOR);
72  
73      if (classname == null) {
74        return null;
75      }
76  
77      try {
78        Class clazz = Class.forName(classname);
79        preprocessor = (StorePayloadPreprocessor) clazz.newInstance();
80      } catch (ClassNotFoundException cnfe) {
81        cnfe.printStackTrace();
82        throw new WorkflowException("StorePayloadPreprocessor '" +
83                classname +
84                "' not found.  Please check workflow configuration file.");
85      } catch (ClassCastException cce) {
86        throw new WorkflowException("StorePayloadPreprocessor '" +
87                classname +
88                "' could not be casted.  Does it correctly implement the" +
89                "StorePayloadPreprocessor interface?");
90      } catch (IllegalAccessException iae) {
91        throw new WorkflowException("StorePayloadPreprocessor '" +
92                classname +
93                "' could not accessed.", iae);
94      } catch (InstantiationException ie) {
95        throw new WorkflowException("StorePayloadPreprocessor '" +
96                classname +
97                "' could not instantiated.", ie);
98      }
99      return preprocessor;
100   }
101 
102 }