X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.rap%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Frap%2FRapWorkbenchLogin.java;h=7bf487a887d02369c14ba4bb935056cdbd1efb20;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=1f4914ace3591246cb5315282b27313523bce893;hpb=94c0a695c972463b613d919f615f3d92642c75d5;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java index 1f4914ace..7bf487a88 100644 --- a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java +++ b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java @@ -1,17 +1,27 @@ package org.argeo.security.ui.rap; +import java.security.PrivilegedAction; +import java.util.Locale; + +import javax.security.auth.Subject; +import javax.security.auth.x500.X500Principal; + +import org.argeo.cms.CmsMsg; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.util.CmsUtils; +import org.argeo.cms.util.LoginEntryPoint; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.client.service.JavaScriptExecutor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; -public class RapWorkbenchLogin extends WorkbenchLogin { - - @Override - protected int createAndRunWorkbench(Display display, String username) { - RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username); - return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor); - } +public class RapWorkbenchLogin extends LoginEntryPoint { + // private final static Log log = + // LogFactory.getLog(RapWorkbenchLogin.class); /** Override to provide an application specific workbench advisor */ protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) { @@ -22,9 +32,62 @@ public class RapWorkbenchLogin extends WorkbenchLogin { public int createUI() { JavaScriptExecutor jsExecutor = RWT.getClient().getService( JavaScriptExecutor.class); - int returnCode = super.createUI(); - jsExecutor.execute("location.reload()"); + int returnCode; + try { + returnCode = super.createUI(); + } finally { + // always reload + jsExecutor.execute("location.reload()"); + } + return returnCode; + } + + @Override + protected int postLogin() { + final Display display = Display.getCurrent(); + Subject subject = getSubject(); + if (subject.getPrincipals(X500Principal.class).isEmpty()) { + RWT.getClient().getService(JavaScriptExecutor.class) + .execute("location.reload()"); + } + // + // RUN THE WORKBENCH + // + Integer returnCode = null; + try { + returnCode = Subject.doAs(getSubject(), + new PrivilegedAction() { + public Integer run() { + int result = createAndRunWorkbench(display, + CurrentUser.getUsername(getSubject())); + return new Integer(result); + } + }); + // explicit workbench closing + logout(); + } finally { + display.dispose(); + } return returnCode; } + protected int createAndRunWorkbench(Display display, String username) { + RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username); + return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor); + } + + @Override + protected void extendsCredentialsBlock(Composite credentialsBlock, + Locale selectedLocale, SelectionListener loginSelectionListener) { + Button loginButton = new Button(credentialsBlock, SWT.PUSH); + loginButton.setText(CmsMsg.login.lead(selectedLocale)); + loginButton.setLayoutData(CmsUtils.fillWidth()); + loginButton.addSelectionListener(loginSelectionListener); + } + + @Override + protected Display createDisplay() { + return PlatformUI.createDisplay(); + } + }