]> git.argeo.org Git - lgpl/argeo-commons.git/blob - FileHandler.java
f873f1a524cf0c078dfa73a120f929cde74916df
[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 * @author bsinou
23 *
24 */
25 public class FileHandler {
26
27 private final static Log log = LogFactory.getLog(FileHandler.class);
28
29 public FileHandler(FileProvider provider) {
30 // Instantiate and register the DownloadServicHandler.
31 IServiceManager manager = RWT.getServiceManager();
32 IServiceHandler handler = new DownloadServiceHandler(provider);
33 manager.registerServiceHandler("downloadServiceHandler", handler);
34 }
35
36 public void openFile(String fileName, String fileId) {
37
38 // See RAP FAQ:
39 // http://wiki.eclipse.org/RAP/FAQ#How_to_provide_download_link.3F
40 // And forum discussion :
41 // http://www.eclipse.org/forums/index.php?t=msg&th=205487&start=0&S=43d85dacc88b505402420592109c7240
42
43 try {
44 if (log.isDebugEnabled())
45 log.debug("URL : " + createFullDownloadUrl(fileName, fileId));
46
47 URL url = new URL(createFullDownloadUrl(fileName, fileId));
48 PlatformUI.getWorkbench().getBrowserSupport()
49 .createBrowser("DownloadDialog").openURL(url);
50 } catch (Exception e) {
51 e.printStackTrace();
52 }
53
54 // These lines are useless in the current use case but might be
55 // necessary with new browsers. Stored here for memo
56 // response.setContentType("application/force-download");
57 // response.setHeader("Content-Disposition", contentDisposition);
58 // response.setHeader("Content-Transfer-Encoding", "binary");
59 // response.setHeader("Pragma", "no-cache");
60 // response.setHeader("Cache-Control", "no-cache, must-revalidate");
61 }
62
63 private String createFullDownloadUrl(String fileName, String fileId) {
64 StringBuilder url = new StringBuilder();
65 url.append(RWT.getRequest().getRequestURL());
66 url.append(createParamUrl(fileName, fileId));
67 return url.toString();
68 }
69
70 private String createParamUrl(String filename, String fileId) {
71 StringBuilder url = new StringBuilder();
72 url.append("?");
73 url.append(IServiceHandler.REQUEST_PARAM);
74 url.append("=downloadServiceHandler");
75 url.append("&filename=");
76 url.append(filename);
77 url.append("&fileid=");
78 url.append(fileId);
79 String encodedURL = RWT.getResponse().encodeURL(url.toString());
80 return encodedURL;
81 }
82 }