X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.eclipse.ui.rap%2Fsrc%2Forg%2Fargeo%2Feclipse%2Fui%2Fspecific%2FOpenFileService.java;fp=org.argeo.eclipse.ui.rap%2Fsrc%2Forg%2Fargeo%2Feclipse%2Fui%2Fspecific%2FOpenFileService.java;h=0000000000000000000000000000000000000000;hb=03f646fd0d7e7ce393694c836c779bc67a4eef55;hp=4630d63e6393d95ce7d5cdf05b7ae78ed5624b0b;hpb=c53fec78daddb69c489686844188036b04e1615a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/OpenFileService.java b/org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/OpenFileService.java deleted file mode 100644 index 4630d63e6..000000000 --- a/org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/OpenFileService.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.argeo.eclipse.ui.specific; - -import static org.argeo.eclipse.ui.util.SingleSourcingConstants.FILE_SCHEME; -import static org.argeo.eclipse.ui.util.SingleSourcingConstants.SCHEME_HOST_SEPARATOR; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.argeo.eclipse.ui.EclipseUiUtils; -import org.argeo.eclipse.ui.util.SingleSourcingConstants; -import org.eclipse.rap.rwt.service.ServiceHandler; - -/** - * RWT specific Basic Default service handler that retrieves a file on the - * server file system using its absolute path and forwards it to the end user - * browser. - * - * Clients might extend to provide context specific services - */ -public class OpenFileService implements ServiceHandler { - public OpenFileService() { - } - - public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - String fileName = request.getParameter(SingleSourcingConstants.PARAM_FILE_NAME); - String uri = request.getParameter(SingleSourcingConstants.PARAM_FILE_URI); - - // Use buffered array to directly write the stream? - if (!uri.startsWith(SingleSourcingConstants.FILE_SCHEME)) - throw new IllegalArgumentException( - "Open file service can only handle files that are on the server file system"); - - // Set the Metadata - response.setContentLength((int) getFileSize(uri)); - if (EclipseUiUtils.isEmpty(fileName)) - fileName = getFileName(uri); - response.setContentType(getMimeType(uri, fileName)); - String contentDisposition = "attachment; filename=\"" + fileName + "\""; - response.setHeader("Content-Disposition", contentDisposition); - - // Useless for current use - // response.setHeader("Content-Transfer-Encoding", "binary"); - // response.setHeader("Pragma", "no-cache"); - // response.setHeader("Cache-Control", "no-cache, must-revalidate"); - - Path path = Paths.get(getAbsPathFromUri(uri)); - Files.copy(path, response.getOutputStream()); - - // FIXME we always use temporary files for the time being. - // the deleteOnClose file only works when the JVM is closed so we - // explicitly delete to avoid overloading the server - if (path.startsWith("/tmp")) - path.toFile().delete(); - } - - protected long getFileSize(String uri) throws IOException { - if (uri.startsWith(SingleSourcingConstants.FILE_SCHEME)) { - Path path = Paths.get(getAbsPathFromUri(uri)); - return Files.size(path); - } - return -1l; - } - - protected String getFileName(String uri) { - if (uri.startsWith(SingleSourcingConstants.FILE_SCHEME)) { - Path path = Paths.get(getAbsPathFromUri(uri)); - return path.getFileName().toString(); - } - return null; - } - - private String getAbsPathFromUri(String uri) { - if (uri.startsWith(FILE_SCHEME)) - return uri.substring((FILE_SCHEME + SCHEME_HOST_SEPARATOR).length()); - // else if (uri.startsWith(JCR_SCHEME)) - // return uri.substring((JCR_SCHEME + SCHEME_HOST_SEPARATOR).length()); - else - throw new IllegalArgumentException("Unknown URI prefix for" + uri); - } - - protected String getMimeType(String uri, String fileName) throws IOException { - if (uri.startsWith(FILE_SCHEME)) { - Path path = Paths.get(getAbsPathFromUri(uri)); - String mimeType = Files.probeContentType(path); - if (EclipseUiUtils.notEmpty(mimeType)) - return mimeType; - } - return "application/octet-stream"; - } -}