1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.argeo.slc.client.ui.specific;
17
18 import java.net.URL;
19 import java.util.UUID;
20
21 import javax.jcr.Node;
22 import javax.jcr.Session;
23
24 import org.argeo.slc.SlcException;
25 import org.argeo.slc.client.rap.OpenJcrFileService;
26 import org.argeo.slc.repo.RepoService;
27 import org.eclipse.core.commands.AbstractHandler;
28 import org.eclipse.core.commands.ExecutionEvent;
29 import org.eclipse.core.commands.ExecutionException;
30 import org.eclipse.rap.rwt.RWT;
31
32
33 import org.eclipse.ui.PlatformUI;
34
35
36
37
38
39
40
41
42
43
44 public class OpenJcrFile extends AbstractHandler {
45
46
47
48
49 public final static String PARAM_REPO_NODE_PATH = "param.repoNodePath";
50 public final static String PARAM_REPO_URI = "param.repoUri";
51 public final static String PARAM_WORKSPACE_NAME = "param.workspaceName";
52 public final static String PARAM_FILE_PATH = "param.filePath";
53
54 private RepoService repoService;
55 private String currentServiceId;
56
57 public Object execute(ExecutionEvent event) throws ExecutionException {
58
59 String repoNodePath = event.getParameter(PARAM_REPO_NODE_PATH);
60 String repoUri = event.getParameter(PARAM_REPO_URI);
61 String wkspName = event.getParameter(PARAM_WORKSPACE_NAME);
62 String filePath = event.getParameter(PARAM_FILE_PATH);
63
64
65 if (filePath == null || "".equals(filePath.trim()))
66 return null;
67 Session businessSession = null;
68 try {
69 businessSession = repoService.getRemoteSession(repoNodePath,
70 repoUri, wkspName);
71 Node result = businessSession.getNode(filePath);
72
73
74
75 currentServiceId = UUID.randomUUID().toString();
76 OpenJcrFileService ojfs = new OpenJcrFileService(result);
77
78
79
80 String urlStr = createFullDownloadUrl(currentServiceId);
81 URL url = new URL(urlStr);
82 PlatformUI.getWorkbench().getBrowserSupport()
83 .createBrowser("DownloadDialog").openURL(url);
84 } catch (Exception e) {
85 throw new SlcException("Unable to open Jcr File for path "
86 + filePath, e);
87 }
88
89 return null;
90 }
91
92 @Override
93 public void dispose() {
94
95
96 super.dispose();
97 }
98
99 private String createFullDownloadUrl(String serviceId) {
100 StringBuilder url = new StringBuilder();
101 url.append(RWT.getRequest().getRequestURL());
102
103 StringBuilder params = new StringBuilder();
104 params.append("?");
105
106
107 params.append(serviceId);
108 String encodedURL = RWT.getResponse().encodeURL(params.toString());
109 url.append(encodedURL);
110 return url.toString();
111 }
112
113
114 public void setRepoService(RepoService repoService) {
115 this.repoService = repoService;
116 }
117 }