From: Bruno Sinou Date: Fri, 17 Jan 2014 15:49:06 +0000 (+0000) Subject: Go on working on the rap specific file download issue. New better name for command... X-Git-Tag: argeo-commons-2.1.30~621 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=6eb009db417c28f3f0c4d25153151dbced9c7e1d;p=lgpl%2Fargeo-commons.git Go on working on the rap specific file download issue. New better name for command and service before it is used. https://www.argeo.org/bugzilla/show_bug.cgi?id=188 git-svn-id: https://svn.argeo.org/commons/trunk@6725 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/DownloadFsFileService.java b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/DownloadFsFileService.java new file mode 100644 index 000000000..14915c873 --- /dev/null +++ b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/DownloadFsFileService.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.eclipse.ui.specific; + +import java.io.File; +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.FileUtils; +import org.argeo.ArgeoException; +import org.eclipse.rap.rwt.service.ServiceHandler; + +/** + * Basic service handler that retrieves a file in the server file system using + * an absolute path and forward it to the end user browser. Rap specific. + */ +public class DownloadFsFileService implements ServiceHandler { + public final static String PARAM_FILE_NAME = "param.fileName"; + public final static String PARAM_FILE_PATH = "param.filePath"; + + public DownloadFsFileService() { + } + + public void service(HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + String fileName = request.getParameter(PARAM_FILE_NAME); + String path = request.getParameter(PARAM_FILE_PATH); + + // Get the file + File file = new File(path); + + // Send the Metadata + response.setContentType("application/octet-stream"); + response.setContentLength((int) file.length()); + String contentDisposition = "attachment; filename=\"" + fileName + "\""; + response.setHeader("Content-Disposition", contentDisposition); + + try { + response.getOutputStream().write( + FileUtils.readFileToByteArray(new File(path))); + } catch (IOException ioe) { + throw new ArgeoException("Error while writing the file " + fileName + + " to the servlet response", ioe); + } + } +} \ No newline at end of file diff --git a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/FileDownloadService.java b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/FileDownloadService.java deleted file mode 100644 index e5eb8fcae..000000000 --- a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/FileDownloadService.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.eclipse.ui.specific; - -import java.io.File; -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.io.FileUtils; -import org.argeo.ArgeoException; -import org.eclipse.rap.rwt.service.ServiceHandler; - -/** Provide a basic handler that returns a file from the file system in Rap. */ -public class FileDownloadService implements ServiceHandler { - public final static String PARAM_FILE_NAME = "param.fileName"; - public final static String PARAM_FILE_PATH = "param.filePath"; - - public FileDownloadService() { - } - - public void service(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - String fileName = request.getParameter(PARAM_FILE_NAME); - String path = request.getParameter(PARAM_FILE_PATH); - - // Get the file - File file = new File(path); - - // Send the Metadata - response.setContentType("application/octet-stream"); - response.setContentLength((int) file.length()); - String contentDisposition = "attachment; filename=\"" + fileName + "\""; - response.setHeader("Content-Disposition", contentDisposition); - - try { - response.getOutputStream().write( - FileUtils.readFileToByteArray(new File(path))); - } catch (IOException ioe) { - throw new ArgeoException("Error while writing the file " + fileName - + " to the servlet response", ioe); - } - } -} \ No newline at end of file diff --git a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/OpenFsFile.java b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/OpenFsFile.java new file mode 100644 index 000000000..b1b21b756 --- /dev/null +++ b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/OpenFsFile.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.eclipse.ui.specific; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.rap.rwt.RWT; +import org.eclipse.rap.rwt.client.service.UrlLauncher; + +/** + * Rap specific command handler to open a file stored in the server file system. + * The file absolute path and name must be passed as parameters. + * + * It relies on an existing {@link DownloadFsFileService} to forward the + * corresponding file to the user browser. + * + */ +public class OpenFsFile extends AbstractHandler { + private final static Log log = LogFactory.getLog(OpenFsFile.class); + + /* DEPENDENCY INJECTION */ + private String serviceId; + + public final static String PARAM_FILE_NAME = DownloadFsFileService.PARAM_FILE_NAME; + public final static String PARAM_FILE_PATH = DownloadFsFileService.PARAM_FILE_PATH; + + public Object execute(ExecutionEvent event) throws ExecutionException { + String fileName = event.getParameter(PARAM_FILE_NAME); + String filePath = event.getParameter(PARAM_FILE_PATH); + + // sanity check + if (serviceId == null || "".equals(serviceId.trim()) + || fileName == null || "".equals(fileName.trim()) + || filePath == null || "".equals(filePath.trim())) + return null; + + StringBuilder url = new StringBuilder(); + url.append("&").append(PARAM_FILE_NAME).append("="); + url.append(fileName); + url.append("&").append(PARAM_FILE_PATH).append("="); + url.append(filePath); + + String downloadUrl = RWT.getServiceManager().getServiceHandlerUrl( + serviceId) + + url.toString(); + if (log.isTraceEnabled()) + log.debug("URL : " + downloadUrl); + + UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class); + launcher.openURL(downloadUrl); + + // These lines are useless in the current use case but might be + // necessary with new browsers. Stored here for memo + // response.setContentType("application/force-download"); + // response.setHeader("Content-Disposition", contentDisposition); + // response.setHeader("Content-Transfer-Encoding", "binary"); + // response.setHeader("Pragma", "no-cache"); + // response.setHeader("Cache-Control", "no-cache, must-revalidate"); + return null; + } + + /* DEPENDENCY INJECTION */ + public void setDownloadServiceHandlerId(String downloadServiceHandlerId) { + this.serviceId = downloadServiceHandlerId; + } +} \ No newline at end of file diff --git a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/SimpleOpenFile.java b/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/SimpleOpenFile.java deleted file mode 100644 index f8ee3b1a3..000000000 --- a/base/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/SimpleOpenFile.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.eclipse.ui.specific; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.rap.rwt.client.service.UrlLauncher; - -/** - * Rap specific handler to open a file stored in the server file system, among - * other tmp files created for exports. - * - */ -public class SimpleOpenFile extends AbstractHandler { - private final static Log log = LogFactory - .getLog(SimpleOpenFile.class); - - private String serviceId; - - public final static String PARAM_FILE_NAME = FileDownloadService.PARAM_FILE_NAME; - public final static String PARAM_FILE_PATH = FileDownloadService.PARAM_FILE_PATH; - - public Object execute(ExecutionEvent event) throws ExecutionException { - String fileName = event.getParameter(PARAM_FILE_NAME); - String filePath = event.getParameter(PARAM_FILE_PATH); - - // sanity check - if (serviceId == null || "".equals(serviceId.trim()) - || fileName == null || "".equals(fileName.trim()) - || filePath == null || "".equals(filePath.trim())) - return null; - - StringBuilder url = new StringBuilder(); - url.append("&").append(PARAM_FILE_NAME).append("="); - url.append(fileName); - url.append("&").append(PARAM_FILE_PATH).append("="); - url.append(filePath); - - String downloadUrl = RWT.getServiceManager().getServiceHandlerUrl( - serviceId) - + url.toString(); - if (log.isTraceEnabled()) - log.debug("URL : " + downloadUrl); - - UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class); - launcher.openURL(downloadUrl); - - // These lines are useless in the current use case but might be - // necessary with new browsers. Stored here for memo - // response.setContentType("application/force-download"); - // response.setHeader("Content-Disposition", contentDisposition); - // response.setHeader("Content-Transfer-Encoding", "binary"); - // response.setHeader("Pragma", "no-cache"); - // response.setHeader("Cache-Control", "no-cache, must-revalidate"); - return null; - } - - /* DEPENDENCY INJECTION */ - public void setDownloadServiceHandlerId(String downloadServiceHandlerId) { - this.serviceId = downloadServiceHandlerId; - } -} \ No newline at end of file