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: StoreWorkItemFunction.java,v 1.1 2006/01/27 20:00:24 skleinei Exp $
25 */
26 public class StoreWorkItemFunction implements FunctionProvider {
27
28
29 public final static String rcsid = "$Id: StoreWorkItemFunction.java,v 1.1 2006/01/27 20:00:24 skleinei Exp $";
30
31
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 }