You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/06/02 17:30:10 UTC
svn commit: r781060 - in /incubator/pivot/trunk: core/src/pivot/util/
core/src/pivot/util/concurrent/ core/test/pivot/util/concurrent/test/
web/test/pivot/web/test/
Author: gbrown
Date: Tue Jun 2 15:30:09 2009
New Revision: 781060
URL: http://svn.apache.org/viewvc?rev=781060&view=rev
Log:
Allow TaskGroup and TaskSequence to contain any type of task (Task<?> vs. Task<V>); update task and web query client tests to use JUnit.
Modified:
incubator/pivot/trunk/core/src/pivot/util/ImmutableIterator.java
incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskGroup.java
incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskSequence.java
incubator/pivot/trunk/core/test/pivot/util/concurrent/test/TaskTest.java
incubator/pivot/trunk/web/test/pivot/web/test/WebQueryTestClient.java
Modified: incubator/pivot/trunk/core/src/pivot/util/ImmutableIterator.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/util/ImmutableIterator.java?rev=781060&r1=781059&r2=781060&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/util/ImmutableIterator.java (original)
+++ incubator/pivot/trunk/core/src/pivot/util/ImmutableIterator.java Tue Jun 2 15:30:09 2009
@@ -24,9 +24,9 @@
* @author gbrown
*/
public class ImmutableIterator<T> implements Iterator<T> {
- Iterator<T> iterator;
+ Iterator<? extends T> iterator;
- public ImmutableIterator(Iterator<T> iterator) {
+ public ImmutableIterator(Iterator<? extends T> iterator) {
if (iterator == null) {
throw new IllegalArgumentException("iterator is null.");
}
Modified: incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskGroup.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskGroup.java?rev=781060&r1=781059&r2=781060&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskGroup.java (original)
+++ incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskGroup.java Tue Jun 2 15:30:09 2009
@@ -24,24 +24,22 @@
/**
* Class that runs a group of tasks in parallel and notifies listeners
- * when all tasks are complete. Callers can retrieve task results or faults by
- * calling {@link Task#getResult()} and {@link Task#getFault()},
- * respectively.
+ * when all tasks are complete.
*
* @author tvolkert
* @author gbrown
*/
-public class TaskGroup<V> extends Task<Void>
- implements Group<Task<V>>, Iterable<Task<V>> {
- private class TaskHandler implements TaskListener<V> {
- public void taskExecuted(Task<V> task) {
+public class TaskGroup extends Task<Void>
+ implements Group<Task<?>>, Iterable<Task<?>> {
+ private class TaskHandler implements TaskListener<Object> {
+ public void taskExecuted(Task<Object> task) {
synchronized (TaskGroup.this) {
tasks.put(task, Boolean.TRUE);
TaskGroup.this.notify();
}
}
- public void executeFailed(Task<V> task) {
+ public void executeFailed(Task<Object> task) {
synchronized (TaskGroup.this) {
tasks.put(task, Boolean.TRUE);
TaskGroup.this.notify();
@@ -49,7 +47,7 @@
}
}
- private HashMap<Task<V>, Boolean> tasks = new HashMap<Task<V>, Boolean>();
+ private HashMap<Task<?>, Boolean> tasks = new HashMap<Task<?>, Boolean>();
private boolean executing = false;
public TaskGroup() {
@@ -61,15 +59,16 @@
}
@Override
+ @SuppressWarnings("unchecked")
public synchronized Void execute() throws TaskExecutionException {
executing = true;
try {
TaskHandler taskHandler = new TaskHandler();
- for (Task<V> task : tasks) {
+ for (Task<?> task : tasks) {
tasks.put(task, Boolean.FALSE);
- task.execute(taskHandler);
+ ((Task<Object>)task).execute(taskHandler);
}
boolean complete = false;
@@ -77,12 +76,12 @@
while (!complete) {
try {
wait();
- } catch (InterruptedException ex) {
- throw new TaskExecutionException(ex);
+ } catch (InterruptedException exception) {
+ throw new TaskExecutionException(exception);
}
complete = true;
- for (Task<V> task : tasks) {
+ for (Task<?> task : tasks) {
if (!tasks.get(task)) {
complete = false;
break;
@@ -96,31 +95,34 @@
return null;
}
- public synchronized void add(Task<V> element) {
+ @SuppressWarnings("unchecked")
+ public synchronized void add(Task<?> element) {
if (executing) {
throw new IllegalStateException("Task group is executing.");
}
- tasks.put(element, Boolean.FALSE);
+ tasks.put((Task<Object>)element, Boolean.FALSE);
}
- public synchronized void remove(Task<V> element) {
+ @SuppressWarnings("unchecked")
+ public synchronized void remove(Task<?> element) {
if (executing) {
throw new IllegalStateException("Task group is executing.");
}
- tasks.remove(element);
+ tasks.remove((Task<Object>)element);
}
- public boolean contains(Task<V> element) {
- return tasks.containsKey(element);
+ @SuppressWarnings("unchecked")
+ public boolean contains(Task<?> element) {
+ return tasks.containsKey((Task<Object>)element);
}
public boolean isEmpty() {
return tasks.isEmpty();
}
- public Iterator<Task<V>> iterator() {
- return new ImmutableIterator<Task<V>>(tasks.iterator());
+ public Iterator<Task<?>> iterator() {
+ return new ImmutableIterator<Task<?>>(tasks.iterator());
}
}
Modified: incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskSequence.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskSequence.java?rev=781060&r1=781059&r2=781060&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskSequence.java (original)
+++ incubator/pivot/trunk/core/src/pivot/util/concurrent/TaskSequence.java Tue Jun 2 15:30:09 2009
@@ -30,9 +30,9 @@
*
* @author gbrown
*/
-public class TaskSequence<V> extends Task<Void>
- implements Sequence<Task<V>>, Iterable<Task<V>> {
- private ArrayList<Task<V>> tasks = new ArrayList<Task<V>>();
+public class TaskSequence extends Task<Void>
+ implements Sequence<Task<?>>, Iterable<Task<?>> {
+ private ArrayList<Task<?>> tasks = new ArrayList<Task<?>>();
private int activeTaskIndex = -1;
public TaskSequence() {
@@ -44,15 +44,16 @@
}
@Override
+ @SuppressWarnings("unchecked")
public synchronized Void execute() throws TaskExecutionException {
- TaskListener<V> taskListener = new TaskListener<V>() {
- public void taskExecuted(Task<V> task) {
+ TaskListener<Object> taskListener = new TaskListener<Object>() {
+ public void taskExecuted(Task<Object> task) {
synchronized (TaskSequence.this) {
TaskSequence.this.notify();
}
}
- public void executeFailed(Task<V> task) {
+ public void executeFailed(Task<Object> task) {
synchronized (TaskSequence.this) {
TaskSequence.this.notify();
}
@@ -62,7 +63,7 @@
activeTaskIndex = 0;
while (activeTaskIndex < tasks.getLength()) {
- Task<V> activeTask = tasks.get(activeTaskIndex);
+ Task<Object> activeTask = (Task<Object>)tasks.get(activeTaskIndex);
activeTask.execute(taskListener);
try {
@@ -79,14 +80,14 @@
return null;
}
- public int add(Task<V> task) {
+ public int add(Task<?> task) {
int index = tasks.getLength();
insert(task, index);
return index;
}
- public synchronized void insert(Task<V> task, int index) {
+ public synchronized void insert(Task<?> task, int index) {
if (activeTaskIndex != -1) {
throw new IllegalStateException();
}
@@ -94,7 +95,7 @@
tasks.insert(task, index);
}
- public synchronized Task<V> update(int index, Task<V> task) {
+ public synchronized Task<?> update(int index, Task<?> task) {
if (activeTaskIndex != -1) {
throw new IllegalStateException();
}
@@ -102,7 +103,7 @@
return tasks.update(index, task);
}
- public int remove(Task<V> task) {
+ public int remove(Task<?> task) {
int index = tasks.indexOf(task);
if (index != -1) {
tasks.remove(index, 1);
@@ -111,7 +112,7 @@
return index;
}
- public synchronized Sequence<Task<V>> remove(int index, int count) {
+ public synchronized Sequence<Task<?>> remove(int index, int count) {
if (activeTaskIndex != -1) {
throw new IllegalStateException();
}
@@ -119,12 +120,11 @@
return tasks.remove(index, count);
}
- public Task<V> get(int index) {
+ public Task<?> get(int index) {
return tasks.get(index);
}
-
- public int indexOf(Task<V> task) {
+ public int indexOf(Task<?> task) {
return tasks.indexOf(task);
}
@@ -132,7 +132,7 @@
return tasks.getLength();
}
- public Iterator<Task<V>> iterator() {
- return new ImmutableIterator<Task<V>>(tasks.iterator());
+ public Iterator<Task<?>> iterator() {
+ return new ImmutableIterator<Task<?>>(tasks.iterator());
}
}
Modified: incubator/pivot/trunk/core/test/pivot/util/concurrent/test/TaskTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/test/pivot/util/concurrent/test/TaskTest.java?rev=781060&r1=781059&r2=781060&view=diff
==============================================================================
--- incubator/pivot/trunk/core/test/pivot/util/concurrent/test/TaskTest.java (original)
+++ incubator/pivot/trunk/core/test/pivot/util/concurrent/test/TaskTest.java Tue Jun 2 15:30:09 2009
@@ -16,6 +16,8 @@
*/
package pivot.util.concurrent.test;
+import org.junit.Test;
+
import pivot.util.concurrent.Task;
import pivot.util.concurrent.TaskGroup;
import pivot.util.concurrent.TaskListener;
@@ -50,7 +52,8 @@
}
}
- public static void main(String[] args) {
+ @Test
+ public void testTaskSequence() {
TaskListener<Void> taskListener = new TaskListener<Void>() {
public synchronized void taskExecuted(Task<Void> task) {
System.out.println("EXECUTED");
@@ -63,14 +66,7 @@
}
};
- testTaskSequence(taskListener);
- testTaskGroup(taskListener);
- }
-
- private static void testTaskSequence(TaskListener<Void> taskListener) {
- System.out.println("Testing task sequence");
-
- TaskSequence<Void> taskSequence = new TaskSequence<Void>();
+ TaskSequence taskSequence = new TaskSequence();
SleepTask task1 = new SleepTask(2000);
taskSequence.add(task1);
@@ -91,10 +87,21 @@
}
}
- private static void testTaskGroup(TaskListener<Void> taskListener) {
- System.out.println("Testing task group");
+ @Test
+ public void testTaskGroup() {
+ TaskListener<Void> taskListener = new TaskListener<Void>() {
+ public synchronized void taskExecuted(Task<Void> task) {
+ System.out.println("EXECUTED");
+ notify();
+ }
+
+ public synchronized void executeFailed(Task<Void> task) {
+ System.out.println("FAILED: " + task.getFault());
+ notify();
+ }
+ };
- TaskGroup<Void> taskGroup = new TaskGroup<Void>();
+ TaskGroup taskGroup = new TaskGroup();
SleepTask task1 = new SleepTask(2000);
taskGroup.add(task1);
Modified: incubator/pivot/trunk/web/test/pivot/web/test/WebQueryTestClient.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/web/test/pivot/web/test/WebQueryTestClient.java?rev=781060&r1=781059&r2=781060&view=diff
==============================================================================
--- incubator/pivot/trunk/web/test/pivot/web/test/WebQueryTestClient.java (original)
+++ incubator/pivot/trunk/web/test/pivot/web/test/WebQueryTestClient.java Tue Jun 2 15:30:09 2009
@@ -16,12 +16,15 @@
*/
package pivot.web.test;
-import java.net.URL;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
import pivot.collections.Dictionary;
import pivot.serialization.BinarySerializer;
import pivot.serialization.JSONSerializer;
import pivot.util.concurrent.Task;
+import pivot.util.concurrent.TaskGroup;
import pivot.util.concurrent.TaskListener;
import pivot.web.BasicAuthentication;
import pivot.web.GetQuery;
@@ -38,9 +41,12 @@
final static int PORT = 8080;
final static boolean SECURE = false;
- public static void main(String[] args) throws Exception {
+ @Test
+ public void basicTest() {
final BasicAuthentication authentication = new BasicAuthentication("foo", "bar");
+ TaskGroup queryGroup = new TaskGroup();
+
// GET
final GetQuery getQuery = new GetQuery(HOSTNAME, PORT, PATH, SECURE);
getQuery.getParameters().put("a", "b");
@@ -48,11 +54,28 @@
getQuery.getRequestHeaders().add("bar", "hello");
getQuery.getRequestHeaders().add("bar", "world");
authentication.authenticate(getQuery);
+ queryGroup.add(getQuery);
+
+ // POST
+ final PostQuery postQuery = new PostQuery(HOSTNAME, PORT, PATH, SECURE);
+ authentication.authenticate(postQuery);
+ postQuery.setValue(JSONSerializer.parseList("[1, 2, 3]"));
+ queryGroup.add(postQuery);
+
+ // PUT
+ final PutQuery putQuery = new PutQuery(HOSTNAME, PORT, PATH, SECURE);
+ authentication.authenticate(putQuery);
+ putQuery.setValue(JSONSerializer.parseMap("{a:100, b:200, c:300}"));
+ queryGroup.add(putQuery);
- getQuery.execute(new TaskListener<Object>() {
+ // POST
+ final DeleteQuery deleteQuery = new DeleteQuery(HOSTNAME, PORT, PATH, SECURE);
+ authentication.authenticate(deleteQuery);
+ queryGroup.add(deleteQuery);
+
+ queryGroup.execute(new TaskListener<Void>() {
@SuppressWarnings("unchecked")
- public void taskExecuted(Task<Object> task) {
- GetQuery getQuery = (GetQuery)task;
+ public synchronized void taskExecuted(Task<Void> task) {
Dictionary<String, Object> result = (Dictionary<String, Object>)getQuery.getResult();
System.out.println("GET result: "
@@ -71,58 +94,33 @@
System.out.print("\n");
}
- }
-
- public void executeFailed(Task<Object> task) {
- System.out.println("GET fault: " + task.getFault());
- }
- });
-
- // POST
- PostQuery postQuery = new PostQuery(HOSTNAME, PORT, PATH, SECURE);
- authentication.authenticate(postQuery);
- postQuery.setValue(JSONSerializer.parseList("[1, 2, 3]"));
+ System.out.println("GET fault: " + getQuery.getFault());
- postQuery.execute(new TaskListener<URL>() {
- public void taskExecuted(Task<URL> task) {
System.out.println("POST result: " + task.getResult());
- }
-
- public void executeFailed(Task<URL> task) {
- System.out.println("POST fault: " + task.getFault());
- }
- });
-
- // PUT
- PutQuery putQuery = new PutQuery(HOSTNAME, PORT, PATH, SECURE);
- authentication.authenticate(putQuery);
- putQuery.setValue(JSONSerializer.parseMap("{a:100, b:200, c:300}"));
+ System.out.println("POST fault: " + postQuery.getFault());
- putQuery.execute(new TaskListener<Void>() {
- public void taskExecuted(Task<Void> task) {
- System.out.println("PUT result");
+ System.out.println("PUT fault: " + putQuery.getFault());
+ System.out.println("DELETE fault: " + deleteQuery.getFault());
}
- public void executeFailed(Task<Void> task) {
- System.out.println("PUT fault: " + task.getFault());
+ public synchronized void executeFailed(Task<Void> task) {
+ // No-op; task groups don't fail
}
});
- // POST
- DeleteQuery deleteQuery = new DeleteQuery(HOSTNAME, PORT, PATH, SECURE);
- authentication.authenticate(deleteQuery);
-
- deleteQuery.execute(new TaskListener<Void>() {
- public void taskExecuted(Task<Void> task) {
- System.out.println("DELETE result");
- }
-
- public void executeFailed(Task<Void> task) {
- System.out.println("DELETE fault: " + task.getFault());
+ synchronized(queryGroup) {
+ if (queryGroup.isPending()) {
+ try {
+ queryGroup.wait(10000);
+ } catch(InterruptedException exception) {
+ throw new RuntimeException(exception);
+ }
}
- });
+ }
- // HACK - wait for all requests to complete
- Thread.sleep(3000);
+ assertTrue(getQuery.getFault() == null
+ && postQuery.getFault() == null
+ && putQuery.getFault() == null
+ && deleteQuery.getFault() == null);
}
}