]> 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
Adapt Security to RCP
[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.graphics.Point;
11 import org.eclipse.swt.widgets.Display;
12 import org.eclipse.ui.IWorkbench;
13 import org.eclipse.ui.PlatformUI;
14 import org.eclipse.ui.application.ActionBarAdvisor;
15 import org.eclipse.ui.application.IActionBarConfigurer;
16 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
17 import org.eclipse.ui.application.WorkbenchAdvisor;
18 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
19
20 public class SecureRap implements IApplication {
21 public Object start(IApplicationContext context) throws Exception {
22 String username = CurrentUser.getUsername();
23 Integer result = null;
24 Display display = PlatformUI.createDisplay();
25 try {
26 result = (Integer) Subject.doAs(CurrentUser.getSubject(),
27 getRunAction(display));
28 } catch (Exception e) {
29 e.printStackTrace();
30 } finally {
31 display.dispose();
32 }
33 return result;
34 }
35
36 @SuppressWarnings("rawtypes")
37 private PrivilegedAction getRunAction(final Display display) {
38 return new PrivilegedAction() {
39
40 public Object run() {
41 int result = PlatformUI.createAndRunWorkbench(display,
42 new ApplicationWorkbenchAdvisor());
43 return new Integer(result);
44 }
45 };
46 }
47
48 public void stop() {
49 final IWorkbench workbench;
50 try {
51 workbench = PlatformUI.getWorkbench();
52 } catch (Exception e) {
53 return;
54 }
55 if (workbench == null)
56 return;
57 final Display display = workbench.getDisplay();
58 display.syncExec(new Runnable() {
59
60 public void run() {
61 if (!display.isDisposed())
62 workbench.close();
63 }
64 });
65 }
66
67 class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
68
69 private static final String PERSPECTIVE_ID = "org.argeo.security.ui.securityPerspective";
70
71 public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
72 IWorkbenchWindowConfigurer configurer) {
73 return new ApplicationWorkbenchWindowAdvisor(configurer);
74 }
75
76 public String getInitialWindowPerspectiveId() {
77 return PERSPECTIVE_ID;
78 }
79 }
80
81 class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
82
83 public ApplicationWorkbenchWindowAdvisor(
84 IWorkbenchWindowConfigurer configurer) {
85 super(configurer);
86 }
87
88 public ActionBarAdvisor createActionBarAdvisor(
89 IActionBarConfigurer configurer) {
90 return new ActionBarAdvisor(configurer);
91 }
92
93 public void preWindowOpen() {
94 IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
95 configurer.setInitialSize(new Point(500, 300));
96 configurer.setShowCoolBar(false);
97 configurer.setShowMenuBar(false);
98 configurer.setShowStatusLine(false);
99 configurer.setTitle("Equinox Security on RAP");
100 }
101 }
102
103 }