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.theme.ThemeDisplay;
34 import com.liferay.portal.util.PortalUtil;
35 import com.liferay.portal.util.WebKeys;
36 import com.liferay.portlet.asset.AssetTagException;
37 import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
38 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
39 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
40 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
41 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
42 import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
43
44 import java.io.File;
45
46 import javax.portlet.ActionRequest;
47 import javax.portlet.ActionResponse;
48 import javax.portlet.PortletConfig;
49 import javax.portlet.RenderRequest;
50 import javax.portlet.RenderResponse;
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.MOVE)) {
82 moveFileEntry(actionRequest);
83 }
84 else if (cmd.equals(Constants.UNLOCK)) {
85 unlockFileEntry(actionRequest);
86 }
87
88 sendRedirect(actionRequest, actionResponse);
89 }
90 catch (Exception e) {
91 if (e instanceof DuplicateLockException ||
92 e instanceof NoSuchFileEntryException ||
93 e instanceof PrincipalException) {
94
95 if (e instanceof DuplicateLockException) {
96 DuplicateLockException dle = (DuplicateLockException)e;
97
98 SessionErrors.add(
99 actionRequest, dle.getClass().getName(), dle.getLock());
100 }
101 else {
102 SessionErrors.add(actionRequest, e.getClass().getName());
103 }
104
105 setForward(actionRequest, "portlet.document_library.error");
106 }
107 else if (e instanceof DuplicateFileException ||
108 e instanceof DuplicateFolderNameException ||
109 e instanceof FileNameException ||
110 e instanceof FileSizeException ||
111 e instanceof NoSuchFolderException ||
112 e instanceof SourceFileNameException) {
113
114 SessionErrors.add(actionRequest, e.getClass().getName());
115 }
116 else if (e instanceof AssetTagException) {
117 SessionErrors.add(actionRequest, e.getClass().getName(), e);
118 }
119 else {
120 throw e;
121 }
122 }
123 }
124
125 public ActionForward render(
126 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
127 RenderRequest renderRequest, RenderResponse renderResponse)
128 throws Exception {
129
130 try {
131 ActionUtil.getFileEntry(renderRequest);
132 }
133 catch (Exception e) {
134 if (e instanceof NoSuchFileEntryException ||
135 e instanceof PrincipalException) {
136
137 SessionErrors.add(renderRequest, e.getClass().getName());
138
139 return mapping.findForward("portlet.document_library.error");
140 }
141 else {
142 throw e;
143 }
144 }
145
146 String forward = "portlet.document_library.edit_file_entry";
147
148 return mapping.findForward(getForward(renderRequest, forward));
149 }
150
151 protected void deleteFileEntry(ActionRequest actionRequest)
152 throws Exception {
153
154 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
155 WebKeys.THEME_DISPLAY);
156
157 long groupId = themeDisplay.getScopeGroupId();
158 long folderId = ParamUtil.getLong(actionRequest, "folderId");
159 String name = ParamUtil.getString(actionRequest, "name");
160 String version = ParamUtil.getString(actionRequest, "version");
161
162 DLFileEntryServiceUtil.deleteFileEntry(
163 groupId, folderId, name, version);
164 }
165
166 protected void lockFileEntry(ActionRequest actionRequest) throws Exception {
167 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
168 WebKeys.THEME_DISPLAY);
169
170 long groupId = themeDisplay.getScopeGroupId();
171 long folderId = ParamUtil.getLong(actionRequest, "folderId");
172 String name = ParamUtil.getString(actionRequest, "name");
173
174 DLFileEntryServiceUtil.lockFileEntry(groupId, folderId, name);
175 }
176
177 protected void moveFileEntry(ActionRequest actionRequest) throws Exception {
178 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
179 WebKeys.THEME_DISPLAY);
180
181 long groupId = themeDisplay.getScopeGroupId();
182 long folderId = ParamUtil.getLong(actionRequest, "folderId");
183 long newFolderId = ParamUtil.getLong(actionRequest, "newFolderId");
184 String name = ParamUtil.getString(actionRequest, "name");
185
186 ServiceContext serviceContext = ServiceContextFactory.getInstance(
187 DLFileEntry.class.getName(), actionRequest);
188
189 DLFileEntry fileEntry = DLFileEntryServiceUtil.getFileEntry(
190 groupId, folderId, name);
191
192 DLFileEntryServiceUtil.updateFileEntry(
193 groupId, folderId, newFolderId, name, null, fileEntry.getTitle(),
194 fileEntry.getDescription(), null, false,
195 fileEntry.getExtraSettings(), (File)null, serviceContext);
196 }
197
198 protected void unlockFileEntry(ActionRequest actionRequest)
199 throws Exception {
200
201 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
202 WebKeys.THEME_DISPLAY);
203
204 long groupId = themeDisplay.getScopeGroupId();
205 long folderId = ParamUtil.getLong(actionRequest, "folderId");
206 String name = ParamUtil.getString(actionRequest, "name");
207
208 DLFileEntryServiceUtil.unlockFileEntry(groupId, folderId, name);
209 }
210
211 protected void updateFileEntry(
212 ActionRequest actionRequest, ActionResponse actionResponse)
213 throws Exception {
214
215 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
216 actionRequest);
217
218 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
219
220 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
221 WebKeys.THEME_DISPLAY);
222
223 long groupId = themeDisplay.getScopeGroupId();
224 long folderId = ParamUtil.getLong(uploadRequest, "folderId");
225 long newFolderId = ParamUtil.getLong(uploadRequest, "newFolderId");
226 String name = ParamUtil.getString(uploadRequest, "name");
227 String sourceFileName = uploadRequest.getFileName("file");
228
229 String title = ParamUtil.getString(uploadRequest, "title");
230 String description = ParamUtil.getString(uploadRequest, "description");
231 String versionDescription = ParamUtil.getString(
232 uploadRequest, "versionDescription");
233 boolean majorVersion = ParamUtil.getBoolean(
234 uploadRequest, "majorVersion");
235
236 UnicodeProperties extraSettingsProperties =
237 PropertiesParamUtil.getProperties(
238 actionRequest, "extraSettingsProperties(");
239
240 String extraSettings = extraSettingsProperties.toString();
241
242 File file = uploadRequest.getFile("file");
243
244 if (Validator.isNotNull(sourceFileName) && !file.exists()) {
245 file.createNewFile();
246 }
247
248 ServiceContext serviceContext = ServiceContextFactory.getInstance(
249 DLFileEntry.class.getName(), actionRequest);
250
251 if (cmd.equals(Constants.ADD)) {
252
253
255 DLFileEntry fileEntry = DLFileEntryServiceUtil.addFileEntry(
256 groupId, newFolderId, sourceFileName, title, description,
257 versionDescription, extraSettings, file, serviceContext);
258
259 AssetPublisherUtil.addAndStoreSelection(
260 actionRequest, DLFileEntry.class.getName(),
261 fileEntry.getFileEntryId(), -1);
262 }
263 else {
264
265
267 DLFileEntryServiceUtil.updateFileEntry(
268 groupId, folderId, newFolderId, name, sourceFileName, title,
269 description, versionDescription, majorVersion, extraSettings,
270 file, serviceContext);
271 }
272
273 AssetPublisherUtil.addRecentFolderId(
274 actionRequest, DLFileEntry.class.getName(), folderId);
275 }
276
277 }