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