KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > workflows > action > EditWorkflowTaskAction


1 package com.dotmarketing.portlets.workflows.action;
2
3 import java.util.Calendar JavaDoc;
4 import java.util.Date JavaDoc;
5 import java.util.GregorianCalendar JavaDoc;
6
7 import javax.portlet.ActionRequest;
8 import javax.portlet.ActionResponse;
9 import javax.portlet.PortletConfig;
10 import javax.portlet.WindowState;
11 import javax.servlet.http.HttpServletRequest JavaDoc;
12
13 import org.apache.commons.beanutils.BeanUtils;
14 import org.apache.struts.action.ActionForm;
15 import org.apache.struts.action.ActionMapping;
16
17 import com.dotmarketing.db.DotHibernate;
18 import com.dotmarketing.factories.InodeFactory;
19 import com.dotmarketing.portal.struts.DotPortletAction;
20 import com.dotmarketing.portlets.files.model.File;
21 import com.dotmarketing.portlets.workflows.factories.WorkflowsFactory;
22 import com.dotmarketing.portlets.workflows.model.WorkflowComment;
23 import com.dotmarketing.portlets.workflows.model.WorkflowHistory;
24 import com.dotmarketing.portlets.workflows.model.WorkflowTask;
25 import com.dotmarketing.portlets.workflows.struts.WorkflowTaskForm;
26 import com.dotmarketing.util.Logger;
27 import com.dotmarketing.util.UtilMethods;
28 import com.dotmarketing.util.Validator;
29 import com.dotmarketing.util.WebKeys;
30 import com.dotmarketing.util.WebKeys.WorkflowStatuses;
31 import com.liferay.portal.model.User;
32 import com.liferay.portal.util.Constants;
33 import com.liferay.portlet.ActionRequestImpl;
34 import com.liferay.util.servlet.SessionMessages;
35
36 /**
37  * @author David
38  */

39
40 public class EditWorkflowTaskAction extends DotPortletAction {
41
42     public void processAction(ActionMapping mapping, ActionForm form,
43             PortletConfig config, ActionRequest req, ActionResponse res)
44             throws Exception JavaDoc {
45
46         String JavaDoc cmd = req.getParameter(Constants.CMD);
47         String JavaDoc referer = req.getParameter("referer");
48
49         Logger.debug(this, "EditWorkflowTaskAction cmd=" + cmd);
50
51         DotHibernate.startTransaction();
52
53         User user = _getUser(req);
54
55         try {
56             Logger.debug(this, "Calling Retrieve method");
57             _retrieveWorkflowTask(req, WebKeys.WORKFLOW_TASK_EDIT);
58         } catch (Exception JavaDoc ae) {
59             _handleException(ae, req);
60             return;
61         }
62
63         /*
64          * We are adding a new workflow task
65          */

66         if ((cmd == null) || cmd.equals(Constants.ADD)) {
67             try {
68                 Logger.debug(this, "Calling Edit Method");
69                 _addWorkflowTask(req, res, config, form, user);
70                 setForward(req, "portlet.ext.workflows.edit_workflow_task");
71                 return;
72             } catch (Exception JavaDoc ae) {
73                 _handleException(ae, req);
74                 return;
75             }
76         }
77         /*
78          * We are editing the workflow task
79          */

80         if ((cmd != null) && cmd.equals(Constants.EDIT)) {
81             try {
82                 Logger.debug(this, "Calling Edit Method");
83                 _editWorkflowTask(req, res, config, form, user);
84                 setForward(req, "portlet.ext.workflows.edit_workflow_task");
85                 return;
86             } catch (Exception JavaDoc ae) {
87                 _handleException(ae, req);
88                 return;
89             }
90         }
91         /*
92          * We are viewing the workflow task
93          */

94         if ((cmd != null) && cmd.equals(Constants.VIEW)) {
95             try {
96                 Logger.debug(this, "Calling View Method");
97                 _viewWorkflowTask(req, res, config, form, user);
98                 setForward(req, "portlet.ext.workflows.view_workflow_task");
99                 return;
100             } catch (Exception JavaDoc ae) {
101                 _handleException(ae, req);
102                 return;
103             }
104         }
105
106         /*
107          * If we are updating the workflow task
108          */

109         if ((cmd != null) && cmd.equals(Constants.SAVE)) {
110             try {
111
112                 if (Validator.validate(req, form, mapping)) {
113                     Logger.debug(this, "Calling Save Method");
114                     _saveWorkflowTask(req, res, config, form, user);
115                     _sendToReferral(req, res, referer);
116                     return;
117                 }
118
119             } catch (Exception JavaDoc ae) {
120                 _handleException(ae, req);
121             }
122
123         }
124         /*
125          * If we are changing the task status, run the change action and return to
126          * task
127          *
128          */

129         else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.CHANGE_STATUS)) {
130             try {
131                 Logger.debug(this, "Calling Change Status Method");
132                 _changeWorkflowTaskStatus(req, res, config, form, user);
133                 _sendToReferral(req, res, referer);
134             } catch (Exception JavaDoc ae) {
135                 _handleException(ae, req);
136                 return;
137             }
138         } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ADD_COMMENT)) {
139             try {
140                 Logger.debug(this, "Calling Add Comment Method");
141                 _addWorkflowComment(req, res, config, form, user);
142                 _sendToReferral(req, res, referer);
143             } catch (Exception JavaDoc ae) {
144                 _handleException(ae, req);
145                 return;
146             }
147         } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ADD_FILE)) {
148             try {
149                 Logger.debug(this, "Calling Add File Method");
150                 _addFileToWorkflow(req, res, config, form, user);
151                 _sendToReferral(req, res, referer);
152             } catch (Exception JavaDoc ae) {
153                 _handleException(ae, req);
154                 return;
155             }
156         } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.REMOVE_FILE)) {
157             try {
158                 Logger.debug(this, "Calling Remove File Method");
159                 _removeFileToWorkflow(req, res, config, form, user);
160                 _sendToReferral(req, res, referer);
161             } catch (Exception JavaDoc ae) {
162                 _handleException(ae, req);
163                 return;
164             }
165         } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ASSIGN_TASK)) {
166             try {
167                 Logger.debug(this, "Calling Assign Task Method");
168                 _assignWorkflowTask(req, res, config, form, user);
169                 _sendToReferral(req, res, referer);
170             } catch (Exception JavaDoc ae) {
171                 _handleException(ae, req);
172                 return;
173             }
174         } else
175
176             Logger.debug(this, "Unspecified Action");
177         
178         DotHibernate.commitTransaction();
179
180         setForward(req, "portlet.ext.workflows.edit_workflow_task");
181     }
182
183     ///// ************** ALL METHODS HERE *************************** ////////
184

185     
186
187     private void _saveWorkflowTask(ActionRequest req, ActionResponse res,
188             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
189         
190         Logger.debug(this, "I'm saving the workflowtask");
191
192         //wraps request to get session object
193
ActionRequestImpl reqImpl = (ActionRequestImpl) req;
194         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
195
196         boolean isNew = false;
197         StringBuffer JavaDoc changeHist = new StringBuffer JavaDoc("Task Edited<br>");
198         
199         WorkflowTaskForm wtForm = (WorkflowTaskForm) form;
200         
201         //gets the current WorkflowTask being edited from the request object
202
WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
203         
204         if (task.getTitle()== null || !task.getTitle().equals(wtForm.getTitle())) {
205             changeHist.append("Title: " + task.getTitle() + " -> " + wtForm.getTitle() + "<br>");
206             task.setTitle(wtForm.getTitle());
207         }
208         
209         if (task.getDescription()== null || !task.getDescription().equals(wtForm.getDescription())) {
210             changeHist.append("Description: " + task.getDescription() + " -> " + wtForm.getDescription() + "<br>");
211             task.setDescription(wtForm.getDescription());
212         }
213         
214         task.setAssignedTo(wtForm.getAssignedTo());
215         task.setModDate(new Date JavaDoc());
216         if (task.getInode() == 0) {
217             task.setCreationDate(new Date JavaDoc());
218             task.setCreatedBy(user.getUserId());
219             task.setStatus(WorkflowStatuses.OPEN.toString());
220             isNew = true;
221         }
222         if (!wtForm.isNoDueDate()) {
223             Date JavaDoc dueDate = UtilMethods.htmlToDate((Integer.parseInt(wtForm.getDueDateMonth())+1)+"/"+wtForm.getDueDateDay()+"/"+wtForm.getDueDateYear());
224             if (task.getDueDate() == null || !task.getDueDate().equals(dueDate)) {
225                 changeHist.append("Due Date: " + UtilMethods.dateToHTMLDate(task.getDueDate()) + " -> " + UtilMethods.dateToHTMLDate(dueDate) + "<br>");
226                 task.setDueDate(dueDate);
227             }
228         } else {
229             if (task.getDueDate() != null) {
230                 changeHist.append("Due Date: " + UtilMethods.dateToHTMLDate(task.getDueDate()) + " -> <br>");
231                 task.setDueDate(null);
232             }
233         }
234         
235         if (task.getInode() == 0)
236             task.setWebasset(wtForm.getWebasset());
237         
238         InodeFactory.saveInode(task);
239
240         if (isNew) {
241             
242             _logWorkflowTaskHistory(task, user, "Task Creation");
243             WorkflowsFactory.sendWorkflowChangeEmails (task, "New Workflow Task Created", _buildWorkflowEmailBody(req, task, "New Task"));
244
245         } else {
246             WorkflowsFactory.sendWorkflowChangeEmails (task, "New Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeHist.toString()));
247             _logWorkflowTaskHistory(task, user, changeHist.toString());
248         }
249         SessionMessages.add(httpReq, "message", "message.workflow.saved");
250
251     }
252
253     private void _addWorkflowTask(ActionRequest req, ActionResponse res,
254             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
255
256         WorkflowTaskForm taskform = (WorkflowTaskForm) form;
257
258         GregorianCalendar JavaDoc now = new GregorianCalendar JavaDoc ();
259         taskform.setDueDateDay(String.valueOf(now.get(GregorianCalendar.DATE)));
260         taskform.setDueDateMonth(String.valueOf(now.get(GregorianCalendar.MONTH)));
261         taskform.setDueDateYear(String.valueOf(now.get(GregorianCalendar.YEAR)));
262         
263     }
264
265     private void _editWorkflowTask(ActionRequest req, ActionResponse res,
266             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
267
268         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
269         WorkflowTaskForm taskform = (WorkflowTaskForm) form;
270         BeanUtils.copyProperties(taskform, task);
271         if (task.getDueDate() != null) {
272             Calendar JavaDoc cal = GregorianCalendar.getInstance();
273             cal.setTime(task.getDueDate());
274             taskform.setDueDateDay(String.valueOf(cal.get(Calendar.DATE)));
275             taskform.setDueDateMonth(String.valueOf(cal.get(Calendar.MONTH)));
276             taskform.setDueDateYear(String.valueOf(cal.get(Calendar.YEAR)));
277         } else {
278             taskform.setNoDueDate(true);
279         }
280     }
281
282     private void _viewWorkflowTask(ActionRequest req, ActionResponse res,
283             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
284
285         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
286         WorkflowTaskForm taskform = (WorkflowTaskForm) form;
287         BeanUtils.copyProperties(taskform, task);
288         if (task.getDueDate() != null) {
289             Calendar JavaDoc cal = GregorianCalendar.getInstance();
290             cal.setTime(task.getDueDate());
291             taskform.setDueDateDay(String.valueOf(cal.get(Calendar.DATE)));
292             taskform.setDueDateMonth(String.valueOf(cal.get(Calendar.MONTH)));
293             taskform.setDueDateYear(String.valueOf(cal.get(Calendar.YEAR)));
294         }
295     }
296
297     private void _changeWorkflowTaskStatus(ActionRequest req, ActionResponse res,
298             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
299
300         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
301         String JavaDoc oldStatus = task.getStatus();
302         String JavaDoc newStatus = req.getParameter ("new_status");
303         task.setStatus(newStatus);
304
305         String JavaDoc changeDesc = "Status changed from " + oldStatus + " -> " + task.getStatus();
306         _logWorkflowTaskHistory(task, user, changeDesc);
307         WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
308         
309
310     }
311
312     private void _addWorkflowComment(ActionRequest req, ActionResponse res,
313             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
314
315         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
316         String JavaDoc comment = req.getParameter ("comment");
317         WorkflowComment taskComment = new WorkflowComment ();
318         taskComment.setComment(comment);
319         taskComment.setCreationDate(new Date JavaDoc());
320         taskComment.setPostedBy(user.getUserId());
321         InodeFactory.saveInode(taskComment);
322         task.addChild(taskComment);
323
324         String JavaDoc changeDesc = "Comment added: <br>" + comment;
325         _logWorkflowTaskHistory(task, user, changeDesc);
326         
327         WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
328         
329     }
330
331     private void _addFileToWorkflow(ActionRequest req, ActionResponse res,
332             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
333
334         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
335         String JavaDoc fileToAttachInode = req.getParameter ("file_inode");
336         File fileToAttach = (File) InodeFactory.getInode(fileToAttachInode, File.class);
337         if (fileToAttach.getInode() > 0) {
338             task.addChild(fileToAttach);
339             String JavaDoc changeDesc = "File Added: " + fileToAttach.getFileName();
340             _logWorkflowTaskHistory(task, user, changeDesc);
341             WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
342             
343         }
344
345     }
346
347     private void _removeFileToWorkflow(ActionRequest req, ActionResponse res,
348             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
349
350         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
351         String JavaDoc fileToAttachInode = req.getParameter ("file_inode");
352         File fileToAttach = (File) InodeFactory.getInode(fileToAttachInode, File.class);
353         if (fileToAttach.getInode() > 0) {
354             task.deleteChild(fileToAttach);
355             String JavaDoc changeDesc = "File Removed: " + fileToAttach.getFileName();
356             _logWorkflowTaskHistory(task, user, changeDesc);
357             WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
358             
359         }
360
361     }
362
363     private void _assignWorkflowTask(ActionRequest req, ActionResponse res,
364             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
365
366         WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT);
367         String JavaDoc lastUser = task.getAssignedTo();
368         String JavaDoc newUserId = req.getParameter ("user_id");
369         task.setAssignedTo(newUserId);
370         InodeFactory.saveInode(task);
371         if (UtilMethods.isSet(lastUser)){
372             String JavaDoc changeDesc = "Task Assigned from " + UtilMethods.getUserFullName(lastUser) +
373             " to " + UtilMethods.getUserFullName(task.getAssignedTo());
374             _logWorkflowTaskHistory(task, user, changeDesc);
375             WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
376         } else {
377             String JavaDoc changeDesc = "Task Assigned to " + UtilMethods.getUserFullName(task.getAssignedTo());
378             _logWorkflowTaskHistory(task, user, changeDesc);
379             WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc));
380         }
381     }
382
383     private void _retrieveWorkflowTask(ActionRequest req, String JavaDoc webkey) throws Exception JavaDoc {
384         WorkflowTask webAsset = (WorkflowTask) InodeFactory.getInode(req
385                 .getParameter("inode"), WorkflowTask.class);
386         req.setAttribute(webkey, webAsset);
387     }
388     
389     private void _logWorkflowTaskHistory (WorkflowTask task, User user, String JavaDoc history) {
390         WorkflowHistory hist = new WorkflowHistory ();
391         hist.setChangeDescription(history);
392         hist.setCreationDate(new Date JavaDoc ());
393         hist.setMadeBy(user.getUserId());
394         InodeFactory.saveInode(hist);
395         task.addChild(hist);
396     }
397     
398     private String JavaDoc _buildWorkflowEmailBody (ActionRequest req, WorkflowTask task, String JavaDoc change) {
399         
400         java.util.Map JavaDoc params = new java.util.HashMap JavaDoc();
401         params.put("struts_action", new String JavaDoc[] { "/ext/workflows/edit_workflow_task" });
402         params.put("cmd", new String JavaDoc[] { "view" } );
403         params.put("inode", new String JavaDoc[] { String.valueOf(task.getInode()) });
404         
405         String JavaDoc serverName = req.getServerName();
406     
407         String JavaDoc ref = com.dotmarketing.util.PortletURLUtil.getActionURL(req, WindowState.MAXIMIZED
408             .toString(), params);
409         
410         String JavaDoc fullLink = "http://" + serverName + ref;
411
412         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc ();
413         buffer.append(
414               "<table align=\"center\" border=\"1\" width=\"50%\">" +
415               " <tr>" +
416               " <td align=\"center\" colspan=\"2\"><b>" + change + "</b></td>" +
417               " </tr>" +
418               " <tr>" +
419               " <td width=\"15%\" nowrap><b>Task</b></td><td><a HREF=\"" + fullLink + "\">" + task.getTitle() + "</a></td>" +
420               " </tr>" +
421               " <tr>" +
422               " <td nowrap><b>Created</b></td><td>" + UtilMethods.dateToHTMLDate(task.getCreationDate()) + " " + UtilMethods.dateToHTMLTime(task.getCreationDate()) + "</td>" +
423               " </tr>" +
424               " <tr>" +
425               " <td nowrap><b>Author</b></td><td>" + UtilMethods.getUserFullName(task.getCreatedBy()) + "</td>" +
426               " </tr>" +
427               " <tr>" +
428               " <td nowrap><b>Modified</b></td><td>" + UtilMethods.dateToHTMLDate(task.getModDate()) + " " + UtilMethods.dateToHTMLTime(task.getModDate()) + "</td>" +
429               " </tr>" +
430               " <tr>" +
431               " <td nowrap><b>Asignee</b></td><td>" + UtilMethods.getUserFullName(task.getAssignedTo()) + "</td>" +
432               " </tr>" +
433               " <tr>" +
434               " <td nowrap><b>Due Date</b></td><td>" + UtilMethods.dateToHTMLDate(task.getDueDate()) + "</td>" +
435               " </tr>" +
436               " <tr>" +
437               " <td nowrap><b>Status</b></td><td>" + task.getStatus() + "</td>" +
438               " </tr>" +
439               "</table>"
440         );
441         
442         return buffer.toString();
443     }
444
445 }
Popular Tags