View Javadoc
1   package org.argeo.cms.ui.workbench.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(JavaScriptExecutor.class);
34  		int returnCode;
35  		try {
36  			returnCode = super.createUI();
37  		} finally {
38  			// always reload
39  			// TODO optimise?
40  			jsExecutor.execute("location.reload()");
41  		}
42  		return returnCode;
43  	}
44  
45  	@Override
46  	protected int postLogin() {
47  		Subject subject = getSubject();
48  		final Display display = Display.getCurrent();
49  		if (subject.getPrincipals(X500Principal.class).isEmpty()) {
50  			RWT.getClient().getService(JavaScriptExecutor.class).execute("location.reload()");
51  		}
52  		//
53  		// RUN THE WORKBENCH
54  		//
55  		Integer returnCode = null;
56  		try {
57  			returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
58  				public Integer run() {
59  					int result = createAndRunWorkbench(display, CurrentUser.getUsername(subject));
60  					return new Integer(result);
61  				}
62  			});
63  			// explicit workbench closing
64  			logout();
65  		} finally {
66  			display.dispose();
67  		}
68  		return returnCode;
69  	}
70  
71  	protected int createAndRunWorkbench(Display display, String username) {
72  		RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
73  		return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
74  	}
75  
76  	@Override
77  	protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
78  			SelectionListener loginSelectionListener) {
79  //		Button loginButton = new Button(credentialsBlock, SWT.PUSH);
80  //		loginButton.setText(CmsMsg.login.lead(selectedLocale));
81  //		loginButton.setLayoutData(CmsUtils.fillWidth());
82  //		loginButton.addSelectionListener(loginSelectionListener);
83  	}
84  
85  	@Override
86  	protected Display createDisplay() {
87  		return PlatformUI.createDisplay();
88  	}
89  
90  }