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