001
014
015 package com.liferay.portlet.journal.action;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.portlet.LiferayPortletConfig;
020 import com.liferay.portal.kernel.portlet.LiferayWindowState;
021 import com.liferay.portal.kernel.servlet.SessionErrors;
022 import com.liferay.portal.kernel.servlet.SessionMessages;
023 import com.liferay.portal.kernel.util.ArrayUtil;
024 import com.liferay.portal.kernel.util.Constants;
025 import com.liferay.portal.kernel.util.ParamUtil;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portal.kernel.util.Validator;
028 import com.liferay.portal.security.auth.PrincipalException;
029 import com.liferay.portal.service.ServiceContext;
030 import com.liferay.portal.service.ServiceContextFactory;
031 import com.liferay.portal.struts.PortletAction;
032 import com.liferay.portal.theme.ThemeDisplay;
033 import com.liferay.portal.util.PortalUtil;
034 import com.liferay.portal.util.WebKeys;
035 import com.liferay.portlet.PortletURLFactoryUtil;
036 import com.liferay.portlet.asset.AssetCategoryException;
037 import com.liferay.portlet.asset.AssetTagException;
038 import com.liferay.portlet.journal.DuplicateArticleIdException;
039 import com.liferay.portlet.journal.DuplicateFolderNameException;
040 import com.liferay.portlet.journal.NoSuchArticleException;
041 import com.liferay.portlet.journal.NoSuchFolderException;
042 import com.liferay.portlet.journal.model.JournalArticle;
043 import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
044 import com.liferay.portlet.journal.service.JournalFolderServiceUtil;
045
046 import java.util.HashMap;
047 import java.util.Map;
048
049 import javax.portlet.ActionRequest;
050 import javax.portlet.ActionResponse;
051 import javax.portlet.PortletConfig;
052 import javax.portlet.PortletRequest;
053 import javax.portlet.PortletURL;
054 import javax.portlet.RenderRequest;
055 import javax.portlet.RenderResponse;
056 import javax.portlet.WindowState;
057
058 import org.apache.struts.action.ActionForm;
059 import org.apache.struts.action.ActionForward;
060 import org.apache.struts.action.ActionMapping;
061
062
065 public class EditEntryAction extends PortletAction {
066
067 @Override
068 public void processAction(
069 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
070 ActionRequest actionRequest, ActionResponse actionResponse)
071 throws Exception {
072
073 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
074
075 try {
076 if (cmd.equals(Constants.DELETE) ||
077 cmd.equals(Constants.DELETE_VERSIONS)) {
078
079 deleteEntries(
080 (LiferayPortletConfig)portletConfig, actionRequest, false);
081 }
082 else if (cmd.equals(Constants.EXPIRE)) {
083 expireEntries(actionRequest);
084 }
085 else if (cmd.equals(Constants.MOVE)) {
086 moveEntries(actionRequest);
087 }
088 else if (cmd.equals(Constants.MOVE_TO_TRASH)) {
089 deleteEntries(
090 (LiferayPortletConfig)portletConfig, actionRequest, true);
091 }
092 else if (cmd.equals(Constants.RESTORE)) {
093 restoreEntryFromTrash(actionRequest);
094 }
095
096 String redirect = PortalUtil.escapeRedirect(
097 ParamUtil.getString(actionRequest, "redirect"));
098
099 if (cmd.equals(Constants.DELETE_VERSIONS) &&
100 !ActionUtil.hasArticle(actionRequest)) {
101
102 String referringPortletResource = ParamUtil.getString(
103 actionRequest, "referringPortletResource");
104
105 if (Validator.isNotNull(referringPortletResource)) {
106 setForward(
107 actionRequest,
108 "portlet.journal.asset.add_asset_redirect");
109
110 return;
111 }
112 else {
113 ThemeDisplay themeDisplay =
114 (ThemeDisplay)actionRequest.getAttribute(
115 WebKeys.THEME_DISPLAY);
116
117 PortletURL portletURL = PortletURLFactoryUtil.create(
118 actionRequest, portletConfig.getPortletName(),
119 themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
120
121 redirect = portletURL.toString();
122 }
123 }
124
125 WindowState windowState = actionRequest.getWindowState();
126
127 if (!windowState.equals(LiferayWindowState.POP_UP)) {
128 sendRedirect(actionRequest, actionResponse);
129 }
130 else if (Validator.isNotNull(redirect)) {
131 actionResponse.sendRedirect(redirect);
132 }
133 }
134 catch (Exception e) {
135 if (e instanceof NoSuchArticleException ||
136 e instanceof NoSuchFolderException ||
137 e instanceof PrincipalException) {
138
139 SessionErrors.add(actionRequest, e.getClass());
140
141 setForward(actionRequest, "portlet.journal.error");
142 }
143 else if (e instanceof DuplicateArticleIdException ||
144 e instanceof DuplicateFolderNameException ||
145 e instanceof NoSuchFolderException) {
146
147 SessionErrors.add(actionRequest, e.getClass());
148 }
149 else if (e instanceof AssetCategoryException ||
150 e instanceof AssetTagException) {
151
152 SessionErrors.add(actionRequest, e.getClass(), e);
153 }
154 else {
155 throw e;
156 }
157 }
158 }
159
160 @Override
161 public ActionForward render(
162 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
163 RenderRequest renderRequest, RenderResponse renderResponse)
164 throws Exception {
165
166 try {
167 ActionUtil.getArticles(renderRequest);
168 ActionUtil.getFolders(renderRequest);
169 }
170 catch (Exception e) {
171 if (e instanceof NoSuchArticleException ||
172 e instanceof PrincipalException) {
173
174 SessionErrors.add(renderRequest, e.getClass());
175
176 return mapping.findForward("portlet.journal.error");
177 }
178 else {
179 throw e;
180 }
181 }
182
183 String forward = "portlet.journal.edit_entry";
184
185 return mapping.findForward(getForward(renderRequest, forward));
186 }
187
188 protected void deleteEntries(
189 LiferayPortletConfig liferayPortletConfig,
190 ActionRequest actionRequest, boolean moveToTrash)
191 throws Exception {
192
193 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
194 WebKeys.THEME_DISPLAY);
195
196 long[] deleteFolderIds = StringUtil.split(
197 ParamUtil.getString(actionRequest, "folderIds"), 0L);
198
199 for (long deleteFolderId : deleteFolderIds) {
200 if (moveToTrash) {
201 JournalFolderServiceUtil.moveFolderToTrash(deleteFolderId);
202 }
203 else {
204 JournalFolderServiceUtil.deleteFolder(deleteFolderId);
205 }
206 }
207
208 String[] deleteArticleIds = StringUtil.split(
209 ParamUtil.getString(actionRequest, "articleIds"));
210
211 long[] restoreArticleIds = new long[deleteArticleIds.length];
212
213 for (int i = 0; i < deleteArticleIds.length; i++) {
214 String deleteArticleId = deleteArticleIds[i];
215
216 if (moveToTrash) {
217 JournalArticle article =
218 JournalArticleServiceUtil.moveArticleToTrash(
219 themeDisplay.getScopeGroupId(), deleteArticleId);
220
221 restoreArticleIds[i] = article.getResourcePrimKey();
222 }
223 else {
224 ActionUtil.deleteArticle(actionRequest, deleteArticleId);
225 }
226 }
227
228 if (moveToTrash &&
229 ((deleteArticleIds.length > 0) || (deleteFolderIds.length > 0))) {
230
231 Map<String, String[]> data = new HashMap<String, String[]>();
232
233 data.put(
234 "restoreArticleIds",
235 ArrayUtil.toStringArray(restoreArticleIds));
236 data.put(
237 "restoreFolderIds", ArrayUtil.toStringArray(deleteFolderIds));
238
239 SessionMessages.add(
240 actionRequest,
241 liferayPortletConfig.getPortletId() +
242 SessionMessages.KEY_SUFFIX_DELETE_SUCCESS_DATA, data);
243
244 SessionMessages.add(
245 actionRequest,
246 liferayPortletConfig.getPortletId() +
247 SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_SUCCESS_MESSAGE);
248 }
249 }
250
251 protected void expireEntries(ActionRequest actionRequest) throws Exception {
252 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
253 WebKeys.THEME_DISPLAY);
254
255 long[] expireFolderIds = StringUtil.split(
256 ParamUtil.getString(actionRequest, "folderIds"), 0L);
257
258 ServiceContext serviceContext = ServiceContextFactory.getInstance(
259 JournalArticle.class.getName(), actionRequest);
260
261 for (long expireFolderId : expireFolderIds) {
262 ActionUtil.expireFolder(
263 themeDisplay.getScopeGroupId(), expireFolderId, serviceContext);
264 }
265
266 String[] expireArticleIds = StringUtil.split(
267 ParamUtil.getString(actionRequest, "articleIds"));
268
269 for (String expireArticleId : expireArticleIds) {
270 ActionUtil.expireArticle(actionRequest, expireArticleId);
271 }
272 }
273
274 protected void moveEntries(ActionRequest actionRequest) throws Exception {
275 long newFolderId = ParamUtil.getLong(actionRequest, "newFolderId");
276
277 long[] folderIds = StringUtil.split(
278 ParamUtil.getString(actionRequest, "folderIds"), 0L);
279
280 ServiceContext serviceContext = ServiceContextFactory.getInstance(
281 JournalArticle.class.getName(), actionRequest);
282
283 for (long folderId : folderIds) {
284 JournalFolderServiceUtil.moveFolder(
285 folderId, newFolderId, serviceContext);
286 }
287
288 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
289 WebKeys.THEME_DISPLAY);
290
291 String[] articleIds = StringUtil.split(
292 ParamUtil.getString(actionRequest, "articleIds"));
293
294 for (String articleId : articleIds) {
295 JournalArticleServiceUtil.moveArticle(
296 themeDisplay.getScopeGroupId(), articleId, newFolderId);
297 }
298 }
299
300 protected void restoreEntryFromTrash(ActionRequest actionRequest)
301 throws PortalException, SystemException {
302
303 long[] restoreFolderIds = StringUtil.split(
304 ParamUtil.getString(actionRequest, "restoreFolderIds"), 0L);
305
306 for (long restoreFolderId : restoreFolderIds) {
307 JournalFolderServiceUtil.restoreFolderFromTrash(restoreFolderId);
308 }
309
310 long[] restoreArticleIds = StringUtil.split(
311 ParamUtil.getString(actionRequest, "restoreArticleIds"), 0L);
312
313 for (long restoreEntryId : restoreArticleIds) {
314 JournalArticleServiceUtil.restoreArticleFromTrash(restoreEntryId);
315 }
316 }
317
318 }