001
014
015 package com.liferay.portlet.workflowdefinitions.action;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.servlet.SessionErrors;
021 import com.liferay.portal.kernel.servlet.SessionMessages;
022 import com.liferay.portal.kernel.upload.UploadPortletRequest;
023 import com.liferay.portal.kernel.util.Constants;
024 import com.liferay.portal.kernel.util.FileUtil;
025 import com.liferay.portal.kernel.util.LocaleUtil;
026 import com.liferay.portal.kernel.util.LocalizationUtil;
027 import com.liferay.portal.kernel.util.ParamUtil;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.kernel.util.Validator;
030 import com.liferay.portal.kernel.workflow.RequiredWorkflowDefinitionException;
031 import com.liferay.portal.kernel.workflow.WorkflowDefinition;
032 import com.liferay.portal.kernel.workflow.WorkflowDefinitionFileException;
033 import com.liferay.portal.kernel.workflow.WorkflowDefinitionManagerUtil;
034 import com.liferay.portal.kernel.workflow.WorkflowException;
035 import com.liferay.portal.struts.PortletAction;
036 import com.liferay.portal.theme.ThemeDisplay;
037 import com.liferay.portal.util.PortalUtil;
038 import com.liferay.portal.util.WebKeys;
039
040 import java.io.File;
041
042 import java.util.Locale;
043 import java.util.Map;
044
045 import javax.portlet.ActionRequest;
046 import javax.portlet.ActionResponse;
047 import javax.portlet.PortletConfig;
048 import javax.portlet.RenderRequest;
049 import javax.portlet.RenderResponse;
050
051 import org.apache.struts.action.ActionForm;
052 import org.apache.struts.action.ActionForward;
053 import org.apache.struts.action.ActionMapping;
054
055
058 public class EditWorkflowDefinitionAction extends PortletAction {
059
060 @Override
061 public void processAction(
062 ActionMapping actionMapping, ActionForm actionForm,
063 PortletConfig portletConfig, ActionRequest actionRequest,
064 ActionResponse actionResponse)
065 throws Exception {
066
067 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
068
069 try {
070 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
071 updateWorkflowDefinition(actionRequest);
072 }
073 else if (cmd.equals(Constants.DEACTIVATE) ||
074 cmd.equals(Constants.DELETE) ||
075 cmd.equals(Constants.RESTORE)) {
076
077 deleteWorkflowDefinition(actionRequest);
078 }
079
080 sendRedirect(actionRequest, actionResponse);
081 }
082 catch (Exception e) {
083 if (e instanceof RequiredWorkflowDefinitionException) {
084 SessionErrors.add(actionRequest, e.getClass());
085
086 SessionMessages.add(
087 actionRequest,
088 PortalUtil.getPortletId(actionRequest) +
089 SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
090
091 setForward(actionRequest, "portlet.workflow_definitions.view");
092 }
093 else if (e instanceof WorkflowDefinitionFileException) {
094 SessionErrors.add(actionRequest, e.getClass());
095 }
096 else if (e instanceof WorkflowException) {
097 _log.error(e, e);
098
099 SessionErrors.add(actionRequest, e.getClass());
100
101 setForward(actionRequest, "portlet.workflow_definitions.error");
102 }
103 else {
104 throw e;
105 }
106 }
107 }
108
109 @Override
110 public ActionForward render(
111 ActionMapping actionMapping, ActionForm actionForm,
112 PortletConfig portletConfig, RenderRequest renderRequest,
113 RenderResponse renderResponse)
114 throws Exception {
115
116 try {
117 ActionUtil.getWorkflowDefinition(renderRequest);
118 }
119 catch (Exception e) {
120 if (e instanceof WorkflowException) {
121 SessionErrors.add(renderRequest, e.getClass());
122
123 return actionMapping.findForward(
124 "portlet.workflow_definitions.error");
125 }
126 else {
127 throw e;
128 }
129 }
130
131 return actionMapping.findForward(
132 getForward(
133 renderRequest,
134 "portlet.workflow_definitions.edit_workflow_definition"));
135 }
136
137 protected void deleteWorkflowDefinition(ActionRequest actionRequest)
138 throws Exception {
139
140 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
141
142 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
143 WebKeys.THEME_DISPLAY);
144
145 String name = ParamUtil.getString(actionRequest, "name");
146 int version = ParamUtil.getInteger(actionRequest, "version");
147
148 if (cmd.equals(Constants.DEACTIVATE) || cmd.equals(Constants.RESTORE)) {
149 boolean active = !cmd.equals(Constants.DEACTIVATE);
150
151 WorkflowDefinitionManagerUtil.updateActive(
152 themeDisplay.getCompanyId(), themeDisplay.getUserId(), name,
153 version, active);
154 }
155 else {
156 WorkflowDefinitionManagerUtil.undeployWorkflowDefinition(
157 themeDisplay.getCompanyId(), themeDisplay.getUserId(), name,
158 version);
159 }
160 }
161
162 protected String getTitle(Map<Locale, String> titleMap) {
163 if (titleMap == null) {
164 return null;
165 }
166
167 String value = StringPool.BLANK;
168
169 Locale[] locales = LanguageUtil.getAvailableLocales();
170
171 for (Locale locale : locales) {
172 String languageId = LocaleUtil.toLanguageId(locale);
173 String title = titleMap.get(locale);
174
175 if (Validator.isNotNull(title)) {
176 value = LocalizationUtil.updateLocalization(
177 value, "Title", title, languageId);
178 }
179 else {
180 value = LocalizationUtil.removeLocalization(
181 value, "Title", languageId);
182 }
183 }
184
185 return value;
186 }
187
188 @Override
189 protected boolean isCheckMethodOnProcessAction() {
190 return _CHECK_METHOD_ON_PROCESS_ACTION;
191 }
192
193 protected void updateWorkflowDefinition(ActionRequest actionRequest)
194 throws Exception {
195
196 UploadPortletRequest uploadPortletRequest =
197 PortalUtil.getUploadPortletRequest(actionRequest);
198
199 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
200 WebKeys.THEME_DISPLAY);
201
202 Map<Locale, String> titleMap = LocalizationUtil.getLocalizationMap(
203 actionRequest, "title");
204
205 File file = uploadPortletRequest.getFile("file");
206
207 WorkflowDefinition workflowDefinition = null;
208
209 if (file == null) {
210 String name = ParamUtil.getString(actionRequest, "name");
211 int version = ParamUtil.getInteger(actionRequest, "version");
212
213 workflowDefinition =
214 WorkflowDefinitionManagerUtil.getWorkflowDefinition(
215 themeDisplay.getCompanyId(), name, version);
216
217 WorkflowDefinitionManagerUtil.updateTitle(
218 themeDisplay.getCompanyId(), themeDisplay.getUserId(), name,
219 version, getTitle(titleMap));
220 }
221 else {
222 workflowDefinition =
223 WorkflowDefinitionManagerUtil.deployWorkflowDefinition(
224 themeDisplay.getCompanyId(), themeDisplay.getUserId(),
225 getTitle(titleMap), FileUtil.getBytes(file));
226 }
227
228 actionRequest.setAttribute(
229 WebKeys.WORKFLOW_DEFINITION, workflowDefinition);
230 }
231
232 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
233
234 private static Log _log = LogFactoryUtil.getLog(
235 EditWorkflowDefinitionAction.class);
236
237 }