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