mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-122962 - Clouds: perform connection test in background - auto-reload in CloudFoundry run configuration
This commit is contained in:
+27
-4
@@ -15,14 +15,17 @@
|
||||
*/
|
||||
package com.intellij.remoteServer.util;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.Progressive;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.remoteServer.configuration.deployment.DeploymentConfiguration;
|
||||
import com.intellij.util.concurrency.Semaphore;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -47,17 +50,23 @@ public abstract class CloudRuntimeTask<
|
||||
}
|
||||
|
||||
public T performSync() {
|
||||
return perform(true);
|
||||
return perform(true, null);
|
||||
}
|
||||
|
||||
public void performAsync() {
|
||||
perform(false);
|
||||
performAsync(null);
|
||||
}
|
||||
|
||||
private T perform(boolean modal) {
|
||||
public void performAsync(Disposable disposable) {
|
||||
perform(false, disposable);
|
||||
}
|
||||
|
||||
private T perform(boolean modal, final Disposable disposable) {
|
||||
final Semaphore semaphore = new Semaphore();
|
||||
semaphore.down();
|
||||
|
||||
final AtomicReference<T> result = new AtomicReference<T>();
|
||||
|
||||
final Progressive progressive = new Progressive() {
|
||||
|
||||
@Override
|
||||
@@ -65,6 +74,17 @@ public abstract class CloudRuntimeTask<
|
||||
indicator.setIndeterminate(true);
|
||||
while (!indicator.isCanceled()) {
|
||||
if (semaphore.waitFor(500)) {
|
||||
if (mySuccess.get()) {
|
||||
UIUtil.invokeLaterIfNeeded(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (disposable == null || !Disposer.isDisposed(disposable)) {
|
||||
postPerform(result.get());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -95,7 +115,6 @@ public abstract class CloudRuntimeTask<
|
||||
mySuccess.set(false);
|
||||
myErrorMessage.set(null);
|
||||
|
||||
AtomicReference<T> result = new AtomicReference<T>();
|
||||
run(semaphore, result);
|
||||
|
||||
task.queue();
|
||||
@@ -103,6 +122,10 @@ public abstract class CloudRuntimeTask<
|
||||
return result.get();
|
||||
}
|
||||
|
||||
protected void postPerform(T result) {
|
||||
|
||||
}
|
||||
|
||||
protected boolean isCancellable(boolean modal) {
|
||||
return modal;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user