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.SessionErrors;
23 import com.liferay.portal.kernel.upload.UploadPortletRequest;
24 import com.liferay.portal.kernel.util.Constants;
25 import com.liferay.portal.kernel.util.ParamUtil;
26 import com.liferay.portal.kernel.util.PropertiesParamUtil;
27 import com.liferay.portal.kernel.util.UnicodeProperties;
28 import com.liferay.portal.kernel.util.Validator;
29 import com.liferay.portal.kernel.workflow.StatusConstants;
30 import com.liferay.portal.security.auth.PrincipalException;
31 import com.liferay.portal.service.ServiceContext;
32 import com.liferay.portal.service.ServiceContextFactory;
33 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
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(
128 actionResponse);
129
130 response.setStatus(
131 HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
132 }
133
134 SessionErrors.add(actionRequest, e.getClass().getName());
135 }
136 else if (e instanceof AssetTagException) {
137 SessionErrors.add(actionRequest, e.getClass().getName(), e);
138 }
139 else {
140 throw e;
141 }
142 }
143 }
144
145 public ActionForward render(
146 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
147 RenderRequest renderRequest, RenderResponse renderResponse)
148 throws Exception {
149
150 try {
151 ActionUtil.getFileEntry(renderRequest);
152 }
153 catch (Exception e) {
154 if (e instanceof NoSuchFileEntryException ||
155 e instanceof PrincipalException) {
156
157 SessionErrors.add(renderRequest, e.getClass().getName());
158
159 return mapping.findForward("portlet.document_library.error");
160 }
161 else {
162 throw e;
163 }
164 }
165
166 String forward = "portlet.document_library.edit_file_entry";
167
168 return mapping.findForward(getForward(renderRequest, forward));
169 }
170
171 protected void deleteFileEntry(ActionRequest actionRequest)
172 throws Exception {
173
174 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
175 WebKeys.THEME_DISPLAY);
176
177 long groupId = themeDisplay.getScopeGroupId();
178 long folderId = ParamUtil.getLong(actionRequest, "folderId");
179 String name = ParamUtil.getString(actionRequest, "name");
180 String version = ParamUtil.getString(actionRequest, "version");
181
182 DLFileEntryServiceUtil.deleteFileEntry(
183 groupId, folderId, name, version);
184 }
185
186 protected void lockFileEntry(ActionRequest actionRequest) throws Exception {
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
194 DLFileEntryServiceUtil.lockFileEntry(groupId, folderId, name);
195 }
196
197 protected void moveFileEntry(ActionRequest actionRequest) throws Exception {
198 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
199 WebKeys.THEME_DISPLAY);
200
201 long groupId = themeDisplay.getScopeGroupId();
202 long folderId = ParamUtil.getLong(actionRequest, "folderId");
203 long newFolderId = ParamUtil.getLong(actionRequest, "newFolderId");
204 String name = ParamUtil.getString(actionRequest, "name");
205
206 ServiceContext serviceContext = ServiceContextFactory.getInstance(
207 DLFileEntry.class.getName(), actionRequest);
208
209 DLFileEntry fileEntry = DLFileEntryServiceUtil.getFileEntry(
210 groupId, folderId, name);
211
212 DLFileEntryServiceUtil.updateFileEntry(
213 groupId, folderId, newFolderId, name, null, fileEntry.getTitle(),
214 fileEntry.getDescription(), null, false,
215 fileEntry.getExtraSettings(), (File)null, serviceContext);
216 }
217
218 protected void revertFileEntry(ActionRequest actionRequest)
219 throws Exception {
220
221 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
222 WebKeys.THEME_DISPLAY);
223
224 long groupId = themeDisplay.getScopeGroupId();
225 long folderId = ParamUtil.getLong(actionRequest, "folderId");
226 String name = ParamUtil.getString(actionRequest, "name");
227
228 DLFileVersion fileVersion =
229 DLFileVersionLocalServiceUtil.getLatestFileVersion(
230 groupId, folderId, name);
231
232 if (fileVersion.getStatus() != StatusConstants.DRAFT) {
233 return;
234 }
235
236 DLFileEntryServiceUtil.deleteFileEntry(
237 groupId, folderId, name, fileVersion.getVersion());
238 }
239
240 protected void unlockFileEntry(ActionRequest actionRequest)
241 throws Exception {
242
243 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
244 WebKeys.THEME_DISPLAY);
245
246 long groupId = themeDisplay.getScopeGroupId();
247 long folderId = ParamUtil.getLong(actionRequest, "folderId");
248 String name = ParamUtil.getString(actionRequest, "name");
249
250 DLFileEntryServiceUtil.unlockFileEntry(groupId, folderId, name);
251 }
252
253 protected void updateFileEntry(
254 ActionRequest actionRequest, ActionResponse actionResponse)
255 throws Exception {
256
257 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
258 actionRequest);
259
260 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
261
262 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
263 WebKeys.THEME_DISPLAY);
264
265 long groupId = themeDisplay.getScopeGroupId();
266 long folderId = ParamUtil.getLong(uploadRequest, "folderId");
267 long newFolderId = ParamUtil.getLong(uploadRequest, "newFolderId");
268 String name = ParamUtil.getString(uploadRequest, "name");
269 String sourceFileName = uploadRequest.getFileName("file");
270
271 String title = ParamUtil.getString(uploadRequest, "title");
272 String description = ParamUtil.getString(uploadRequest, "description");
273 String versionDescription = ParamUtil.getString(
274 uploadRequest, "versionDescription");
275 boolean majorVersion = ParamUtil.getBoolean(
276 uploadRequest, "majorVersion");
277
278 UnicodeProperties extraSettingsProperties =
279 PropertiesParamUtil.getProperties(
280 actionRequest, "extraSettingsProperties(");
281
282 String extraSettings = extraSettingsProperties.toString();
283
284 File file = uploadRequest.getFile("file");
285
286 if (Validator.isNotNull(sourceFileName) && !file.exists()) {
287 file.createNewFile();
288 }
289
290 ServiceContext serviceContext = ServiceContextFactory.getInstance(
291 DLFileEntry.class.getName(), actionRequest);
292
293 if (cmd.equals(Constants.ADD)) {
294
295
297 if (WorkflowDefinitionLinkLocalServiceUtil.
298 hasWorkflowDefinitionLink(
299 themeDisplay.getCompanyId(), groupId,
300 DLFileEntry.class.getName())) {
301
302 serviceContext.setStatus(StatusConstants.DRAFT);
303 }
304
305 DLFileEntry fileEntry = DLFileEntryServiceUtil.addFileEntry(
306 groupId, newFolderId, sourceFileName, title, description,
307 versionDescription, extraSettings, file, serviceContext);
308
309 AssetPublisherUtil.addAndStoreSelection(
310 actionRequest, DLFileEntry.class.getName(),
311 fileEntry.getFileEntryId(), -1);
312 }
313 else {
314
315
317 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
318 groupId, folderId, name);
319
320 if (WorkflowInstanceLinkLocalServiceUtil.hasWorkflowInstanceLink(
321 themeDisplay.getCompanyId(), groupId,
322 DLFileEntry.class.getName(), fileEntry.getFileEntryId())) {
323
324 serviceContext.setStatus(StatusConstants.DRAFT);
325 }
326
327 DLFileEntryServiceUtil.updateFileEntry(
328 groupId, folderId, newFolderId, name, sourceFileName, title,
329 description, versionDescription, majorVersion, extraSettings,
330 file, serviceContext);
331 }
332
333 AssetPublisherUtil.addRecentFolderId(
334 actionRequest, DLFileEntry.class.getName(), folderId);
335 }
336
337 }