From f894389f49d8efaf6f09f2ccbfa9ff6194006792 Mon Sep 17 00:00:00 2001 From: Michael Golubev Date: Mon, 2 Jun 2014 15:49:41 +0200 Subject: [PATCH] IDEA-122962 - Clouds: perform connection test in background - auto-reload in CloudFoundry run configuration --- .../remoteServer/util/CloudRuntimeTask.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudRuntimeTask.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudRuntimeTask.java index e377cade4e47..64194856c121 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudRuntimeTask.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudRuntimeTask.java @@ -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 result = new AtomicReference(); + 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 result = new AtomicReference(); 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; }