2 * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
\r
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
5 * of this software and associated documentation files (the "Software"), to deal
\r
6 * in the Software without restriction, including without limitation the rights
\r
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
8 * copies of the Software, and to permit persons to whom the Software is
\r
9 * furnished to do so, subject to the following conditions:
\r
11 * The above copyright notice and this permission notice shall be included in
\r
12 * all copies or substantial portions of the Software.
\r
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
23 package com.pentila.entSavoie.cahierDeTexte.action;
\r
25 import java.io.InputStream;
\r
26 import java.util.Map;
\r
28 import javax.portlet.ActionRequest;
\r
29 import javax.portlet.ActionResponse;
\r
30 import javax.portlet.PortletConfig;
\r
31 import javax.servlet.http.HttpServletRequest;
\r
32 import javax.servlet.http.HttpServletResponse;
\r
34 import org.apache.struts.action.ActionForm;
\r
35 import org.apache.struts.action.ActionForward;
\r
36 import org.apache.struts.action.ActionMapping;
\r
38 import com.liferay.portal.kernel.log.Log;
\r
39 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
40 import com.liferay.portal.kernel.util.ParamUtil;
\r
41 import com.liferay.portal.struts.ActionConstants;
\r
42 import com.liferay.portal.struts.PortletAction;
\r
43 import com.liferay.portal.util.PortalUtil;
\r
44 import com.liferay.portlet.documentlibrary.conversion.util.ENTDocumentConversionServiceUtil;
\r
45 import com.pentila.entSavoie.cahierDeTexte.util.CDTAttachConstants;
\r
46 import com.pentila.entSavoie.servlet.FLVPseudoStreamer;
\r
47 import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;
\r
48 import com.pentila.entSavoie.utils.URIFormat;
\r
51 * Class used to download an attached file linked to either a CDTSession or a homework
\r
54 public class GetCDTAttachmentAction extends PortletAction {
\r
56 private static Log _log = LogFactoryUtil.getLog(GetCDTAttachmentAction.class);
\r
58 public ActionForward strutsExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
\r
61 long sessionId = ParamUtil.getLong(request, "sessionId", 0);
\r
62 long homeworkId = ParamUtil.getLong(request, "homeworkId", 0);
\r
63 long companyId = ParamUtil.getLong(request, "companyId");
\r
64 String fileName = ParamUtil.getString(request, "attachment");
\r
65 String targetExtension = ParamUtil.getString(request, "targetExtension", "");
\r
67 fileName = URIFormat.decodeURIComponent(fileName);
\r
69 getFile(sessionId, homeworkId, companyId, fileName, targetExtension, response, request);
\r
73 catch (Exception e) {
\r
74 PortalUtil.sendError(e, request, response);
\r
79 public void processAction(ActionMapping mapping, ActionForm form, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
\r
82 long sessionId = ParamUtil.getLong(actionRequest, "sessionId", 0);
\r
83 long homeworkId = ParamUtil.getLong(actionRequest, "homeworkId", 0);
\r
84 long companyId = ParamUtil.getLong(actionRequest, "companyId");
\r
85 String fileName = ParamUtil.getString(actionRequest, "attachment");
\r
86 String targetExtension = ParamUtil.getString(actionRequest, "targetExtension", "");
\r
88 fileName = URIFormat.decodeURIComponent(fileName);
\r
90 HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse);
\r
91 HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest);
\r
93 getFile(sessionId, homeworkId, companyId, fileName, targetExtension, response, request);
\r
95 setForward(actionRequest, ActionConstants.COMMON_NULL);
\r
97 catch (Exception e) {
\r
98 PortalUtil.sendError(e, actionRequest, actionResponse);
\r
104 * Fetches an attach file to either a session or a homework
\r
106 * @param homeworkId
\r
109 * @param targetExtension
\r
112 * @throws Exception
\r
114 protected void getFile(long sessionId, long homeworkId, long companyId, String fileName, String targetExtension, HttpServletResponse response, HttpServletRequest request) throws Exception {
\r
116 InputStream is = null;
\r
118 if (sessionId == 0 && homeworkId == 0) {
\r
119 _log.error("Error : attached files must be linked to a sessionId or a homeworkId");
\r
122 if (sessionId != 0 && homeworkId != 0) {
\r
123 _log.error("Error : attached files must be linked to either a sessionId or a homeworkId");
\r
127 String path = CDTAttachConstants.ATTACH_FILE_PATH;
\r
128 if (sessionId != 0) {
\r
129 path += CDTAttachConstants.ATTACH_FILE_PATH_SESSIONS + sessionId + "/" + fileName;
\r
131 path += CDTAttachConstants.ATTACH_FILE_PATH_HOMEWORKS + homeworkId + "/" + fileName;
\r
134 // Convert file if needed
\r
135 Map<String, Object> fais = ENTDocumentConversionServiceUtil.getFileAsInputStream(
\r
142 String contentType = (String)fais.get("contentType");
\r
143 int contentLength = (Integer)fais.get("contentLength");
\r
144 fileName = (String)fais.get("fileName");
\r
145 is = (InputStream)fais.get("stream");
\r
147 String ppos = request.getParameter("start");
\r
148 long pos = ppos == null || ppos.length() == 0 ? 0 : Long.parseLong(ppos);
\r
150 String forceContentDisposition = ParamUtil.getString(request, "contentDispo");
\r
151 String fcd = forceContentDisposition == null ? "" : forceContentDisposition;
\r
153 if (pos != 0 && contentType.equals("application/x-shockwave-flash") && fcd.isEmpty()) {
\r
154 FLVPseudoStreamer flvPseudoStreamer = new FLVPseudoStreamer();
\r
155 flvPseudoStreamer.service(request, response, fileName, is, contentLength, contentType);
\r
158 ServletResponseServiceUtil.sendFile(response, fileName, is, contentLength, contentType, fcd);
\r
169 protected boolean isCheckMethodOnProcessAction() {
\r
170 return _CHECK_METHOD_ON_PROCESS_ACTION;
\r
173 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
\r