diff options
author | Oleg Besedin | 2008-04-24 16:02:10 +0000 |
---|---|---|
committer | Oleg Besedin | 2008-04-24 16:02:10 +0000 |
commit | 5fb3173a1eb82970d2174e875be0765edf07a2d6 (patch) | |
tree | 848659ebcff9178b26c1698ea74dfdd46ef16d17 /bundles/org.eclipse.equinox.security | |
parent | 8868360d344bd0dbb2101a824ec78a3c80601cad (diff) | |
download | rt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.tar.gz rt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.tar.xz rt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.zip |
Bug 228060 Initialization dialog is modal
Diffstat (limited to 'bundles/org.eclipse.equinox.security')
2 files changed, 28 insertions, 17 deletions
diff --git a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java index da6120ca6..fa485f2a8 100644 --- a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java +++ b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java @@ -16,6 +16,8 @@ import java.util.*; import javax.crypto.*; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; +import org.eclipse.core.runtime.jobs.ILock; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.equinox.internal.security.auth.AuthPlugin; @@ -39,6 +41,8 @@ public class JavaEncryption { private final static String sampleText = "sample text for roundtrip testing"; //$NON-NLS-1$ private final static PasswordExt samplePassword = new PasswordExt(new PBEKeySpec("password1".toCharArray()), "abc"); //$NON-NLS-1$ //$NON-NLS-2$ + static private ILock lock = Job.getJobManager().newLock(); + static private final int SALT_ITERATIONS = 10; private String keyFactoryAlgorithm = null; @@ -60,27 +64,36 @@ public class JavaEncryption { return cipherAlgorithm; } - synchronized public void setAlgorithms(String cipherAlgorithm, String keyFactoryAlgorithm) { - this.cipherAlgorithm = cipherAlgorithm; - this.keyFactoryAlgorithm = keyFactoryAlgorithm; + public void setAlgorithms(String cipherAlgorithm, String keyFactoryAlgorithm) { + try { + lock.acquire(); // avoid conflict with init() + this.cipherAlgorithm = cipherAlgorithm; + this.keyFactoryAlgorithm = keyFactoryAlgorithm; + } finally { + lock.release(); + } } - synchronized private void init() throws StorageException { + private void init() throws StorageException { if (initialized) return; initialized = true; - IUICallbacks callback = CallbacksProvider.getDefault().getCallback(); - if (callback == null) - internalInitialize(); - - IStorageTask task = new IStorageTask() { - public void execute() throws StorageException { + try { + lock.acquire(); // avoid multiple simultaneous initializations + IUICallbacks callback = CallbacksProvider.getDefault().getCallback(); + if (callback == null) internalInitialize(); + else { + callback.execute(new IStorageTask() { + public void execute() throws StorageException { + internalInitialize(); + } + }); } - }; - if (!callback.execute(task)) - throw new StorageException(StorageException.INTERNAL_ERROR, SecAuthMessages.initCancelled); + } finally { + lock.release(); + } } protected void internalInitialize() throws StorageException { diff --git a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java index edbe6114b..b9885f3fa 100644 --- a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java +++ b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java @@ -40,11 +40,9 @@ public interface IUICallbacks { public Boolean ask(final String msg); /** - * @param callback - * @return false if task was canceled - * @throws StorageException + * Runs a long-running task. */ - public boolean execute(final IStorageTask callback) throws StorageException; + public void execute(final IStorageTask callback) throws StorageException; /** * @return true if running with UI; false if headless |