]> git.argeo.org Git - lgpl/argeo-commons.git/blob - RapWorkbenchLogin.java
7bf487a887d02369c14ba4bb935056cdbd1efb20
[lgpl/argeo-commons.git] / RapWorkbenchLogin.java
1 package org.argeo.security.ui.rap;
2
3 import java.security.PrivilegedAction;
4 import java.util.Locale;
5
6 import javax.security.auth.Subject;
7 import javax.security.auth.x500.X500Principal;
8
9 import org.argeo.cms.CmsMsg;
10 import org.argeo.cms.auth.CurrentUser;
11 import org.argeo.cms.util.CmsUtils;
12 import org.argeo.cms.util.LoginEntryPoint;
13 import org.eclipse.rap.rwt.RWT;
14 import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.events.SelectionListener;
17 import org.eclipse.swt.widgets.Button;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Display;
20 import org.eclipse.ui.PlatformUI;
21
22 public class RapWorkbenchLogin extends LoginEntryPoint {
23 // private final static Log log =
24 // LogFactory.getLog(RapWorkbenchLogin.class);
25
26 /** Override to provide an application specific workbench advisor */
27 protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
28 return new RapWorkbenchAdvisor(username);
29 }
30
31 @Override
32 public int createUI() {
33 JavaScriptExecutor jsExecutor = RWT.getClient().getService(
34 JavaScriptExecutor.class);
35 int returnCode;
36 try {
37 returnCode = super.createUI();
38 } finally {
39 // always reload
40 jsExecutor.execute("location.reload()");
41 }
42 return returnCode;
43 }
44
45 @Override
46 protected int postLogin() {
47 final Display display = Display.getCurrent();
48 Subject subject = getSubject();
49 if (subject.getPrincipals(X500Principal.class).isEmpty()) {
50 RWT.getClient().getService(JavaScriptExecutor.class)
51 .execute("location.reload()");
52 }
53 //
54 // RUN THE WORKBENCH
55 //
56 Integer returnCode = null;
57 try {
58 returnCode = Subject.doAs(getSubject(),
59 new PrivilegedAction<Integer>() {
60 public Integer run() {
61 int result = createAndRunWorkbench(display,
62 CurrentUser.getUsername(getSubject()));
63 return new Integer(result);
64 }
65 });
66 // explicit workbench closing
67 logout();
68 } finally {
69 display.dispose();
70 }
71 return returnCode;
72 }
73
74 protected int createAndRunWorkbench(Display display, String username) {
75 RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
76 return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
77 }
78
79 @Override
80 protected void extendsCredentialsBlock(Composite credentialsBlock,
81 Locale selectedLocale, SelectionListener loginSelectionListener) {
82 Button loginButton = new Button(credentialsBlock, SWT.PUSH);
83 loginButton.setText(CmsMsg.login.lead(selectedLocale));
84 loginButton.setLayoutData(CmsUtils.fillWidth());
85 loginButton.addSelectionListener(loginSelectionListener);
86 }
87
88 @Override
89 protected Display createDisplay() {
90 return PlatformUI.createDisplay();
91 }
92
93 }