Author: adietish
Date: 2010-11-16 09:33:51 -0500 (Tue, 16 Nov 2010)
New Revision: 26616
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/src/org/jboss/tools/deltacloud/core/DeltaCloud.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/PerformInstanceActionThread.java
Log:
[JBIDE-7603] moved (duplicate) instance state waiting code to delta cloud and removed
duplication
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/src/org/jboss/tools/deltacloud/core/DeltaCloud.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/src/org/jboss/tools/deltacloud/core/DeltaCloud.java 2010-11-16
14:18:39 UTC (rev 26615)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/src/org/jboss/tools/deltacloud/core/DeltaCloud.java 2010-11-16
14:33:51 UTC (rev 26616)
@@ -58,6 +58,10 @@
ListenerList instanceListeners = new ListenerList();
ListenerList imageListeners = new ListenerList();
+ public static interface IInstanceStateMatcher {
+ public boolean matchesState(DeltaCloudInstance instance, String instanceState);
+ }
+
public DeltaCloud(String name, String url, String username, String passwd) throws
MalformedURLException {
this(name, url, username, passwd, null, false, IImageFilter.ALL_STRING,
IInstanceFilter.ALL_STRING);
}
@@ -276,17 +280,40 @@
}
public DeltaCloudInstance waitWhilePending(String instanceId, IProgressMonitor pm)
throws InterruptedException {
- DeltaCloudInstance instance = null;
- while (!pm.isCanceled()) {
- instance = refreshInstance(instanceId);
- if (instance != null &&
!instance.getState().equals(DeltaCloudInstance.PENDING)) {
- return instance;
- }
- Thread.sleep(400);
+ IInstanceStateMatcher differsFromPending = new IInstanceStateMatcher() {
+
+ @Override
+ public boolean matchesState(DeltaCloudInstance instance, String instanceState) {
+ return !DeltaCloudInstance.PENDING.equals(instanceState);
}
- return instance;
+ };
+ return waitForState(instanceId, differsFromPending , pm);
}
+ public DeltaCloudInstance waitForState(String instanceId, final String expectedState,
IProgressMonitor pm) throws InterruptedException {
+ IInstanceStateMatcher stateMatcher = new IInstanceStateMatcher() {
+
+ @Override
+ public boolean matchesState(DeltaCloudInstance instance, String instanceState) {
+ return expectedState != null && expectedState.equals(instanceState);
+ }
+ };
+ return waitForState(instanceId, stateMatcher, pm);
+ }
+
+ public DeltaCloudInstance waitForState(String instanceId, IInstanceStateMatcher
stateMatcher, IProgressMonitor pm) throws InterruptedException {
+ DeltaCloudInstance instance = getInstance(instanceId);
+ while(!pm.isCanceled()) {
+ if (stateMatcher.matchesState(instance, instance.getState())
+ || instance.getState().equals(DeltaCloudInstance.TERMINATED)) {
+ return instance;
+ }
+ Thread.sleep(400);
+ instance = refreshInstance(instance.getId());
+ }
+ return instance;
+ }
+
public void removeInstanceJob(String id, Job j) {
synchronized (actionLock) {
if (actionJobs != null && actionJobs.get(id) == j)
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/PerformInstanceActionThread.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/PerformInstanceActionThread.java 2010-11-16
14:18:39 UTC (rev 26615)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/PerformInstanceActionThread.java 2010-11-16
14:33:51 UTC (rev 26616)
@@ -18,7 +18,6 @@
import org.eclipse.swt.widgets.Display;
import org.jboss.tools.common.log.StatusFactory;
import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.deltacloud.core.DeltaCloudException;
import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
import org.jboss.tools.deltacloud.ui.Activator;
import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
@@ -55,8 +54,8 @@
// cancel the previous job and then go on performing this action
cancelPreviousJob(id);
cloud.performInstanceAction(id, action);
- waitForInstanceState(id);
- } catch (DeltaCloudException e) {
+ cloud.waitForState(id, expectedState, pm);
+ } catch (Exception e) {
final IStatus status = StatusFactory.getInstance(IStatus.ERROR, Activator.PLUGIN_ID,
e.getMessage(), e);
Activator.log(status);
Display.getDefault().syncExec(new Runnable() {
@@ -88,17 +87,4 @@
}
}
}
-
- private void waitForInstanceState(String id) {
- while (instance != null && expectedState != null
- && !(instance.getState().equals(expectedState))
- && !(instance.getState().equals(DeltaCloudInstance.TERMINATED))) {
- instance = cloud.refreshInstance(id);
- try {
- Thread.sleep(300);
- } catch (InterruptedException e) {
- break;
- }
- }
- }
}
Show replies by date