From: Mathieu Baudier Date: Thu, 30 May 2013 17:02:30 +0000 (+0000) Subject: Merge Fix: Default callback handler not working in RAP X-Git-Tag: argeo-commons-2.1.30~656 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=041e22ee0ac92796f529d051d90d1d480f816154;p=lgpl%2Fargeo-commons.git Merge Fix: Default callback handler not working in RAP https://www.argeo.org/bugzilla/show_bug.cgi?id=161 git-svn-id: https://svn.argeo.org/commons/trunk@6318 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java index b7c4ef45f..b6bab756b 100644 --- a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java +++ b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java @@ -44,33 +44,19 @@ public class SecurityUiPlugin extends AbstractUIPlugin { private static SecurityUiPlugin plugin; + public static InheritableThreadLocal display = new InheritableThreadLocal() { + + @Override + protected Display initialValue() { + return Display.getCurrent(); + } + }; + public void start(BundleContext context) throws Exception { super.start(context); plugin = this; - final Display display = Display.getCurrent(); - defaultCallbackHandler = new CallbackHandler() { - public void handle(final Callback[] callbacks) throws IOException, - UnsupportedCallbackException { - - if (display != null) // RCP - display.syncExec(new Runnable() { - public void run() { - DefaultLoginDialog dialog = new DefaultLoginDialog(); - try { - dialog.handle(callbacks); - } catch (IOException e) { - throw new ArgeoException("Cannot open dialog", - e); - } - } - }); - else {// RAP - DefaultLoginDialog dialog = new DefaultLoginDialog(); - dialog.handle(callbacks); - } - } - }; + defaultCallbackHandler = new DefaultCallbackHandler(); defaultCallbackHandlerReg = context.registerService( CallbackHandler.class.getName(), defaultCallbackHandler, null); } @@ -93,4 +79,28 @@ public class SecurityUiPlugin extends AbstractUIPlugin { public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } + + protected class DefaultCallbackHandler implements CallbackHandler { + public void handle(final Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + + // if (display != null) // RCP + display.get().syncExec(new Runnable() { + public void run() { + DefaultLoginDialog dialog = new DefaultLoginDialog(display + .get().getActiveShell()); + try { + dialog.handle(callbacks); + } catch (IOException e) { + throw new ArgeoException("Cannot open dialog", e); + } + } + }); + // else {// RAP + // DefaultLoginDialog dialog = new DefaultLoginDialog(); + // dialog.handle(callbacks); + // } + } + + } } diff --git a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java index 3a67efcca..57ba01b5b 100644 --- a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java +++ b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java @@ -21,6 +21,7 @@ import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.TextOutputCallback; +import org.argeo.security.ui.SecurityUiPlugin; import org.argeo.util.LocaleCallback; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; @@ -41,12 +42,11 @@ import org.eclipse.swt.widgets.Text; /** Default authentication dialog, to be used as {@link CallbackHandler}. */ public class DefaultLoginDialog extends AbstractLoginDialog { - public DefaultLoginDialog() { - this(Display.getCurrent().getActiveShell()); + this(SecurityUiPlugin.display.get().getActiveShell()); } - protected DefaultLoginDialog(Shell parentShell) { + public DefaultLoginDialog(Shell parentShell) { super(parentShell); }