--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portlet.messageboards.action;\r
+\r
+import java.io.InputStream;\r
+import java.util.Map;\r
+\r
+import javax.portlet.ActionRequest;\r
+import javax.portlet.ActionResponse;\r
+import javax.portlet.PortletConfig;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.apache.struts.action.ActionForm;\r
+import org.apache.struts.action.ActionForward;\r
+import org.apache.struts.action.ActionMapping;\r
+\r
+import com.liferay.portal.kernel.util.ParamUtil;\r
+import com.liferay.portal.struts.ActionConstants;\r
+import com.liferay.portal.struts.PortletAction;\r
+import com.liferay.portal.util.PortalUtil;\r
+import com.liferay.portlet.documentlibrary.conversion.util.ENTDocumentConversionServiceUtil;\r
+import com.liferay.portlet.messageboards.model.MBMessage;\r
+import com.liferay.portlet.messageboards.service.MBMessageServiceUtil;\r
+import com.pentila.entSavoie.servlet.FLVPseudoStreamer;\r
+import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ */\r
+public class GetMessageAttachmentAction extends PortletAction {\r
+\r
+ @Override\r
+ public void processAction(\r
+ ActionMapping mapping, ActionForm form, PortletConfig portletConfig,\r
+ ActionRequest actionRequest, ActionResponse actionResponse)\r
+ throws Exception {\r
+\r
+ try {\r
+ long messageId = ParamUtil.getLong(actionRequest, "messageId");\r
+ String fileName = ParamUtil.getString(actionRequest, "attachment");\r
+\r
+ //on recupere le targetExtension\r
+ String targetExtension = ParamUtil.getString(actionRequest, "targetExtension", "");\r
+\r
+ HttpServletRequest request = PortalUtil.getHttpServletRequest(\r
+ actionRequest);\r
+ HttpServletResponse response = PortalUtil.getHttpServletResponse(\r
+ actionResponse);\r
+\r
+ getFile(messageId, fileName, targetExtension, request, response);\r
+\r
+ setForward(actionRequest, ActionConstants.COMMON_NULL);\r
+ }\r
+ catch (Exception e) {\r
+ PortalUtil.sendError(e, actionRequest, actionResponse);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public ActionForward strutsExecute(\r
+ ActionMapping mapping, ActionForm form, HttpServletRequest request,\r
+ HttpServletResponse response)\r
+ throws Exception {\r
+\r
+ try {\r
+ long messageId = ParamUtil.getLong(request, "messageId");\r
+ String fileName = ParamUtil.getString(request, "attachment");\r
+\r
+ //on recupere le targetExtension\r
+ String targetExtension = ParamUtil.getString(request, "targetExtension", "");\r
+\r
+ getFile(messageId, fileName, targetExtension, request, response);\r
+\r
+ return null;\r
+ }\r
+ catch (Exception e) {\r
+ PortalUtil.sendError(e, request, response);\r
+\r
+ return null;\r
+ }\r
+ }\r
+\r
+ protected void getFile(\r
+ long messageId, String fileName, String targetExtension, HttpServletRequest request,\r
+ HttpServletResponse response)\r
+ throws Exception {\r
+\r
+ InputStream is = null;\r
+\r
+ try {\r
+ MBMessage message = MBMessageServiceUtil.getMessage(messageId);\r
+ long companyId = message.getCompanyId();\r
+ \r
+ String path = message.getAttachmentsDir() + "/" + fileName;\r
+ \r
+ // realise la conversion du fichier ou nous retourne celui-ci si pas de conversion voulu\r
+ Map<String, Object> fais = ENTDocumentConversionServiceUtil.getFileAsInputStream(\r
+ path,\r
+ companyId,\r
+ targetExtension,\r
+ fileName\r
+ );\r
+ \r
+ String contentType = (String)fais.get("contentType");\r
+ int contentLength = (Integer)fais.get("contentLength");\r
+ fileName = (String)fais.get("fileName");\r
+ is = (InputStream)fais.get("stream");\r
+ \r
+ String ppos = request.getParameter("start");\r
+ long pos = ppos == null || ppos.length() == 0 ? 0 : Long.parseLong(ppos);\r
+ \r
+ String forceContentDisposition = ParamUtil.getString(request, "contentDispo");\r
+ String fcd = forceContentDisposition == null ? "" : forceContentDisposition;\r
+ \r
+ if (pos!=0 && contentType.equals("application/x-shockwave-flash") && fcd.isEmpty()) {\r
+ FLVPseudoStreamer flvPseudoStreamer = new FLVPseudoStreamer();\r
+ flvPseudoStreamer.service(request, response, fileName, is, contentLength, contentType);\r
+ }\r
+ else {\r
+ ServletResponseServiceUtil.sendFile(\r
+ response, fileName, is, contentLength, contentType, fcd);\r
+ }\r
+ }\r
+ finally {\r
+ if(is != null){\r
+ is.close();\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ protected boolean isCheckMethodOnProcessAction() {\r
+ return _CHECK_METHOD_ON_PROCESS_ACTION;\r
+ }\r
+\r
+ private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;\r
+\r
+}
\ No newline at end of file