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