001
014
015 package com.liferay.portlet.workflowtasks.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.servlet.SessionMessages;
019 import com.liferay.portal.kernel.util.Constants;
020 import com.liferay.portal.kernel.util.HttpUtil;
021 import com.liferay.portal.kernel.util.ParamUtil;
022 import com.liferay.portal.kernel.util.Validator;
023 import com.liferay.portal.kernel.util.WebKeys;
024 import com.liferay.portal.kernel.workflow.WorkflowException;
025 import com.liferay.portal.kernel.workflow.WorkflowTaskDueDateException;
026 import com.liferay.portal.kernel.workflow.WorkflowTaskManagerUtil;
027 import com.liferay.portal.security.auth.PrincipalException;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.theme.ThemeDisplay;
030 import com.liferay.portal.util.PortalUtil;
031
032 import java.util.Calendar;
033 import java.util.Date;
034
035 import javax.portlet.ActionRequest;
036 import javax.portlet.ActionResponse;
037 import javax.portlet.PortletConfig;
038 import javax.portlet.RenderRequest;
039 import javax.portlet.RenderResponse;
040
041 import org.apache.struts.action.ActionForm;
042 import org.apache.struts.action.ActionForward;
043 import org.apache.struts.action.ActionMapping;
044
045
050 public class EditWorkflowTaskAction extends PortletAction {
051
052 @Override
053 public void processAction(
054 ActionMapping actionMapping, ActionForm actionForm,
055 PortletConfig portletConfig, ActionRequest actionRequest,
056 ActionResponse actionResponse)
057 throws Exception {
058
059 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
060
061 try {
062 if (cmd.equals(Constants.ASSIGN)) {
063 assignTask(actionRequest);
064 }
065 else if (cmd.equals(Constants.SAVE)) {
066 completeTask(actionRequest);
067 }
068 else if (cmd.equals(Constants.UPDATE)) {
069 updateTask(actionRequest);
070 }
071
072 String redirect = ParamUtil.getString(actionRequest, "redirect");
073 String closeRedirect = ParamUtil.getString(
074 actionRequest, "closeRedirect");
075
076 if (Validator.isNotNull(closeRedirect)) {
077 redirect = HttpUtil.setParameter(
078 redirect, "closeRedirect", closeRedirect);
079
080 SessionMessages.add(
081 actionRequest,
082 PortalUtil.getPortletId(actionRequest) +
083 SessionMessages.KEY_SUFFIX_CLOSE_REDIRECT,
084 closeRedirect);
085 }
086
087 sendRedirect(actionRequest, actionResponse, redirect);
088 }
089 catch (Exception e) {
090 if (e instanceof WorkflowTaskDueDateException) {
091 SessionErrors.add(actionRequest, e.getClass());
092 }
093 else if (e instanceof PrincipalException ||
094 e instanceof WorkflowException) {
095
096 SessionErrors.add(actionRequest, e.getClass());
097
098 setForward(actionRequest, "portlet.workflow_tasks.error");
099 }
100 else {
101 throw e;
102 }
103 }
104 }
105
106 @Override
107 public ActionForward render(
108 ActionMapping actionMapping, ActionForm actionForm,
109 PortletConfig portletConfig, RenderRequest renderRequest,
110 RenderResponse renderResponse)
111 throws Exception {
112
113 try {
114 ActionUtil.getWorkflowTask(renderRequest);
115 }
116 catch (Exception e) {
117 if (e instanceof PrincipalException ||
118 e instanceof WorkflowException) {
119
120 SessionErrors.add(renderRequest, e.getClass());
121
122 return actionMapping.findForward(
123 "portlet.workflow_tasks.error");
124 }
125 else {
126 throw e;
127 }
128 }
129
130 return actionMapping.findForward(
131 getForward(
132 renderRequest, "portlet.workflow_tasks.edit_workflow_task"));
133 }
134
135 protected void assignTask(ActionRequest actionRequest) throws Exception {
136 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
137 WebKeys.THEME_DISPLAY);
138
139 long workflowTaskId = ParamUtil.getLong(
140 actionRequest, "workflowTaskId");
141
142 long assigneeUserId = ParamUtil.getLong(
143 actionRequest, "assigneeUserId");
144 String comment = ParamUtil.getString(actionRequest, "comment");
145
146 WorkflowTaskManagerUtil.assignWorkflowTaskToUser(
147 themeDisplay.getCompanyId(), themeDisplay.getUserId(),
148 workflowTaskId, assigneeUserId, comment, null, null);
149 }
150
151 protected void completeTask(ActionRequest actionRequest) throws Exception {
152 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
153 WebKeys.THEME_DISPLAY);
154
155 long workflowTaskId = ParamUtil.getLong(
156 actionRequest, "workflowTaskId");
157
158 String transitionName = ParamUtil.getString(
159 actionRequest, "transitionName");
160 String comment = ParamUtil.getString(actionRequest, "comment");
161
162 WorkflowTaskManagerUtil.completeWorkflowTask(
163 themeDisplay.getCompanyId(), themeDisplay.getUserId(),
164 workflowTaskId, transitionName, comment, null);
165 }
166
167 @Override
168 protected boolean isCheckMethodOnProcessAction() {
169 return _CHECK_METHOD_ON_PROCESS_ACTION;
170 }
171
172 protected void updateTask(ActionRequest actionRequest) throws Exception {
173 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
174 WebKeys.THEME_DISPLAY);
175
176 long workflowTaskId = ParamUtil.getLong(
177 actionRequest, "workflowTaskId");
178
179 String comment = ParamUtil.getString(actionRequest, "comment");
180
181 int dueDateMonth = ParamUtil.getInteger(actionRequest, "dueDateMonth");
182 int dueDateDay = ParamUtil.getInteger(actionRequest, "dueDateDay");
183 int dueDateYear = ParamUtil.getInteger(actionRequest, "dueDateYear");
184 int dueDateHour = ParamUtil.getInteger(actionRequest, "dueDateHour");
185 int dueDateMinute = ParamUtil.getInteger(
186 actionRequest, "dueDateMinute");
187 int dueDateAmPm = ParamUtil.getInteger(actionRequest, "dueDateAmPm");
188
189 if (dueDateAmPm == Calendar.PM) {
190 dueDateHour += 12;
191 }
192
193 Date dueDate = PortalUtil.getDate(
194 dueDateMonth, dueDateDay, dueDateYear, dueDateHour, dueDateMinute,
195 WorkflowTaskDueDateException.class);
196
197 WorkflowTaskManagerUtil.updateDueDate(
198 themeDisplay.getCompanyId(), themeDisplay.getUserId(),
199 workflowTaskId, comment, dueDate);
200 }
201
202 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
203
204 }