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