--- /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.gestionPlans.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.pentila.entSavoie.gestionPlans.service.PlanLocalServiceUtil;\r
+import com.pentila.entSavoie.servlet.FLVPseudoStreamer;\r
+import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;\r
+\r
+/**\r
+ * <a href="GetBlogEntryInfosAttachmentAction.java.html"><b><i>View Source</i></b></a>\r
+ *\r
+ * @author Brian Wing Shun Chan\r
+ *\r
+ */\r
+public class GetFormulaireAction extends PortletAction {\r
+\r
+ public ActionForward strutsExecute(\r
+ ActionMapping mapping, ActionForm form, HttpServletRequest request,\r
+ HttpServletResponse response)\r
+ throws Exception {\r
+ \r
+ try {\r
+ int plan = ParamUtil.getInteger(request, "plan");\r
+ String fileName = ParamUtil.getString(request, "formulaireFile");\r
+ long companyId = PortalUtil.getUser(request).getCompanyId();\r
+ boolean isHelpFile = ParamUtil.getBoolean(request, "isHelpFile");\r
+ \r
+ String targetExtension = ParamUtil.getString(request, "targetExtension");\r
+\r
+ getFile(companyId, plan, fileName, targetExtension, response, request, isHelpFile);\r
+\r
+ return null;\r
+ }\r
+ catch (Exception e) {\r
+ e.printStackTrace();\r
+ PortalUtil.sendError(e, request, response);\r
+\r
+ return null;\r
+ }\r
+ }\r
+\r
+ public void processAction(\r
+ ActionMapping mapping, ActionForm form, PortletConfig portletConfig,\r
+ ActionRequest actionRequest, ActionResponse actionResponse)\r
+ throws Exception {\r
+\r
+ try {\r
+ int plan = ParamUtil.getInteger(actionRequest, "plan");\r
+ String fileName = ParamUtil.getString(actionRequest, "formulaireFile");\r
+ long companyId = PortalUtil.getUser(actionRequest).getCompanyId();\r
+ boolean isHelpFile = ParamUtil.getBoolean(actionRequest, "isHelpFile");\r
+\r
+ String targetExtension = ParamUtil.getString(actionRequest, "targetExtension");\r
+\r
+ HttpServletResponse response = PortalUtil.getHttpServletResponse(\r
+ actionResponse);\r
+ HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest);\r
+ \r
+ getFile(companyId, plan, fileName, targetExtension, response, request, isHelpFile);\r
+\r
+ setForward(actionRequest, ActionConstants.COMMON_NULL);\r
+ }\r
+ catch (Exception e) {\r
+ e.printStackTrace();\r
+ PortalUtil.sendError(e, actionRequest, actionResponse);\r
+ }\r
+ }\r
+\r
+ protected void getFile( long companyId,\r
+ int plan, String fileName, String targetExtension, HttpServletResponse response, HttpServletRequest request, boolean isHelpFile)\r
+ throws Exception {\r
+\r
+ InputStream is = null;\r
+\r
+ try {\r
+ \r
+ String path = "";\r
+ \r
+ if(isHelpFile){\r
+ path = PlanLocalServiceUtil.getHelpFileDir(plan) + "/" + fileName;\r
+ } else {\r
+ path = PlanLocalServiceUtil.getFormulaireFileDir(plan) + "/" + fileName;\r
+ }\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
+ fileName = convertNonAscii(fileName);\r
+\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
+ }\r
+ finally {\r
+ if(is != null){\r
+ is.close();\r
+ }\r
+ }\r
+ }\r
+ \r
+ private static final String PLAIN_ASCII =\r
+ "AaEeIiOoUu" // grave\r
+ + "AaEeIiOoUuYy" // acute\r
+ + "AaEeIiOoUuYy" // circumflex\r
+ + "AaOoNn" // tilde\r
+ + "AaEeIiOoUuYy" // umlaut\r
+ + "Aa" // ring\r
+ + "Cc" // cedilla\r
+ + "OoUu" // double acute\r
+ ;\r
+\r
+ private static final String UNICODE =\r
+ "\u00C0\u00E0\u00C8\u00E8\u00CC\u00EC\u00D2\u00F2\u00D9\u00F9" \r
+ + "\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00DD\u00FD" \r
+ + "\u00C2\u00E2\u00CA\u00EA\u00CE\u00EE\u00D4\u00F4\u00DB\u00FB\u0176\u0177" \r
+ + "\u00C3\u00E3\u00D5\u00F5\u00D1\u00F1"\r
+ + "\u00C4\u00E4\u00CB\u00EB\u00CF\u00EF\u00D6\u00F6\u00DC\u00FC\u0178\u00FF" \r
+ + "\u00C5\u00E5" \r
+ + "\u00C7\u00E7" \r
+ + "\u0150\u0151\u0170\u0171" \r
+ ;\r
+\r
+ // remove accentued from a string and replace with ascii equivalent\r
+ public static String convertNonAscii(String s) {\r
+ if (s == null) return null;\r
+ StringBuilder sb = new StringBuilder();\r
+ int n = s.length();\r
+ for (int i = 0; i < n; i++) {\r
+ char c = s.charAt(i);\r
+ int pos = UNICODE.indexOf(c);\r
+ if (pos > -1){\r
+ sb.append(PLAIN_ASCII.charAt(pos));\r
+ }\r
+ else {\r
+ sb.append(c);\r
+ }\r
+ }\r
+ return sb.toString();\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