001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.kernel.repository.model.Folder;
018 import com.liferay.portal.kernel.servlet.SessionErrors;
019 import com.liferay.portal.kernel.servlet.SessionMessages;
020 import com.liferay.portal.kernel.util.ArrayUtil;
021 import com.liferay.portal.kernel.util.Constants;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.security.auth.PrincipalException;
026 import com.liferay.portal.service.ServiceContext;
027 import com.liferay.portal.service.ServiceContextFactory;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.theme.ThemeDisplay;
030 import com.liferay.portal.util.PortalUtil;
031 import com.liferay.portal.util.WebKeys;
032 import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
033 import com.liferay.portlet.documentlibrary.DuplicateFileException;
034 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
035 import com.liferay.portlet.documentlibrary.FolderNameException;
036 import com.liferay.portlet.documentlibrary.InvalidFolderException;
037 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
039 import com.liferay.portlet.documentlibrary.model.DLFolder;
040 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
041 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
042 import com.liferay.portlet.trash.util.TrashUtil;
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.RenderRequest;
051 import javax.portlet.RenderResponse;
052
053 import org.apache.struts.action.ActionForm;
054 import org.apache.struts.action.ActionForward;
055 import org.apache.struts.action.ActionMapping;
056
057
063 public class EditFolderAction extends PortletAction {
064
065 @Override
066 public void processAction(
067 ActionMapping actionMapping, ActionForm actionForm,
068 PortletConfig portletConfig, ActionRequest actionRequest,
069 ActionResponse actionResponse)
070 throws Exception {
071
072 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
073
074 try {
075 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
076 updateFolder(actionRequest);
077 }
078 else if (cmd.equals(Constants.DELETE)) {
079 deleteFolders(actionRequest, false);
080 }
081 else if (cmd.equals(Constants.MOVE)) {
082 moveFolders(actionRequest, false);
083 }
084 else if (cmd.equals(Constants.MOVE_FROM_TRASH)) {
085 moveFolders(actionRequest, true);
086 }
087 else if (cmd.equals(Constants.MOVE_TO_TRASH)) {
088 deleteFolders(actionRequest, true);
089 }
090 else if (cmd.equals(Constants.SUBSCRIBE)) {
091 subscribeFolder(actionRequest);
092 }
093 else if (cmd.equals(Constants.UNSUBSCRIBE)) {
094 unsubscribeFolder(actionRequest);
095 }
096 else if (cmd.equals("updateWorkflowDefinitions")) {
097 updateWorkflowDefinitions(actionRequest);
098 }
099
100 sendRedirect(actionRequest, actionResponse);
101 }
102 catch (Exception e) {
103 if (e instanceof NoSuchFolderException ||
104 e instanceof PrincipalException) {
105
106 SessionErrors.add(actionRequest, e.getClass());
107
108 setForward(actionRequest, "portlet.document_library.error");
109 }
110 else if (e instanceof DuplicateFileException ||
111 e instanceof DuplicateFolderNameException ||
112 e instanceof FolderNameException) {
113
114 SessionErrors.add(actionRequest, e.getClass());
115 }
116 else if (e instanceof InvalidFolderException) {
117 SessionErrors.add(actionRequest, e.getClass(), e);
118 }
119 else {
120 throw e;
121 }
122 }
123 }
124
125 @Override
126 public ActionForward render(
127 ActionMapping actionMapping, ActionForm actionForm,
128 PortletConfig portletConfig, RenderRequest renderRequest,
129 RenderResponse renderResponse)
130 throws Exception {
131
132 try {
133 ActionUtil.getFolder(renderRequest);
134 }
135 catch (Exception e) {
136 if (e instanceof NoSuchFolderException ||
137 e instanceof PrincipalException) {
138
139 SessionErrors.add(renderRequest, e.getClass());
140
141 return actionMapping.findForward(
142 "portlet.document_library.error");
143 }
144 else {
145 throw e;
146 }
147 }
148
149 return actionMapping.findForward(
150 getForward(renderRequest, "portlet.document_library.edit_folder"));
151 }
152
153 protected void deleteFolders(
154 ActionRequest actionRequest, boolean moveToTrash)
155 throws Exception {
156
157 String deleteEntryTitle = null;
158
159 long[] deleteFolderIds = null;
160
161 long folderId = ParamUtil.getLong(actionRequest, "folderId");
162
163 if (folderId > 0) {
164 deleteFolderIds = new long[] {folderId};
165 }
166 else {
167 deleteFolderIds = StringUtil.split(
168 ParamUtil.getString(actionRequest, "folderIds"), 0L);
169 }
170
171 for (int i = 0; i < deleteFolderIds.length; i++) {
172 long deleteFolderId = deleteFolderIds[i];
173
174 if (moveToTrash) {
175 Folder folder = DLAppServiceUtil.moveFolderToTrash(
176 deleteFolderId);
177
178 if (i == 0) {
179 deleteEntryTitle = TrashUtil.getOriginalTitle(
180 folder.getName());
181 }
182 }
183 else {
184 DLAppServiceUtil.deleteFolder(deleteFolderId);
185 }
186
187 AssetPublisherUtil.removeRecentFolderId(
188 actionRequest, DLFileEntry.class.getName(), deleteFolderId);
189 }
190
191 if (moveToTrash && (deleteFolderIds.length > 0)) {
192 Map<String, String[]> data = new HashMap<String, String[]>();
193
194 data.put(
195 "deleteEntryClassName",
196 new String[] {DLFolder.class.getName()});
197
198 if (Validator.isNotNull(deleteEntryTitle)) {
199 data.put("deleteEntryTitle", new String[] {deleteEntryTitle});
200 }
201
202 data.put(
203 "restoreFolderIds", ArrayUtil.toStringArray(deleteFolderIds));
204
205 SessionMessages.add(
206 actionRequest,
207 PortalUtil.getPortletId(actionRequest) +
208 SessionMessages.KEY_SUFFIX_DELETE_SUCCESS_DATA, data);
209
210 hideDefaultSuccessMessage(actionRequest);
211 }
212 }
213
214 protected void moveFolders(
215 ActionRequest actionRequest, boolean moveFromTrash)
216 throws Exception {
217
218 long[] folderIds = null;
219
220 long folderId = ParamUtil.getLong(actionRequest, "folderId");
221
222 if (folderId > 0) {
223 folderIds = new long[] {folderId};
224 }
225 else {
226 folderIds = StringUtil.split(
227 ParamUtil.getString(actionRequest, "folderIds"), 0L);
228 }
229
230 long parentFolderId = ParamUtil.getLong(
231 actionRequest, "parentFolderId");
232
233 ServiceContext serviceContext = ServiceContextFactory.getInstance(
234 DLFileEntry.class.getName(), actionRequest);
235
236 for (long moveFolderId : folderIds) {
237 if (moveFromTrash) {
238 DLAppServiceUtil.moveFolderFromTrash(
239 moveFolderId, parentFolderId, serviceContext);
240 }
241 else {
242 DLAppServiceUtil.moveFolder(
243 moveFolderId, parentFolderId, serviceContext);
244 }
245 }
246 }
247
248 protected void subscribeFolder(ActionRequest actionRequest)
249 throws Exception {
250
251 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
252 WebKeys.THEME_DISPLAY);
253
254 long folderId = ParamUtil.getLong(actionRequest, "folderId");
255
256 DLAppServiceUtil.subscribeFolder(
257 themeDisplay.getScopeGroupId(), folderId);
258 }
259
260 protected void unsubscribeFolder(ActionRequest actionRequest)
261 throws Exception {
262
263 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
264 WebKeys.THEME_DISPLAY);
265
266 long folderId = ParamUtil.getLong(actionRequest, "folderId");
267
268 DLAppServiceUtil.unsubscribeFolder(
269 themeDisplay.getScopeGroupId(), folderId);
270 }
271
272 protected void updateFolder(ActionRequest actionRequest) throws Exception {
273 long folderId = ParamUtil.getLong(actionRequest, "folderId");
274
275 long repositoryId = ParamUtil.getLong(actionRequest, "repositoryId");
276 long parentFolderId = ParamUtil.getLong(
277 actionRequest, "parentFolderId");
278 String name = ParamUtil.getString(actionRequest, "name");
279 String description = ParamUtil.getString(actionRequest, "description");
280
281 ServiceContext serviceContext = ServiceContextFactory.getInstance(
282 DLFolder.class.getName(), actionRequest);
283
284 if (folderId <= 0) {
285
286
287
288 DLAppServiceUtil.addFolder(
289 repositoryId, parentFolderId, name, description,
290 serviceContext);
291 }
292 else {
293
294
295
296 DLAppServiceUtil.updateFolder(
297 folderId, name, description, serviceContext);
298 }
299 }
300
301 protected void updateWorkflowDefinitions(ActionRequest actionRequest)
302 throws Exception {
303
304 ServiceContext serviceContext = ServiceContextFactory.getInstance(
305 DLFileEntry.class.getName(), actionRequest);
306
307 DLAppServiceUtil.updateFolder(
308 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, null, null,
309 serviceContext);
310 }
311
312 }