1
14
15 package com.liferay.portlet.documentlibrary.action;
16
17 import com.liferay.documentlibrary.DuplicateFileException;
18 import com.liferay.documentlibrary.FileNameException;
19 import com.liferay.documentlibrary.FileSizeException;
20 import com.liferay.documentlibrary.SourceFileNameException;
21 import com.liferay.portal.DuplicateLockException;
22 import com.liferay.portal.kernel.servlet.ServletResponseConstants;
23 import com.liferay.portal.kernel.servlet.SessionErrors;
24 import com.liferay.portal.kernel.upload.UploadPortletRequest;
25 import com.liferay.portal.kernel.util.Constants;
26 import com.liferay.portal.kernel.util.ParamUtil;
27 import com.liferay.portal.kernel.util.PropertiesParamUtil;
28 import com.liferay.portal.kernel.util.UnicodeProperties;
29 import com.liferay.portal.kernel.util.Validator;
30 import com.liferay.portal.kernel.workflow.WorkflowConstants;
31 import com.liferay.portal.security.auth.PrincipalException;
32 import com.liferay.portal.service.ServiceContext;
33 import com.liferay.portal.service.ServiceContextFactory;
34 import com.liferay.portal.service.WorkflowInstanceLinkLocalServiceUtil;
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.asset.AssetTagException;
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.model.DLFileEntry;
45 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
46 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
47 import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
48 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
49
50 import java.io.File;
51
52 import javax.portlet.ActionRequest;
53 import javax.portlet.ActionResponse;
54 import javax.portlet.PortletConfig;
55 import javax.portlet.RenderRequest;
56 import javax.portlet.RenderResponse;
57
58 import javax.servlet.http.HttpServletResponse;
59
60 import org.apache.struts.action.ActionForm;
61 import org.apache.struts.action.ActionForward;
62 import org.apache.struts.action.ActionMapping;
63
64
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 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
78
79 try {
80 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
81 updateFileEntry(actionRequest, actionResponse);
82 }
83 else if (cmd.equals(Constants.DELETE)) {
84 deleteFileEntry(actionRequest);
85 }
86 else if (cmd.equals(Constants.LOCK)) {
87 lockFileEntry(actionRequest);
88 }
89 else if (cmd.equals(Constants.MOVE)) {
90 moveFileEntry(actionRequest);
91 }
92 else if (cmd.equals(Constants.REVERT)) {
93 revertFileEntry(actionRequest);
94 }
95 else if (cmd.equals(Constants.UNLOCK)) {
96 unlockFileEntry(actionRequest);
97 }
98
99 sendRedirect(actionRequest, actionResponse);
100 }
101 catch (Exception e) {
102 if (e instanceof DuplicateLockException ||
103 e instanceof NoSuchFileEntryException ||
104 e instanceof PrincipalException) {
105
106 if (e instanceof DuplicateLockException) {
107 DuplicateLockException dle = (DuplicateLockException)e;
108
109 SessionErrors.add(
110 actionRequest, dle.getClass().getName(), dle.getLock());
111 }
112 else {
113 SessionErrors.add(actionRequest, e.getClass().getName());
114 }
115
116 setForward(actionRequest, "portlet.document_library.error");
117 }
118 else if (e instanceof DuplicateFileException ||
119 e instanceof DuplicateFolderNameException ||
120 e instanceof FileNameException ||
121 e instanceof FileSizeException ||
122 e instanceof NoSuchFolderException ||
123 e instanceof SourceFileNameException) {
124
125 if (e instanceof DuplicateFileException) {
126 HttpServletResponse response =
127 PortalUtil.getHttpServletResponse(actionResponse);
128
129 response.setStatus(
130 ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION);
131 }
132 else if (e instanceof FileNameException) {
133 HttpServletResponse response =
134 PortalUtil.getHttpServletResponse(actionResponse);
135
136 response.setStatus(
137 ServletResponseConstants.SC_FILE_NAME_EXCEPTION);
138 }
139 else if (e instanceof FileSizeException) {
140 HttpServletResponse response =
141 PortalUtil.getHttpServletResponse(actionResponse);
142
143 response.setStatus(
144 ServletResponseConstants.SC_FILE_SIZE_EXCEPTION);
145 }
146
147 SessionErrors.add(actionRequest, e.getClass().getName());
148 }
149 else if (e instanceof AssetTagException) {
150 SessionErrors.add(actionRequest, e.getClass().getName(), e);
151 }
152 else {
153 throw e;
154 }
155 }
156 }
157
158 public ActionForward render(
159 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
160 RenderRequest renderRequest, RenderResponse renderResponse)
161 throws Exception {
162
163 try {
164 ActionUtil.getFileEntry(renderRequest);
165 }
166 catch (Exception e) {
167 if (e instanceof NoSuchFileEntryException ||
168 e instanceof PrincipalException) {
169
170 SessionErrors.add(renderRequest, e.getClass().getName());
171
172 return mapping.findForward("portlet.document_library.error");
173 }
174 else {
175 throw e;
176 }
177 }
178
179 String forward = "portlet.document_library.edit_file_entry";
180
181 return mapping.findForward(getForward(renderRequest, forward));
182 }
183
184 protected void deleteFileEntry(ActionRequest actionRequest)
185 throws Exception {
186
187 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
188 WebKeys.THEME_DISPLAY);
189
190 long groupId = themeDisplay.getScopeGroupId();
191 long folderId = ParamUtil.getLong(actionRequest, "folderId");
192 String name = ParamUtil.getString(actionRequest, "name");
193 String version = ParamUtil.getString(actionRequest, "version");
194
195 DLFileEntryServiceUtil.deleteFileEntry(
196 groupId, folderId, name, version);
197 }
198
199 protected void lockFileEntry(ActionRequest actionRequest) throws Exception {
200 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
201 WebKeys.THEME_DISPLAY);
202
203 long groupId = themeDisplay.getScopeGroupId();
204 long folderId = ParamUtil.getLong(actionRequest, "folderId");
205 String name = ParamUtil.getString(actionRequest, "name");
206
207 DLFileEntryServiceUtil.lockFileEntry(groupId, folderId, name);
208 }
209
210 protected void moveFileEntry(ActionRequest actionRequest) throws Exception {
211 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
212 WebKeys.THEME_DISPLAY);
213
214 long groupId = themeDisplay.getScopeGroupId();
215 long folderId = ParamUtil.getLong(actionRequest, "folderId");
216 long newFolderId = ParamUtil.getLong(actionRequest, "newFolderId");
217 String name = ParamUtil.getString(actionRequest, "name");
218
219 ServiceContext serviceContext = ServiceContextFactory.getInstance(
220 DLFileEntry.class.getName(), actionRequest);
221
222 DLFileEntry fileEntry = DLFileEntryServiceUtil.getFileEntry(
223 groupId, folderId, name);
224
225 DLFileEntryServiceUtil.updateFileEntry(
226 groupId, folderId, newFolderId, name, null, fileEntry.getTitle(),
227 fileEntry.getDescription(), null, false,
228 fileEntry.getExtraSettings(), (File)null, serviceContext);
229 }
230
231 protected void revertFileEntry(ActionRequest actionRequest)
232 throws Exception {
233
234 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
235 WebKeys.THEME_DISPLAY);
236
237 long groupId = themeDisplay.getScopeGroupId();
238 long folderId = ParamUtil.getLong(actionRequest, "folderId");
239 String name = ParamUtil.getString(actionRequest, "name");
240
241 DLFileVersion fileVersion =
242 DLFileVersionLocalServiceUtil.getLatestFileVersion(
243 groupId, folderId, name);
244
245 if (fileVersion.getStatus() != WorkflowConstants.STATUS_DRAFT) {
246 return;
247 }
248
249 DLFileEntryServiceUtil.deleteFileEntry(
250 groupId, folderId, name, fileVersion.getVersion());
251 }
252
253 protected void unlockFileEntry(ActionRequest actionRequest)
254 throws Exception {
255
256 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
257 WebKeys.THEME_DISPLAY);
258
259 long groupId = themeDisplay.getScopeGroupId();
260 long folderId = ParamUtil.getLong(actionRequest, "folderId");
261 String name = ParamUtil.getString(actionRequest, "name");
262
263 DLFileEntryServiceUtil.unlockFileEntry(groupId, folderId, name);
264 }
265
266 protected void updateFileEntry(
267 ActionRequest actionRequest, ActionResponse actionResponse)
268 throws Exception {
269
270 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
271 actionRequest);
272
273 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
274
275 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
276 WebKeys.THEME_DISPLAY);
277
278 long groupId = themeDisplay.getScopeGroupId();
279 long folderId = ParamUtil.getLong(uploadRequest, "folderId");
280 long newFolderId = ParamUtil.getLong(uploadRequest, "newFolderId");
281 String name = ParamUtil.getString(uploadRequest, "name");
282 String sourceFileName = uploadRequest.getFileName("file");
283
284 String title = ParamUtil.getString(uploadRequest, "title");
285 String description = ParamUtil.getString(uploadRequest, "description");
286 String versionDescription = ParamUtil.getString(
287 uploadRequest, "versionDescription");
288 boolean majorVersion = ParamUtil.getBoolean(
289 uploadRequest, "majorVersion");
290
291 UnicodeProperties extraSettingsProperties =
292 PropertiesParamUtil.getProperties(
293 actionRequest, "extraSettingsProperties--");
294
295 String extraSettings = extraSettingsProperties.toString();
296
297 File file = uploadRequest.getFile("file");
298
299 if (Validator.isNotNull(sourceFileName) && !file.exists()) {
300 file.createNewFile();
301 }
302
303 ServiceContext serviceContext = ServiceContextFactory.getInstance(
304 DLFileEntry.class.getName(), actionRequest);
305
306 if (cmd.equals(Constants.ADD)) {
307
308
310 DLFileEntry fileEntry = DLFileEntryServiceUtil.addFileEntry(
311 groupId, newFolderId, sourceFileName, title, description,
312 versionDescription, extraSettings, file, serviceContext);
313
314 AssetPublisherUtil.addAndStoreSelection(
315 actionRequest, DLFileEntry.class.getName(),
316 fileEntry.getFileEntryId(), -1);
317 }
318 else {
319
320
322 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
323 groupId, folderId, name);
324
325 if (WorkflowInstanceLinkLocalServiceUtil.hasWorkflowInstanceLink(
326 themeDisplay.getCompanyId(), groupId,
327 DLFileEntry.class.getName(), fileEntry.getFileEntryId())) {
328
329 serviceContext.setWorkflowAction(
330 WorkflowConstants.ACTION_SAVE_DRAFT);
331 }
332
333 DLFileEntryServiceUtil.updateFileEntry(
334 groupId, folderId, newFolderId, name, sourceFileName, title,
335 description, versionDescription, majorVersion, extraSettings,
336 file, serviceContext);
337 }
338
339 AssetPublisherUtil.addRecentFolderId(
340 actionRequest, DLFileEntry.class.getName(), folderId);
341 }
342
343 }