ODE-987. Add convient method for creating listeners

git-svn-id: https://svn.apache.org/repos/asf/ode/trunk@1435167 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/ode/jacob/ProcessUtil.java b/src/main/java/org/apache/ode/jacob/ProcessUtil.java
index fb1f196..50c84d8 100644
--- a/src/main/java/org/apache/ode/jacob/ProcessUtil.java
+++ b/src/main/java/org/apache/ode/jacob/ProcessUtil.java
@@ -36,4 +36,14 @@
         throw new IllegalArgumentException("Invalid proxy type: "
     	    + channel == null ? "<null>" : channel.getClass().toString());
     }
+    
+    @SuppressWarnings("serial")
+	public static <T extends Channel> ChannelListener receive(T proxy, T listener) {
+    	// TODO: NOTE: this *only* works when the listnere doesn't need to be Serialiazble really
+    	//  because we cannot declare a staic serialVersionUID like this
+    	//  once we fix serialization, this can be simplified significantly via a dsl
+    	return new ReceiveProcess<T>(proxy, listener) {
+    		// private static final long serialVersionUID = 1024137371118887935L;
+        };
+    }
 }
diff --git a/src/main/java/org/apache/ode/jacob/ReceiveProcess.java b/src/main/java/org/apache/ode/jacob/ReceiveProcess.java
index 9b53b3e..002aee3 100644
--- a/src/main/java/org/apache/ode/jacob/ReceiveProcess.java
+++ b/src/main/java/org/apache/ode/jacob/ReceiveProcess.java
@@ -25,16 +25,16 @@
 
 
 @SuppressWarnings("serial")
-public abstract class ReceiveProcess<R> extends ChannelListener {
+public abstract class ReceiveProcess<T extends Channel> extends ChannelListener {
     private transient Set<Method> _implementedMethods;
-    private R receiver;
+    private T receiver;
     
-    protected ReceiveProcess(Channel channel, R receiver) throws IllegalStateException {
+    protected ReceiveProcess(T channel, T receiver) throws IllegalStateException {
         super(channel);
         this.receiver = receiver;
     }
 
-    public R receiver() {
+    public T receiver() {
         return receiver;
     }
 
diff --git a/src/test/java/org/apache/ode/jacob/examples/cell/JacobCellTest.java b/src/test/java/org/apache/ode/jacob/examples/cell/JacobCellTest.java
index 2da21ba..0f9d171 100644
--- a/src/test/java/org/apache/ode/jacob/examples/cell/JacobCellTest.java
+++ b/src/test/java/org/apache/ode/jacob/examples/cell/JacobCellTest.java
@@ -29,6 +29,8 @@
 import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
 import org.apache.ode.jacob.vpu.JacobVPU;
 
+import static org.apache.ode.jacob.ProcessUtil.receive;
+
 
 public class JacobCellTest extends TestCase {
   private static Object _val;
@@ -63,11 +65,11 @@
             Val ret = newChannel(Val.class, "val");
 
             instance(new CELL_<String>(cell, "foo"));
-            object(new ReceiveProcess<Val>(ret, new Val() {
+            object(receive(ret, new Val() {
                 public void val(Object retVal) {
                     _val = retVal;
                 }
-            }) {});
+            }));
             cell.read(ret);
         }
     }
diff --git a/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java b/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java
index 426411e..eeb291a 100644
--- a/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java
+++ b/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java
@@ -24,6 +24,8 @@
 import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
 import org.apache.ode.jacob.vpu.JacobVPU;
 
+import static org.apache.ode.jacob.ProcessUtil.receive;
+
 /**
  * Example JACOB process illustrating the use of {@link SynchPrint}
  *
@@ -59,18 +61,18 @@
         public void run() {
             final SynchPrint p = newChannel(SynchPrint.class);
             instance(new SystemPrinter(p));
-            object(new ReceiveProcess<Synch>(p.print("1"), new Synch() {
+            object(receive(p.print("1"), new Synch() {
                 public void ret() {
-                    object(new ReceiveProcess<Synch>(p.print("2"), new Synch() {
+                    object(receive(p.print("2"), new Synch() {
                         public void ret() {
-                            object(new ReceiveProcess<Synch>(p.print("3"), new Synch() {
+                            object(receive(p.print("3"), new Synch() {
                                 public void ret() {
                                 }
-                            }) {});
+                            }));
                         }
-                    }) {});
+                    }));
                 }
-            }) {});
+            }));
         }
     }