1
2
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
29 public final static String rcsid = "$Id: StoreWorkflowDataFunction.java,v 1.1 2005/11/20 15:02:23 skleinei Exp $";
30
31
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 }