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