Explicit timeout indication in ECL's resulting status.
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/Statuses.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/Statuses.java
new file mode 100644
index 0000000..a59f272
--- /dev/null
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/util/Statuses.java
@@ -0,0 +1,36 @@
+package org.eclipse.rcptt.ecl.core.util;
+
+import org.eclipse.core.runtime.IStatus;
+
+public class Statuses {
+ public interface Visitor {
+ /** @true is argument's children should be inspected too */
+ boolean visit(IStatus status);
+ }
+
+ public static void visit(IStatus status, Visitor visitor) {
+ if (status == null)
+ return;
+ if (visitor.visit(status)) {
+ if (status.isMultiStatus()) {
+ for (IStatus child : status.getChildren()) {
+ visit(child, visitor);
+ }
+ }
+ }
+ }
+
+ public static boolean hasCode(IStatus status, final int code) {
+ final boolean[] rv = new boolean[] { false };
+ visit(status, new Visitor() {
+
+ @Override
+ public boolean visit(IStatus status) {
+ if (status.getCode() == code)
+ rv[0] = true;
+ return !rv[0];
+ }
+ });
+ return rv[0];
+ }
+}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/Process.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/Process.java
index ba930f6..02cf306 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/Process.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/Process.java
@@ -58,7 +58,7 @@
while (status == null) {
long cur = System.currentTimeMillis();
if (timeout != 0 && (cur - start) > timeout) {
- return status = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID,
+ return status = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, TIMEOUT_CODE,
"Execution has timed out after " + (timeout/1000) + " seconds", null);
}
if (monitor.isCanceled()) {
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/runtime/IProcess.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/runtime/IProcess.java
index 3315253..c513459 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/runtime/IProcess.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/runtime/IProcess.java
@@ -16,6 +16,8 @@
public interface IProcess {
+ public static final int TIMEOUT_CODE = 123130;
+
IPipe getInput();
IPipe getOutput();
diff --git a/ecl/tests/org.eclipse.rcptt.ecl.core.tests/src/org/eclipse/rcptt/ecl/core/tests/StatusesTest.java b/ecl/tests/org.eclipse.rcptt.ecl.core.tests/src/org/eclipse/rcptt/ecl/core/tests/StatusesTest.java
new file mode 100644
index 0000000..524ca2a
--- /dev/null
+++ b/ecl/tests/org.eclipse.rcptt.ecl.core.tests/src/org/eclipse/rcptt/ecl/core/tests/StatusesTest.java
@@ -0,0 +1,32 @@
+package org.eclipse.rcptt.ecl.core.tests;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.rcptt.ecl.core.util.Statuses;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class StatusesTest {
+
+ private static IStatus status(int severity, int code) {
+ return new Status(severity, "plugin", code, "", null);
+ }
+
+ private static MultiStatus multiStatus(int code) {
+ return new MultiStatus("plugin", code, "OK", null);
+ }
+
+ @Test
+ public void testHasCode() {
+ MultiStatus status = multiStatus(0);
+ status.add(status(0, 0));
+ Assert.assertFalse(Statuses.hasCode(status, 1));
+ status = multiStatus(0);
+ status.add(status(0, 1));
+ Assert.assertTrue(Statuses.hasCode(status, 1));
+ status = multiStatus(1);
+ Assert.assertTrue(Statuses.hasCode(status, 1));
+ }
+
+}