]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/eclipse/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureRap.java
Fix RAP target platform
[lgpl/argeo-commons.git] / security / eclipse / plugins / org.argeo.security.ui.rcp / src / main / java / org / argeo / security / ui / rcp / SecureRap.java
1 package org.argeo.security.ui.rcp;
2
3 import java.security.PrivilegedAction;
4
5 import javax.security.auth.Subject;
6
7 import org.argeo.security.equinox.CurrentUser;
8 import org.eclipse.equinox.app.IApplication;
9 import org.eclipse.equinox.app.IApplicationContext;
10 import org.eclipse.swt.widgets.Display;
11 import org.eclipse.ui.IWorkbench;
12 import org.eclipse.ui.PlatformUI;
13 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
14 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
15
16 public class SecureRap implements IApplication {
17 public Object start(IApplicationContext context) throws Exception {
18 String username = CurrentUser.getUsername();
19 Integer result = null;
20 Display display = PlatformUI.createDisplay();
21 try {
22 result = (Integer) Subject.doAs(CurrentUser.getSubject(),
23 getRunAction(display));
24 } catch (Exception e) {
25 e.printStackTrace();
26 } finally {
27 display.dispose();
28 }
29 return result;
30 }
31
32 @SuppressWarnings("rawtypes")
33 private PrivilegedAction getRunAction(final Display display) {
34 return new PrivilegedAction() {
35
36 public Object run() {
37 int result = PlatformUI.createAndRunWorkbench(display,
38 new ApplicationWorkbenchAdvisor());
39 return new Integer(result);
40 }
41 };
42 }
43
44 public void stop() {
45 final IWorkbench workbench;
46 try {
47 workbench = PlatformUI.getWorkbench();
48 } catch (Exception e) {
49 return;
50 }
51 if (workbench == null)
52 return;
53 final Display display = workbench.getDisplay();
54 display.syncExec(new Runnable() {
55
56 public void run() {
57 if (!display.isDisposed())
58 workbench.close();
59 }
60 });
61 }
62
63 class ApplicationWorkbenchAdvisor extends SecureWorkbenchAdvisor {
64 public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
65 IWorkbenchWindowConfigurer configurer) {
66 return new RapSecureWorkbenchWindowAdvisor(configurer);
67 }
68 }
69
70 }