1
22
23 package com.liferay.portlet.documentlibrary.action;
24
25 import com.liferay.documentlibrary.DuplicateFileException;
26 import com.liferay.documentlibrary.FileNameException;
27 import com.liferay.documentlibrary.FileSizeException;
28 import com.liferay.documentlibrary.SourceFileNameException;
29 import com.liferay.portal.DuplicateLockException;
30 import com.liferay.portal.kernel.servlet.SessionErrors;
31 import com.liferay.portal.kernel.upload.UploadPortletRequest;
32 import com.liferay.portal.kernel.util.Constants;
33 import com.liferay.portal.kernel.util.ParamUtil;
34 import com.liferay.portal.kernel.util.PropertiesUtil;
35 import com.liferay.portal.kernel.util.StringUtil;
36 import com.liferay.portal.security.auth.PrincipalException;
37 import com.liferay.portal.security.permission.ActionKeys;
38 import com.liferay.portal.struts.PortletAction;
39 import com.liferay.portal.theme.ThemeDisplay;
40 import com.liferay.portal.util.PortalUtil;
41 import com.liferay.portal.util.WebKeys;
42 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
43 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
44 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
45 import com.liferay.portlet.documentlibrary.form.FileEntryForm;
46 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
47 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
48 import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
49 import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
50 import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
51 import com.liferay.portlet.taggedcontent.util.AssetPublisherUtil;
52 import com.liferay.portlet.tags.TagsEntryException;
53
54 import java.io.File;
55
56 import javax.portlet.ActionRequest;
57 import javax.portlet.ActionResponse;
58 import javax.portlet.PortletConfig;
59 import javax.portlet.RenderRequest;
60 import javax.portlet.RenderResponse;
61
62 import org.apache.struts.action.ActionForm;
63 import org.apache.struts.action.ActionForward;
64 import org.apache.struts.action.ActionMapping;
65
66
72 public class EditFileEntryAction extends PortletAction {
73
74 public void processAction(
75 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
76 ActionRequest actionRequest, ActionResponse actionResponse)
77 throws Exception {
78
79 FileEntryForm fileEntryForm = (FileEntryForm)form;
80
81 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
82
83 try {
84 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
85 updateFileEntry(fileEntryForm, actionRequest, actionResponse);
86 }
87 else if (cmd.equals(Constants.DELETE)) {
88 deleteFileEntry(actionRequest);
89 }
90 else if (cmd.equals(Constants.LOCK)) {
91 lockFileEntry(actionRequest);
92 }
93 else if (cmd.equals(Constants.UNLOCK)) {
94 unlockFileEntry(actionRequest);
95 }
96
97 sendRedirect(actionRequest, actionResponse);
98 }
99 catch (Exception e) {
100 if (e instanceof DuplicateLockException ||
101 e instanceof NoSuchFileEntryException ||
102 e instanceof PrincipalException) {
103
104 if (e instanceof DuplicateLockException) {
105 DuplicateLockException dle = (DuplicateLockException)e;
106
107 SessionErrors.add(
108 actionRequest, dle.getClass().getName(), dle.getLock());
109 }
110 else {
111 SessionErrors.add(actionRequest, e.getClass().getName());
112 }
113
114 setForward(actionRequest, "portlet.document_library.error");
115 }
116 else if (e instanceof DuplicateFileException ||
117 e instanceof DuplicateFolderNameException ||
118 e instanceof FileNameException ||
119 e instanceof FileSizeException ||
120 e instanceof NoSuchFolderException ||
121 e instanceof SourceFileNameException) {
122
123 SessionErrors.add(actionRequest, e.getClass().getName());
124 }
125 else if (e instanceof TagsEntryException) {
126 SessionErrors.add(actionRequest, e.getClass().getName(), e);
127 }
128 else {
129 throw e;
130 }
131 }
132 }
133
134 public ActionForward render(
135 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
136 RenderRequest renderRequest, RenderResponse renderResponse)
137 throws Exception {
138
139 try {
140 ActionUtil.getFileEntry(renderRequest);
141 }
142 catch (Exception e) {
143 if (e instanceof NoSuchFileEntryException ||
144 e instanceof PrincipalException) {
145
146 SessionErrors.add(renderRequest, e.getClass().getName());
147
148 return mapping.findForward("portlet.document_library.error");
149 }
150 else {
151 throw e;
152 }
153 }
154
155 String forward = "portlet.document_library.edit_file_entry";
156
157 return mapping.findForward(getForward(renderRequest, forward));
158 }
159
160 protected void deleteFileEntry(ActionRequest actionRequest)
161 throws Exception {
162
163 long folderId = ParamUtil.getLong(actionRequest, "folderId");
164 String name = ParamUtil.getString(actionRequest, "name");
165 double version = ParamUtil.getDouble(actionRequest, "version");
166
167 DLFileEntryServiceUtil.deleteFileEntry(folderId, name, version);
168 }
169
170 protected void lockFileEntry(ActionRequest actionRequest) throws Exception {
171 long folderId = ParamUtil.getLong(actionRequest, "folderId");
172 String name = ParamUtil.getString(actionRequest, "name");
173
174 DLFileEntryServiceUtil.lockFileEntry(folderId, name);
175 }
176
177 protected void unlockFileEntry(ActionRequest actionRequest)
178 throws Exception {
179
180 long folderId = ParamUtil.getLong(actionRequest, "folderId");
181 String name = ParamUtil.getString(actionRequest, "name");
182
183 DLFileEntryServiceUtil.unlockFileEntry(folderId, name);
184 }
185
186 protected void updateFileEntry(
187 FileEntryForm fileEntryForm, ActionRequest actionRequest,
188 ActionResponse actionResponse)
189 throws Exception {
190
191 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
192 actionRequest);
193
194 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
195
196 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
197 WebKeys.THEME_DISPLAY);
198
199 long folderId = ParamUtil.getLong(uploadRequest, "folderId");
200 long newFolderId = ParamUtil.getLong(uploadRequest, "newFolderId");
201 String name = ParamUtil.getString(uploadRequest, "name");
202 String sourceFileName = uploadRequest.getFileName("file");
203
204 String title = ParamUtil.getString(uploadRequest, "title");
205 String description = ParamUtil.getString(uploadRequest, "description");
206
207 String[] tagsEntries = StringUtil.split(
208 ParamUtil.getString(uploadRequest, "tagsEntries"));
209
210 String extraSettings = PropertiesUtil.toString(
211 fileEntryForm.getExtraSettingsProperties());
212
213 File file = uploadRequest.getFile("file");
214
215 String[] communityPermissions = PortalUtil.getCommunityPermissions(
216 actionRequest);
217 String[] guestPermissions = PortalUtil.getGuestPermissions(
218 actionRequest);
219
220 if (cmd.equals(Constants.ADD)) {
221
222
224 DLFolderPermission.check(
225 themeDisplay.getPermissionChecker(), folderId,
226 ActionKeys.ADD_DOCUMENT);
227
228 DLFileEntry entry = DLFileEntryLocalServiceUtil.addFileEntry(
229 themeDisplay.getUserId(), folderId, sourceFileName, title,
230 description, tagsEntries, extraSettings, file,
231 communityPermissions, guestPermissions);
232
233 AssetPublisherUtil.addAndStoreSelection(
234 actionRequest, DLFileEntry.class.getName(),
235 entry.getFileEntryId(), -1);
236 }
237 else {
238
239
241 DLFileEntryPermission.check(
242 themeDisplay.getPermissionChecker(), folderId, name,
243 ActionKeys.UPDATE);
244
245 DLFileEntryLocalServiceUtil.updateFileEntry(
246 themeDisplay.getUserId(), folderId, newFolderId, name,
247 sourceFileName, title, description, tagsEntries, extraSettings,
248 file);
249 }
250
251 AssetPublisherUtil.addRecentFolderId(
252 actionRequest, DLFileEntry.class.getName(), folderId);
253 }
254
255 }