]> git.argeo.org Git - lgpl/argeo-commons.git/blob - FileHandler.java
aba79c1c1912a7abfe1721620e3c051135680005
[lgpl/argeo-commons.git] / FileHandler.java
1 package org.argeo.eclipse.ui.specific;
2
3 import java.net.URL;
4
5 import org.apache.commons.logging.Log;
6 import org.apache.commons.logging.LogFactory;
7 import org.eclipse.rwt.RWT;
8 import org.eclipse.rwt.service.IServiceHandler;
9 import org.eclipse.rwt.service.IServiceManager;
10 import org.eclipse.ui.PlatformUI;
11
12 /**
13 * RAP SPECIFIC handler to enable the opening of a download dialog box triggered
14 * by whatever action in the UI
15 *
16 * Manages the registration of the effective DownloadServiceHandler at
17 * instantiation time.
18 *
19 * Manages the process of forwarding the request to the handler at runtime to
20 * open the dialog box
21 *
22 */
23 public class FileHandler {
24 public final static String FORCED_DOWNLOAD_URL_BASE_PROPERTY = "argeo.rap.specific.forcedDownloadUrlBase";
25
26 private final static Log log = LogFactory.getLog(FileHandler.class);
27
28 public FileHandler(FileProvider provider) {
29 // Instantiate and register the DownloadServicHandler.
30 IServiceManager manager = RWT.getServiceManager();
31 IServiceHandler handler = new DownloadServiceHandler(provider);
32 manager.registerServiceHandler("downloadServiceHandler", handler);
33 }
34
35 public void openFile(String fileName, String fileId) {
36
37 // See RAP FAQ:
38 // http://wiki.eclipse.org/RAP/FAQ#How_to_provide_download_link.3F
39 // And forum discussion :
40 // http://www.eclipse.org/forums/index.php?t=msg&th=205487&start=0&S=43d85dacc88b505402420592109c7240
41
42 try {
43 if (log.isTraceEnabled())
44 log.trace("URL : " + createFullDownloadUrl(fileName, fileId));
45
46 URL url = new URL(createFullDownloadUrl(fileName, fileId));
47 PlatformUI.getWorkbench().getBrowserSupport()
48 .createBrowser("DownloadDialog").openURL(url);
49 } catch (Exception e) {
50 e.printStackTrace();
51 }
52
53 // These lines are useless in the current use case but might be
54 // necessary with new browsers. Stored here for memo
55 // response.setContentType("application/force-download");
56 // response.setHeader("Content-Disposition", contentDisposition);
57 // response.setHeader("Content-Transfer-Encoding", "binary");
58 // response.setHeader("Pragma", "no-cache");
59 // response.setHeader("Cache-Control", "no-cache, must-revalidate");
60 }
61
62 private String createFullDownloadUrl(String fileName, String fileId) {
63 StringBuilder url = new StringBuilder();
64 // in case RAP is proxied we need to specify the actual base URL
65 // TODO find a cleaner way
66 String forcedDownloadUrlBase = System
67 .getProperty(FORCED_DOWNLOAD_URL_BASE_PROPERTY);
68 if (forcedDownloadUrlBase != null)
69 url.append(forcedDownloadUrlBase);
70 else
71 url.append(RWT.getRequest().getRequestURL());
72 url.append(createParamUrl(fileName, fileId));
73 return url.toString();
74 }
75
76 private String createParamUrl(String filename, String fileId) {
77 StringBuilder url = new StringBuilder();
78 url.append("?");
79 url.append(IServiceHandler.REQUEST_PARAM);
80 url.append("=downloadServiceHandler");
81 url.append("&filename=");
82 url.append(filename);
83 url.append("&fileid=");
84 url.append(fileId);
85 String encodedURL = RWT.getResponse().encodeURL(url.toString());
86 return encodedURL;
87 }
88 }