001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.kernel.repository.model.FileEntry;
018 import com.liferay.portal.kernel.repository.model.FileVersion;
019 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
020 import com.liferay.portal.kernel.util.FileUtil;
021 import com.liferay.portal.kernel.util.HttpUtil;
022 import com.liferay.portal.kernel.util.MimeTypesUtil;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.kernel.util.StringPool;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.model.User;
027 import com.liferay.portal.security.auth.PrincipalException;
028 import com.liferay.portal.security.permission.PermissionChecker;
029 import com.liferay.portal.service.UserLocalServiceUtil;
030 import com.liferay.portal.struts.ActionConstants;
031 import com.liferay.portal.struts.PortletAction;
032 import com.liferay.portal.theme.ThemeDisplay;
033 import com.liferay.portal.util.Portal;
034 import com.liferay.portal.util.PortalUtil;
035 import com.liferay.portal.util.WebKeys;
036 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
037 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
038 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
039 import com.liferay.portlet.documentlibrary.util.DLUtil;
040 import com.liferay.portlet.documentlibrary.util.DocumentConversionUtil;
041
042 import java.io.File;
043 import java.io.FileInputStream;
044 import java.io.IOException;
045 import java.io.InputStream;
046
047 import javax.portlet.ActionRequest;
048 import javax.portlet.ActionResponse;
049 import javax.portlet.PortletConfig;
050
051 import javax.servlet.ServletException;
052 import javax.servlet.http.HttpServletRequest;
053 import javax.servlet.http.HttpServletResponse;
054
055 import org.apache.struts.action.ActionForm;
056 import org.apache.struts.action.ActionForward;
057 import org.apache.struts.action.ActionMapping;
058
059
065 public class GetFileAction extends PortletAction {
066
067 @Override
068 public ActionForward strutsExecute(
069 ActionMapping mapping, ActionForm form, HttpServletRequest request,
070 HttpServletResponse response)
071 throws Exception {
072
073 try {
074 long fileEntryId = ParamUtil.getLong(request, "fileEntryId");
075
076 long folderId = ParamUtil.getLong(request, "folderId");
077 String title = ParamUtil.getString(request, "title");
078 String version = ParamUtil.getString(request, "version");
079
080 long fileShortcutId = ParamUtil.getLong(request, "fileShortcutId");
081
082 String uuid = ParamUtil.getString(request, "uuid");
083
084 String targetExtension = ParamUtil.getString(
085 request, "targetExtension");
086
087 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
088 WebKeys.THEME_DISPLAY);
089
090 long groupId = ParamUtil.getLong(
091 request, "groupId", themeDisplay.getScopeGroupId());
092
093 getFile(
094 fileEntryId, folderId, title, version, fileShortcutId,
095 uuid, groupId, targetExtension, themeDisplay, request,
096 response);
097
098 return null;
099 }
100 catch (PrincipalException pe) {
101 processPrincipalException(pe, request, response);
102
103 return null;
104 }
105 catch (Exception e) {
106 PortalUtil.sendError(e, request, response);
107
108 return null;
109 }
110 }
111
112 @Override
113 public void processAction(
114 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
115 ActionRequest actionRequest, ActionResponse actionResponse)
116 throws Exception {
117
118 HttpServletRequest request = PortalUtil.getHttpServletRequest(
119 actionRequest);
120 HttpServletResponse response = PortalUtil.getHttpServletResponse(
121 actionResponse);
122
123 try {
124 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
125
126 long folderId = ParamUtil.getLong(actionRequest, "folderId");
127 String title = ParamUtil.getString(actionRequest, "title");
128 String version = ParamUtil.getString(actionRequest, "version");
129
130 long fileShortcutId = ParamUtil.getLong(
131 actionRequest, "fileShortcutId");
132
133 String uuid = ParamUtil.getString(actionRequest, "uuid");
134
135 String targetExtension = ParamUtil.getString(
136 actionRequest, "targetExtension");
137
138 ThemeDisplay themeDisplay =
139 (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
140
141 long groupId = ParamUtil.getLong(
142 actionRequest, "groupId", themeDisplay.getScopeGroupId());
143
144 getFile(
145 fileEntryId, folderId, title, version, fileShortcutId, uuid,
146 groupId, targetExtension, themeDisplay, request, response);
147
148 setForward(actionRequest, ActionConstants.COMMON_NULL);
149 }
150 catch (NoSuchFileEntryException nsfee) {
151 PortalUtil.sendError(
152 HttpServletResponse.SC_NOT_FOUND, nsfee, actionRequest,
153 actionResponse);
154 }
155 catch (PrincipalException pe) {
156 processPrincipalException(pe, request, response);
157 }
158 catch (Exception e) {
159 PortalUtil.sendError(e, actionRequest, actionResponse);
160 }
161 }
162
163 protected void getFile(
164 long fileEntryId, long folderId, String title, String version,
165 long fileShortcutId, String uuid, long groupId,
166 String targetExtension, ThemeDisplay themeDisplay,
167 HttpServletRequest request, HttpServletResponse response)
168 throws Exception {
169
170 FileEntry fileEntry = null;
171
172 if (Validator.isNotNull(uuid) && (groupId > 0)) {
173 fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(
174 uuid, groupId);
175
176 folderId = fileEntry.getFolderId();
177 }
178
179 if (fileEntryId > 0) {
180 fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId);
181 }
182 else if (fileShortcutId <= 0) {
183 if (Validator.isNotNull(title)) {
184 fileEntry = DLAppServiceUtil.getFileEntry(
185 groupId, folderId, title);
186 }
187 }
188 else {
189 DLFileShortcut fileShortcut = DLAppServiceUtil.getFileShortcut(
190 fileShortcutId);
191
192 fileEntryId = fileShortcut.getToFileEntryId();
193
194 fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId);
195 }
196
197 if (Validator.isNull(version)) {
198 if (Validator.isNotNull(fileEntry.getVersion())) {
199 version = fileEntry.getVersion();
200 }
201 else {
202 throw new NoSuchFileEntryException();
203 }
204 }
205
206 FileVersion fileVersion = fileEntry.getFileVersion(version);
207
208 InputStream is = fileVersion.getContentStream(true);
209 String fileName = fileVersion.getTitle();
210 long contentLength = fileVersion.getSize();
211 String contentType = fileVersion.getMimeType();
212
213 if (Validator.isNotNull(targetExtension)) {
214 String id = DLUtil.getTempFileId(
215 fileEntry.getFileEntryId(), version);
216
217 String sourceExtension = fileVersion.getExtension();
218
219 if (!fileName.endsWith(StringPool.PERIOD + sourceExtension)) {
220 fileName += StringPool.PERIOD + sourceExtension;
221 }
222
223 File convertedFile = DocumentConversionUtil.convert(
224 id, is, sourceExtension, targetExtension);
225
226 if (convertedFile != null) {
227 fileName = FileUtil.stripExtension(fileName).concat(
228 StringPool.PERIOD).concat(targetExtension);
229 is = new FileInputStream(convertedFile);
230 contentLength = convertedFile.length();
231 contentType = MimeTypesUtil.getContentType(fileName);
232 }
233 }
234
235 ServletResponseUtil.sendFile(
236 request, response, fileName, is, contentLength, contentType);
237 }
238
239 @Override
240 protected boolean isCheckMethodOnProcessAction() {
241 return _CHECK_METHOD_ON_PROCESS_ACTION;
242 }
243
244 protected void processPrincipalException(
245 Throwable t, HttpServletRequest request,
246 HttpServletResponse response)
247 throws IOException, ServletException {
248
249 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
250 WebKeys.THEME_DISPLAY);
251
252 PermissionChecker permissionChecker =
253 themeDisplay.getPermissionChecker();
254
255 long userId = permissionChecker.getUserId();
256
257 User user = null;
258
259 try {
260 user = UserLocalServiceUtil.getUser(userId);
261 }
262 catch (Exception e) {
263 }
264
265 if ((user != null) && !user.isDefaultUser()) {
266 PortalUtil.sendError(
267 HttpServletResponse.SC_UNAUTHORIZED, (Exception)t, request,
268 response);
269
270 return;
271 }
272
273 String redirect =
274 request.getContextPath() + Portal.PATH_MAIN + "/portal/login";
275
276 String currentURL = PortalUtil.getCurrentURL(request);
277
278 redirect = HttpUtil.addParameter(redirect, "redirect", currentURL);
279
280 response.sendRedirect(redirect);
281 }
282
283 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
284
285 }