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.security.auth.PrincipalException;
31 import com.liferay.portal.service.ServiceContext;
32 import com.liferay.portal.service.ServiceContextFactory;
33 import com.liferay.portal.struts.PortletAction;
34 import com.liferay.portal.util.PortalUtil;
35 import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
36 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
37 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
38 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
39 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
40 import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
41 import com.liferay.portlet.tags.TagsEntryException;
42
43 import java.io.File;
44
45 import javax.portlet.ActionRequest;
46 import javax.portlet.ActionResponse;
47 import javax.portlet.PortletConfig;
48 import javax.portlet.RenderRequest;
49 import javax.portlet.RenderResponse;
50
51 import javax.servlet.http.HttpServletResponse;
52
53 import org.apache.struts.action.ActionForm;
54 import org.apache.struts.action.ActionForward;
55 import org.apache.struts.action.ActionMapping;
56
57
63 public class EditFileEntryAction extends PortletAction {
64
65 public void processAction(
66 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
67 ActionRequest actionRequest, ActionResponse actionResponse)
68 throws Exception {
69
70 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
71
72 try {
73 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
74 updateFileEntry(actionRequest, actionResponse);
75 }
76 else if (cmd.equals(Constants.DELETE)) {
77 deleteFileEntry(actionRequest);
78 }
79 else if (cmd.equals(Constants.LOCK)) {
80 lockFileEntry(actionRequest);
81 }
82 else if (cmd.equals(Constants.UNLOCK)) {
83 unlockFileEntry(actionRequest);
84 }
85
86 sendRedirect(actionRequest, actionResponse);
87 }
88 catch (Exception e) {
89 if (e instanceof DuplicateLockException ||
90 e instanceof NoSuchFileEntryException ||
91 e instanceof PrincipalException) {
92
93 if (e instanceof DuplicateLockException) {
94 DuplicateLockException dle = (DuplicateLockException)e;
95
96 SessionErrors.add(
97 actionRequest, dle.getClass().getName(), dle.getLock());
98 }
99 else {
100 SessionErrors.add(actionRequest, e.getClass().getName());
101 }
102
103 setForward(actionRequest, "portlet.document_library.error");
104 }
105 else if (e instanceof DuplicateFileException ||
106 e instanceof DuplicateFolderNameException ||
107 e instanceof FileNameException ||
108 e instanceof FileSizeException ||
109 e instanceof NoSuchFolderException ||
110 e instanceof SourceFileNameException) {
111
112 if (e instanceof DuplicateFileException) {
113 HttpServletResponse response =
114 PortalUtil.getHttpServletResponse(actionResponse);
115
116 response.setStatus(
117 ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION);
118 }
119 else if (e instanceof FileNameException) {
120 HttpServletResponse response =
121 PortalUtil.getHttpServletResponse(actionResponse);
122
123 response.setStatus(
124 ServletResponseConstants.SC_FILE_NAME_EXCEPTION);
125 }
126 else if (e instanceof FileSizeException) {
127 HttpServletResponse response =
128 PortalUtil.getHttpServletResponse(actionResponse);
129
130 response.setStatus(
131 ServletResponseConstants.SC_FILE_SIZE_EXCEPTION);
132 }
133
134 SessionErrors.add(actionRequest, e.getClass().getName());
135 }
136 else if (e instanceof TagsEntryException) {
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 long folderId = ParamUtil.getLong(actionRequest, "folderId");
175 String name = ParamUtil.getString(actionRequest, "name");
176 double version = ParamUtil.getDouble(actionRequest, "version");
177
178 DLFileEntryServiceUtil.deleteFileEntry(folderId, name, version);
179 }
180
181 protected void lockFileEntry(ActionRequest actionRequest) throws Exception {
182 long folderId = ParamUtil.getLong(actionRequest, "folderId");
183 String name = ParamUtil.getString(actionRequest, "name");
184
185 DLFileEntryServiceUtil.lockFileEntry(folderId, name);
186 }
187
188 protected void unlockFileEntry(ActionRequest actionRequest)
189 throws Exception {
190
191 long folderId = ParamUtil.getLong(actionRequest, "folderId");
192 String name = ParamUtil.getString(actionRequest, "name");
193
194 DLFileEntryServiceUtil.unlockFileEntry(folderId, name);
195 }
196
197 protected void updateFileEntry(
198 ActionRequest actionRequest, ActionResponse actionResponse)
199 throws Exception {
200
201 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
202 actionRequest);
203
204 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
205
206 long folderId = ParamUtil.getLong(uploadRequest, "folderId");
207 long newFolderId = ParamUtil.getLong(uploadRequest, "newFolderId");
208 String name = ParamUtil.getString(uploadRequest, "name");
209 String sourceFileName = uploadRequest.getFileName("file");
210
211 String title = ParamUtil.getString(uploadRequest, "title");
212 String description = ParamUtil.getString(uploadRequest, "description");
213 String versionDescription = ParamUtil.getString(
214 uploadRequest, "versionDescription");
215
216 UnicodeProperties extraSettingsProperties =
217 PropertiesParamUtil.getProperties(
218 actionRequest, "extraSettingsProperties(");
219
220 String extraSettings = extraSettingsProperties.toString();
221
222 File file = uploadRequest.getFile("file");
223
224 if (Validator.isNotNull(sourceFileName) && !file.exists()) {
225 file.createNewFile();
226 }
227
228 ServiceContext serviceContext = ServiceContextFactory.getInstance(
229 DLFileEntry.class.getName(), actionRequest);
230
231 if (cmd.equals(Constants.ADD)) {
232
233
235 DLFileEntry fileEntry = DLFileEntryServiceUtil.addFileEntry(
236 folderId, sourceFileName, title, description,
237 versionDescription, extraSettings, file, serviceContext);
238
239 AssetPublisherUtil.addAndStoreSelection(
240 actionRequest, DLFileEntry.class.getName(),
241 fileEntry.getFileEntryId(), -1);
242 }
243 else {
244
245
247 DLFileEntryServiceUtil.updateFileEntry(
248 folderId, newFolderId, name, sourceFileName, title, description,
249 versionDescription, extraSettings, file, serviceContext);
250 }
251
252 AssetPublisherUtil.addRecentFolderId(
253 actionRequest, DLFileEntry.class.getName(), folderId);
254 }
255
256 }