You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/05/26 02:40:34 UTC

svn commit: r948275 - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/ tapestry-core/src/main/java/org/apache/tapestry5/internal/t...

Author: hlship
Date: Wed May 26 00:40:33 2010
New Revision: 948275

URL: http://svn.apache.org/viewvc?rev=948275&view=rev
Log:
Allow Workers to be combined into composite workers

Added:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractWorker.java
      - copied, changed from r948274, tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java?rev=948275&r1=948274&r2=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java Wed May 26 00:40:33 2010
@@ -21,6 +21,7 @@ import org.apache.tapestry5.dom.Document
 import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.dom.Node;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.util.func.AbstractWorker;
 import org.apache.tapestry5.ioc.util.func.F;
 import org.apache.tapestry5.ioc.util.func.Worker;
 import org.apache.tapestry5.json.JSONObject;
@@ -236,7 +237,7 @@ public class DocumentLinkerImpl implemen
 
         final Element scriptContainer = container.element("script-container");
 
-        Worker<String> addScript = new Worker<String>()
+        Worker<String> addScript = new AbstractWorker<String>()
         {
             public void work(String scriptURL)
             {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java?rev=948275&r1=948274&r2=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java Wed May 26 00:40:33 2010
@@ -27,6 +27,7 @@ import org.apache.tapestry5.ioc.internal
 import org.apache.tapestry5.ioc.internal.util.Defense;
 import org.apache.tapestry5.ioc.internal.util.IdAllocator;
 import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.util.func.AbstractWorker;
 import org.apache.tapestry5.ioc.util.func.F;
 import org.apache.tapestry5.ioc.util.func.Worker;
 import org.apache.tapestry5.json.JSONArray;
@@ -92,7 +93,7 @@ public class JavascriptSupportImpl imple
 
     public void commit()
     {
-        F.each(new Worker<StylesheetLink>()
+        F.each(new AbstractWorker<StylesheetLink>()
         {
             public void work(StylesheetLink value)
             {
@@ -100,7 +101,7 @@ public class JavascriptSupportImpl imple
             }
         }, stylesheetLinks);
 
-        Worker<String> linkLibrary = new Worker<String>()
+        Worker<String> linkLibrary = new AbstractWorker<String>()
         {
             public void work(String value)
             {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java?rev=948275&r1=948274&r2=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java Wed May 26 00:40:33 2010
@@ -25,6 +25,7 @@ import org.apache.tapestry5.annotations.
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.services.Coercion;
 import org.apache.tapestry5.ioc.services.SymbolSource;
+import org.apache.tapestry5.ioc.util.func.AbstractWorker;
 import org.apache.tapestry5.ioc.util.func.F;
 import org.apache.tapestry5.ioc.util.func.Worker;
 import org.apache.tapestry5.model.MutableComponentModel;
@@ -52,7 +53,7 @@ public class ImportWorker implements Com
 
     private final AssetSource assetSource;
 
-    private final Worker<Asset> importLibrary = new Worker<Asset>()
+    private final Worker<Asset> importLibrary = new AbstractWorker<Asset>()
     {
         public void work(Asset asset)
         {
@@ -60,7 +61,7 @@ public class ImportWorker implements Com
         }
     };
 
-    private final Worker<Asset> importStylesheet = new Worker<Asset>()
+    private final Worker<Asset> importStylesheet = new AbstractWorker<Asset>()
     {
         public void work(Asset asset)
         {

Copied: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractWorker.java (from r948274, tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractWorker.java?p2=tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractWorker.java&p1=tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java&r1=948274&r2=948275&rev=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractWorker.java Wed May 26 00:40:33 2010
@@ -14,16 +14,21 @@
 
 package org.apache.tapestry5.ioc.util.func;
 
-/**
- * An operational function used with a collection.
- * 
- * @since 5.2.0
- * @see F#each(Worker, java.util.Collection)
- */
-public interface Worker<T>
+public abstract class AbstractWorker<T> implements Worker<T>
 {
-    /**
-     * Perform the operation on some object of type T.
-     */
-    void work(T value);
+    public Worker<T> combine(final Worker<T> other)
+    {
+        final Worker<T> first = this;
+
+        return new AbstractWorker<T>()
+        {
+            public void work(T value)
+            {
+                first.work(value);
+                other.work(value);
+            }
+
+        };
+    }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java?rev=948275&r1=948274&r2=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Worker.java Wed May 26 00:40:33 2010
@@ -26,4 +26,10 @@ public interface Worker<T>
      * Perform the operation on some object of type T.
      */
     void work(T value);
+
+    /**
+     * Combines this worker with the other worker, forming a new composite worker. In the composite,
+     * the value passed first to this worker, then to the other worker.
+     */
+    Worker<T> combine(Worker<T> other);
 }

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java?rev=948275&r1=948274&r2=948275&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java Wed May 26 00:40:33 2010
@@ -21,8 +21,6 @@ import java.util.List;
 import org.apache.tapestry5.ioc.Predicate;
 import org.apache.tapestry5.ioc.services.Coercion;
 import org.apache.tapestry5.ioc.test.TestBase;
-import org.apache.tapestry5.ioc.util.func.F;
-import org.apache.tapestry5.ioc.util.func.Worker;
 import org.testng.annotations.Test;
 
 public class FuncTest extends TestBase
@@ -86,7 +84,7 @@ public class FuncTest extends TestBase
 
         final StringBuffer buffer = new StringBuffer();
 
-        Worker<String> op = new Worker<String>()
+        Worker<String> worker = new AbstractWorker<String>()
         {
             public void work(String value)
             {
@@ -97,12 +95,45 @@ public class FuncTest extends TestBase
             }
         };
 
-        F.each(op, source);
+        F.each(worker, source);
 
         assertEquals(buffer.toString(), "Mary had a little lamb");
     }
 
     @Test
+    public void combine_workers()
+    {
+        List<String> source = Arrays.asList("Mary", "had", "a", "little", "lamb");
+
+        final StringBuffer buffer = new StringBuffer();
+
+        Worker<String> appendWorker = new AbstractWorker<String>()
+        {
+            public void work(String value)
+            {
+                if (buffer.length() > 0)
+                    buffer.append(" ");
+
+                buffer.append(value);
+            }
+        };
+
+        Worker<String> appendLength = new AbstractWorker<String>()
+        {
+            public void work(String value)
+            {
+                buffer.append("(");
+                buffer.append(value.length());
+                buffer.append(")");
+            }
+        };
+
+        F.each(appendWorker.combine(appendLength), source);
+
+        assertEquals(buffer.toString(), "Mary(4) had(3) a(1) little(6) lamb(4)");
+    }
+
+    @Test
     public void filter()
     {
         List<Integer> input = Arrays.asList(1, 2, 3, 4, 5, 6, 7);