You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ha...@apache.org on 2013/01/18 18:30:44 UTC

svn commit: r1435259 - /ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java

Author: hadrian
Date: Fri Jan 18 17:30:43 2013
New Revision: 1435259

URL: http://svn.apache.org/viewvc?rev=1435259&view=rev
Log:
A bit of framework fun...

Modified:
    ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java

Modified: ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java
URL: http://svn.apache.org/viewvc/ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java?rev=1435259&r1=1435258&r2=1435259&view=diff
==============================================================================
--- ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java (original)
+++ ode/trunk/jacob/src/test/java/org/apache/ode/jacob/examples/synch/SynchPrinter.java Fri Jan 18 17:30:43 2013
@@ -42,6 +42,7 @@ public class SynchPrinter {
             _self = self;
         }
 
+        @SuppressWarnings("serial")
         public void run() {
             object(true, new ReceiveProcess<SynchPrint>(_self, new SynchPrint() {
                 public Synch print(String msg) {
@@ -57,22 +58,52 @@ public class SynchPrinter {
     public static final class Tester extends JacobRunnable {
         private static final long serialVersionUID = 7899682832271627464L;
 
-        @SuppressWarnings("serial")
         public void run() {
             final SynchPrint p = newChannel(SynchPrint.class);
             instance(new SystemPrinter(p));
-            object(receive(p.print("1"), new Synch() {
-                public void ret() {
-                    object(receive(p.print("2"), new Synch() {
-                        public void ret() {
-                            object(receive(p.print("3"), new Synch() {
-                                public void ret() {
-                                }
-                            }));
+            printer(p).print("1").then().print("2").then().print("3").done().run();
+        }
+
+        public static PrinterProcess printer(SynchPrint p) {
+            return new PrinterProcess(p);
+        }
+
+        public static final class PrinterProcess implements Runnable {
+            private final SynchPrint printer;
+            final private PrinterProcess prev;
+            private PrinterProcess next;
+            private String message;
+
+            public PrinterProcess(final SynchPrint p) {
+                this(p, null);
+            }
+            private PrinterProcess(final SynchPrint p, final PrinterProcess prev) {
+                printer = p;
+                this.prev = prev;
+            }
+            public PrinterProcess print(String message) {
+                this.message = message;
+                return this;
+            }
+            public PrinterProcess then() {
+                next = new PrinterProcess(printer, this);
+                return next;
+            }
+            public PrinterProcess done() {
+                return prev != null ? prev.done() : this;
+            }
+
+            @Override
+            public void run() {
+                object(receive(printer.print(message), new Synch() {
+                    private static final long serialVersionUID = 1L;
+                    public void ret() {
+                        if (next != null) {
+                            next.run();
                         }
-                    }));
-                }
-            }));
+                    }
+                }));
+            }
         }
     }