--- /dev/null
+/**\r
+ * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ */\r
+\r
+package com.pentila.entSavoie.cahierDeTexte.action;\r
+\r
+import com.liferay.documentlibrary.service.DLLocalServiceUtil;\r
+import com.liferay.documentlibrary.service.DLServiceUtil;\r
+import com.liferay.portal.kernel.util.Base64;\r
+import com.liferay.portal.kernel.util.FileUtil;\r
+import com.liferay.portal.kernel.util.MimeTypesUtil;\r
+import com.liferay.portal.kernel.util.ParamUtil;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.model.CompanyConstants;\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.DocumentConversionServiceUtil;\r
+import com.liferay.util.SystemProperties;\r
+import com.liferay.util.servlet.ServletResponseUtil;\r
+import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;\r
+import com.pentila.entSavoie.servlet.impl.FLVPseudoStreamer;\r
+import com.pentila.entSavoie.utils.ENTMainUtilsLocalServiceUtil;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.Date;\r
+\r
+import javax.portlet.ActionRequest;\r
+import javax.portlet.ActionResponse;\r
+import javax.portlet.PortletConfig;\r
+\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
+/**\r
+ * <a href="GetMessageAttachmentAction.java.html"><b><i>View Source</i></b></a>\r
+ *\r
+ * @author Brian Wing Shun Chan\r
+ *\r
+ */\r
+public class GetEventCDTAttachmentAction extends PortletAction {\r
+\r
+ public ActionForward strutsExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {\r
+\r
+ try {\r
+ long evtId = ParamUtil.getLong(request, "evtId");\r
+ long companyId = ParamUtil.getLong(request, "companyId");\r
+ String fileName = ParamUtil.getString(request, "attachment");\r
+ \r
+ //on recupere le targetExtension\r
+ String targetExtension = ParamUtil.getString(request, "targetExtension", "");\r
+\r
+ getFile(evtId, companyId, fileName, targetExtension, response, request);\r
+\r
+ return null;\r
+ }\r
+ catch (Exception e) {\r
+ PortalUtil.sendError(e, request, response);\r
+\r
+ return null;\r
+ }\r
+ }\r
+\r
+ public void processAction(ActionMapping mapping, ActionForm form, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {\r
+\r
+ try {\r
+ long evtId = ParamUtil.getLong(actionRequest, "evtId");\r
+ long companyId = ParamUtil.getLong(actionRequest, "companyId");\r
+ String fileName = ParamUtil.getString(actionRequest, "attachment");\r
+ \r
+ //on recupere le targetExtension\r
+ String targetExtension = ParamUtil.getString(actionRequest, "targetExtension", "");\r
+\r
+ HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse);\r
+ HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest);\r
+\r
+ getFile(evtId, companyId, fileName, targetExtension, response, request);\r
+\r
+ setForward(actionRequest, ActionConstants.COMMON_NULL);\r
+ }\r
+ catch (Exception e) {\r
+ PortalUtil.sendError(e, actionRequest, actionResponse);\r
+ }\r
+ }\r
+\r
+ protected void getFile(long evtId, long companyId, String fileName, String targetExtension, HttpServletResponse response, HttpServletRequest request) throws Exception {\r
+\r
+ InputStream is = null;\r
+ try {\r
+ String path = "cahierdetexte/" + evtId + "/" + fileName;\r
+\r
+ InputStream isForId = DLLocalServiceUtil.getFileAsStream(\r
+ companyId, CompanyConstants.SYSTEM, path); \r
+ String idSecure = DocumentConversionServiceUtil.getFileChecksum(isForId);\r
+ isForId.close();\r
+ \r
+ is = DLLocalServiceUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, path);\r
+ \r
+ int contentLength = (int) DLServiceUtil.getFileSize(companyId, CompanyConstants.SYSTEM, path);\r
+ \r
+ if (Validator.isNotNull(targetExtension) || fileName.contains(".epub")) {\r
+ //Si on est sur du epub\r
+ // --> on retourne le fichier en base 64\r
+ if(fileName.contains(".epub")){\r
+ File file = null;\r
+ try {\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append(SystemProperties.get(SystemProperties.TMP_DIR));\r
+ sb.append("/liferay/document_conversion/");\r
+ sb.append(idSecure);\r
+ sb.append(StringPool.PERIOD);\r
+ sb.append("epub");\r
+ String fileConvertedName = sb.toString();\r
+ file = new File(fileConvertedName);\r
+ \r
+ if (!FileUtil.exists(file)) {\r
+ FileUtil.write(file, is);\r
+ byte[] byteArray = Base64.encode(FileUtil.getBytes(file)).getBytes();\r
+ is = new ByteArrayInputStream(byteArray);\r
+ contentLength = byteArray.length;\r
+ }\r
+ else {\r
+ is = new FileInputStream(file);\r
+ contentLength = (int) file.length();\r
+ }\r
+ \r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ } finally {\r
+ if (file != null) {\r
+ file.delete();\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ String sourceExtension = FileUtil.getExtension(fileName);\r
+ try{\r
+ File file = DocumentConversionServiceUtil.convert(\r
+ idSecure, is, sourceExtension, targetExtension);\r
+ InputStream convertedIS = new FileInputStream(file);\r
+ contentLength = (int) file.length();\r
+ if ((convertedIS != null) && (convertedIS != is)) {\r
+ StringBuilder sb = new StringBuilder();\r
+ \r
+ sb.append(fileName);\r
+ sb.append(StringPool.PERIOD);\r
+ sb.append(targetExtension);\r
+ \r
+ fileName = sb.toString();\r
+ \r
+ is = convertedIS;\r
+ } \r
+ } catch (Exception e){\r
+ if(targetExtension.equals("swf")){\r
+ File f = new File(ENTMainUtilsLocalServiceUtil.getFileErrorSwf(companyId));\r
+ fileName = "erreurSwf.swf";\r
+ is = new FileInputStream(f);\r
+ contentLength = (int) f.length();\r
+ } else {\r
+ File f = new File(ENTMainUtilsLocalServiceUtil.getFileErrorFlv(companyId));\r
+ fileName = "erreurFlv.flv";\r
+ is = new FileInputStream(f);\r
+ contentLength = (int) f.length();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ String contentType = MimeTypesUtil.getContentType(fileName);\r
+ \r
+ //System.out.println("contentType: " + contentType);\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
+ }\r
+ finally {\r
+ ServletResponseUtil.cleanUp(is);\r
+ }\r
+ }\r
+\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