commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mben...@apache.org
Subject svn commit: r1439683 - in /commons/proper/functor/branches/FUNCTOR-14-mm/core/src: main/java/org/apache/commons/functor/core/algorithm/ main/java/org/apache/commons/functor/generator/ main/java/org/apache/commons/functor/generator/loop/ main/java/org/a...
Date Mon, 28 Jan 2013 22:49:37 GMT
Author: mbenson
Date: Mon Jan 28 22:49:36 2013
New Revision: 1439683

URL: http://svn.apache.org/viewvc?rev=1439683&view=rev
Log:
refactor LoopGenerator to PredicatedGenerator

Added:
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/PredicatedGenerator.java
      - copied, changed from r1439123, commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/LoopGenerator.java
Removed:
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/LoopGenerator.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestLoopGenerator.java
Modified:
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateUntil.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateWhile.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/IteratorToGeneratorAdapter.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/TransformedGenerator.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/UntilGenerate.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/WhileGenerate.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/CharacterRange.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/NumericRange.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/TestAlgorithms.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/example/lines/Lines.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateUntil.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateWhile.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestTransformedGenerator.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestUntilGenerate.java
    commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestWhileGenerate.java

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
Mon Jan 28 22:49:36 2013
@@ -21,17 +21,19 @@ import java.io.Serializable;
 import org.apache.commons.functor.BinaryFunction;
 import org.apache.commons.functor.UnaryPredicate;
 import org.apache.commons.functor.UnaryProcedure;
-import org.apache.commons.functor.generator.loop.LoopGenerator;
+import org.apache.commons.functor.generator.Generator;
+import org.apache.commons.functor.generator.loop.PredicatedGenerator;
+import org.apache.commons.functor.generator.loop.UntilGenerate;
 
 /**
- * Return the index of the first Object in a {@link LoopGenerator} matching a
+ * Return the index of the first Object in a {@link PredicatedGenerator} matching a
  * {@link UnaryPredicate}, or -1 if not found.
  *
  * @param <T> the procedure argument types
  * @version $Revision$ $Date$
  */
 public final class IndexOfInGenerator<T>
-    implements BinaryFunction<LoopGenerator<? extends T>, UnaryPredicate<? super
T>, Number>, Serializable {
+    implements BinaryFunction<Generator<? extends T>, UnaryPredicate<? super
T>, Number>, Serializable {
     /**
      * serialVersionUID declaration.
      */
@@ -48,42 +50,14 @@ public final class IndexOfInGenerator<T>
      */
     private static class IndexProcedure<T> implements UnaryProcedure<T> {
         /**
-         * The wrapped generator.
-         */
-        private final LoopGenerator<? extends T> generator;
-        /**
-         * The wrapped predicate.
-         */
-        private final UnaryPredicate<? super T> pred;
-        /**
-         * The number of iterations needed before the wrapped predicate found the target,
-         * {@code -1} means the target was not found.
-         */
-        private long index = -1L;
-        /**
          * A local accumulator to increment the number of attempts.
          */
         private long current = 0L;
 
         /**
-         * Create a new IndexProcedure.
-         *
-         * @param generator The wrapped generator
-         * @param pred The wrapped predicate
-         */
-        IndexProcedure(LoopGenerator<? extends T> generator, UnaryPredicate<? super
T> pred) {
-            this.generator = generator;
-            this.pred = pred;
-        }
-
-        /**
          * {@inheritDoc}
          */
         public void run(T obj) {
-            if (index < 0 && pred.test(obj)) {
-                index = current;
-                generator.stop();
-            }
             current++;
         }
     }
@@ -93,10 +67,10 @@ public final class IndexOfInGenerator<T>
      * @param left Generator
      * @param right UnaryPredicate
      */
-    public Number evaluate(LoopGenerator<? extends T> left, UnaryPredicate<? super
T> right) {
-        IndexProcedure<T> findProcedure = new IndexProcedure<T>(left, right);
-        left.run(findProcedure);
-        return Long.valueOf(findProcedure.index);
+    public Number evaluate(Generator<? extends T> left, UnaryPredicate<? super T>
right) {
+        final IndexProcedure<T> findProcedure = new IndexProcedure<T>();
+        new UntilGenerate<T>(right, left).run(findProcedure);
+        return Long.valueOf(findProcedure.current);
     }
 
     /**

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
Mon Jan 28 22:49:36 2013
@@ -29,8 +29,10 @@ import org.apache.commons.functor.genera
  */
 public abstract class BaseGenerator<E> implements Generator<E> {
 
-    /** Create a new generator. */
-    public BaseGenerator() {
+    /**
+     * Create a new BaseGenerator instance.
+     */
+    protected BaseGenerator() {
         super();
     }
 

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateUntil.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateUntil.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateUntil.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateUntil.java
Mon Jan 28 22:49:36 2013
@@ -18,6 +18,7 @@ package org.apache.commons.functor.gener
 
 import org.apache.commons.functor.UnaryPredicate;
 import org.apache.commons.functor.UnaryProcedure;
+import org.apache.commons.functor.core.composite.UnaryNot;
 import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.lang3.Validate;
 
@@ -28,12 +29,7 @@ import org.apache.commons.lang3.Validate
  * @param <E> the type of elements held in this generator.
  * @version $Revision$ $Date$
  */
-public class GenerateUntil<E> extends LoopGenerator<E> {
-
-    /**
-     * The condition has to verified in order to execute the generation.
-     */
-    private final UnaryPredicate<? super E> test;
+public class GenerateUntil<E> extends PredicatedGenerator<E> {
 
     /**
      * Create a new GenerateUntil.
@@ -41,53 +37,8 @@ public class GenerateUntil<E> extends Lo
      * @param test {@link UnaryPredicate}
      */
     public GenerateUntil(Generator<? extends E> wrapped, UnaryPredicate<? super
E> test) {
-        super(Validate.notNull(wrapped, "Generator argument was null"));
-        this.test = Validate.notNull(test, "UnaryPredicate argument was null");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(final UnaryProcedure<? super E> proc) {
-        getWrappedGenerator().run(new UnaryProcedure<E>() {
-            public void run(E obj) {
-                if (isStopped()) {
-                    return;
-                }
-                proc.run(obj);
-                if (test.test(obj)) {
-                    stop();
-                }
-            }
-        });
+        super(Validate.notNull(wrapped, "Generator argument was null"), UnaryNot.not(Validate.notNull(test,
+            "UnaryPredicate argument was null")), Behavior.TEST_AFTER);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (!(obj instanceof GenerateUntil<?>)) {
-            return false;
-        }
-        GenerateUntil<?> other = (GenerateUntil<?>) obj;
-        return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.test.equals(test);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        int result = "GenerateUntil".hashCode();
-        result <<= 2;
-        Generator<?> gen = getWrappedGenerator();
-        result ^= gen.hashCode();
-        result <<= 2;
-        result ^= test.hashCode();
-        return result;
-    }
 }

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateWhile.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateWhile.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateWhile.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/GenerateWhile.java
Mon Jan 28 22:49:36 2013
@@ -28,12 +28,7 @@ import org.apache.commons.lang3.Validate
  * @param <E> the type of elements held in this generator.
  * @version $Revision$ $Date$
  */
-public class GenerateWhile<E> extends LoopGenerator<E> {
-
-    /**
-     * The condition has to verified in order to execute the generation.
-     */
-    private final UnaryPredicate<? super E> test;
+public class GenerateWhile<E> extends PredicatedGenerator<E> {
 
     /**
      * Create a new GenerateWhile.
@@ -41,53 +36,8 @@ public class GenerateWhile<E> extends Lo
      * @param test {@link UnaryPredicate}
      */
     public GenerateWhile(Generator<? extends E> wrapped, UnaryPredicate<? super
E> test) {
-        super(Validate.notNull(wrapped, "Generator argument was null"));
-        this.test = Validate.notNull(test, "UnaryPredicate argument was null");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(final UnaryProcedure<? super E> proc) {
-        getWrappedGenerator().run(new UnaryProcedure<E>() {
-            public void run(E obj) {
-                if (isStopped()) {
-                    return;
-                }
-                proc.run(obj);
-                if (!test.test(obj)) {
-                    stop();
-                }
-            }
-        });
+        super(Validate.notNull(wrapped, "Generator argument was null"),
+        Validate.notNull(test, "UnaryPredicate argument was null"), Behavior.TEST_AFTER);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (!(obj instanceof GenerateWhile<?>)) {
-            return false;
-        }
-        GenerateWhile<?> other = (GenerateWhile<?>) obj;
-        return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.test.equals(test);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        int result = "GenerateWhile".hashCode();
-        result <<= 2;
-        Generator<?> gen = getWrappedGenerator();
-        result ^= gen.hashCode();
-        result <<= 2;
-        result ^= test.hashCode();
-        return result;
-    }
 }

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/IteratorToGeneratorAdapter.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/IteratorToGeneratorAdapter.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/IteratorToGeneratorAdapter.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/IteratorToGeneratorAdapter.java
Mon Jan 28 22:49:36 2013
@@ -14,19 +14,23 @@
 
 package org.apache.commons.functor.generator.loop;
 
+import java.util.Collection;
 import java.util.Iterator;
 
+import org.apache.commons.functor.UnaryFunction;
 import org.apache.commons.functor.UnaryProcedure;
+import org.apache.commons.functor.generator.BaseGenerator;
+import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.lang3.Validate;
 
 /**
- * Adapts an {@link Iterator} to the {@link LoopGenerator} interface.
+ * Adapts an {@link Iterator} to the {@link PredicatedGenerator} interface.
  *
  * @param <E> the type of elements held in this generator.
  * @since 1.0
  * @version $Revision$ $Date$
  */
-public final class IteratorToGeneratorAdapter<E> extends LoopGenerator<E> {
+public final class IteratorToGeneratorAdapter<E> extends BaseGenerator<E> {
     // instance variables
     //-----------------------------------------------------
 
@@ -53,9 +57,6 @@ public final class IteratorToGeneratorAd
     public void run(UnaryProcedure<? super E> proc) {
         while (iter.hasNext()) {
             proc.run(iter.next());
-            if (isStopped()) {
-                break;
-            }
         }
     }
 

Copied: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/PredicatedGenerator.java
(from r1439123, commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/LoopGenerator.java)
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/PredicatedGenerator.java?p2=commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/PredicatedGenerator.java&p1=commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/LoopGenerator.java&r1=1439123&r2=1439683&rev=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/LoopGenerator.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/PredicatedGenerator.java
Mon Jan 28 22:49:36 2013
@@ -14,6 +14,8 @@
 
 package org.apache.commons.functor.generator.loop;
 
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.UnaryProcedure;
 import org.apache.commons.functor.generator.BaseGenerator;
 import org.apache.commons.functor.generator.Generator;
 
@@ -25,27 +27,29 @@ import org.apache.commons.functor.genera
  * @since 1.0
  * @version $Revision:$ $Date:$
  */
-public abstract class LoopGenerator<E> extends BaseGenerator<E> {
+public abstract class PredicatedGenerator<E> extends BaseGenerator<E> {
+    public enum Behavior {
+        TEST_BEFORE, TEST_AFTER;
+    }
 
-    /** A generator can wrap another generator. */
     private final Generator<? extends E> wrappedGenerator;
+    private final UnaryPredicate<? super E> continuePredicate;
+    private final Behavior behavior;
 
-    /** Set to true when the generator is {@link #stop stopped}. */
+    /** Set to true when the generator is {@link #stop() stopped}. */
     private boolean stopped = false;
 
-    /** Create a new generator. */
-    public LoopGenerator() {
-        this(null);
-    }
-
     /**
-     * A generator can wrap another generator. When wrapping generators you
-     * should use probably this constructor since doing so will cause the
-     * {@link #stop} method to stop the wrapped generator as well.
-     * @param generator Generator to wrap
+     * Create a new PredicatedGenerator instance.
+     * @param wrappedGenerator
+     * @param continuePredicate
+     * @param behavior
      */
-    public LoopGenerator(Generator<? extends E> generator) {
-        this.wrappedGenerator = generator;
+    protected PredicatedGenerator(Generator<? extends E> wrappedGenerator, UnaryPredicate<?
super E> continuePredicate, Behavior behavior) {
+        super();
+        this.wrappedGenerator = wrappedGenerator;
+        this.continuePredicate = continuePredicate;
+        this.behavior = behavior;
     }
 
     /**
@@ -58,21 +62,58 @@ public abstract class LoopGenerator<E> e
 
     /**
      * {@inheritDoc}
-     * Stop the generator. Will stop the wrapped generator if one was set.
      */
-    public void stop() {
-        if (wrappedGenerator != null && wrappedGenerator instanceof LoopGenerator<?>)
{
-            ((LoopGenerator<?>) wrappedGenerator).stop();
+    public void run(final UnaryProcedure<? super E> proc) {
+        wrappedGenerator.run(new UnaryProcedure<E>() {
+            public void run(E obj) {
+                if (stopped) {
+                    return;
+                }
+                if (behavior == Behavior.TEST_BEFORE && !continuePredicate.test(obj))
{
+                    stop();
+                    return;
+                }
+                proc.run(obj);
+                if (behavior == Behavior.TEST_AFTER && !continuePredicate.test(obj))
{
+                    stop();
+                }
+            }
+        });
+    }
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        stopped = true;
+        if (!(obj instanceof PredicatedGenerator<?>)) {
+            return false;
+        }
+        PredicatedGenerator<?> other = (PredicatedGenerator<?>) obj;
+        return other.getWrappedGenerator().equals(getWrappedGenerator())
+            && other.continuePredicate.equals(continuePredicate) && other.behavior
== behavior;
     }
 
     /**
      * {@inheritDoc}
-     * Check if the generator is stopped.
      */
-    public boolean isStopped() {
-        return stopped;
+    @Override
+    public int hashCode() {
+        int result = getClass().getSimpleName().hashCode();
+        result <<= 2;
+        Generator<?> gen = getWrappedGenerator();
+        result ^= gen.hashCode();
+        result <<= 2;
+        result ^= continuePredicate.hashCode();
+        result <<= 2;
+        result ^= behavior.ordinal();
+        return result;
+    }
+
+    private void stop() {
+        stopped = true;
     }
 
 }

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/TransformedGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/TransformedGenerator.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/TransformedGenerator.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/TransformedGenerator.java
Mon Jan 28 22:49:36 2013
@@ -18,6 +18,7 @@ package org.apache.commons.functor.gener
 
 import org.apache.commons.functor.UnaryFunction;
 import org.apache.commons.functor.UnaryProcedure;
+import org.apache.commons.functor.generator.BaseGenerator;
 import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.lang3.Validate;
 
@@ -28,34 +29,34 @@ import org.apache.commons.lang3.Validate
  * @param <E> the type of elements held in this generator.
  * @version $Revision$ $Date$
  */
-public class TransformedGenerator<I, E> extends LoopGenerator<E> {
+public class TransformedGenerator<I, E> extends BaseGenerator<E> {
+
+    /**
+     * The wrapped/<em>I</em>nput generator.
+     */
+    private final Generator<? extends I> wrappedGenerator;
 
     /**
      * The UnaryFunction to apply to each element.
      */
     private final UnaryFunction<? super I, ? extends E> func;
 
-    // This is a special generator, that wraps a generator, but returns another one.
-    // So it breaks the interface contract, and we suppress the warnings when we cast
-    // the wrapped generator. This class has been marked as final, to avoid bogus
-    // specializations.
     /**
      * Create a new TransformedGenerator.
      * @param wrapped Generator to transform
      * @param func UnaryFunction to apply to each element
      */
-    @SuppressWarnings("unchecked")
     public TransformedGenerator(Generator<? extends I> wrapped, UnaryFunction<?
super I, ? extends E> func) {
-        super((Generator<? extends E>) Validate.notNull(wrapped, "Generator argument
was null"));
+        this.wrappedGenerator =
+        Validate.notNull(wrapped, "Generator argument was null");
         this.func = Validate.notNull(func, "UnaryFunction argument was null");
     }
 
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
     public void run(final UnaryProcedure<? super E> proc) {
-        ((Generator<? extends I>) getWrappedGenerator()).run(new UnaryProcedure<I>()
{
+        wrappedGenerator.run(new UnaryProcedure<I>() {
             public void run(I obj) {
                 proc.run(func.evaluate(obj));
             }
@@ -74,7 +75,7 @@ public class TransformedGenerator<I, E> 
             return false;
         }
         TransformedGenerator<?, ?> other = (TransformedGenerator<?, ?>) obj;
-        return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.func
== func;
+        return other.wrappedGenerator.equals(wrappedGenerator) && other.func.equals(func);
     }
 
     /**
@@ -84,7 +85,7 @@ public class TransformedGenerator<I, E> 
     public int hashCode() {
         int result = "TransformedGenerator".hashCode();
         result <<= 2;
-        Generator<?> gen = getWrappedGenerator();
+        Generator<?> gen = wrappedGenerator;
         result ^= gen.hashCode();
         result <<= 2;
         result ^= func.hashCode();

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/UntilGenerate.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/UntilGenerate.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/UntilGenerate.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/UntilGenerate.java
Mon Jan 28 22:49:36 2013
@@ -18,6 +18,7 @@ package org.apache.commons.functor.gener
 
 import org.apache.commons.functor.UnaryPredicate;
 import org.apache.commons.functor.UnaryProcedure;
+import org.apache.commons.functor.core.composite.UnaryNot;
 import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.lang3.Validate;
 
@@ -28,12 +29,7 @@ import org.apache.commons.lang3.Validate
  * @param <E> the type of elements held in this generator.
  * @version $Revision$ $Date$
  */
-public class UntilGenerate<E> extends LoopGenerator<E> {
-
-    /**
-     * The condition has to verified in order to execute the generation.
-     */
-    private final UnaryPredicate<? super E> test;
+public class UntilGenerate<E> extends PredicatedGenerator<E> {
 
     /**
      * Create a new UntilGenerate.
@@ -41,54 +37,8 @@ public class UntilGenerate<E> extends Lo
      * @param test {@link UnaryPredicate}
      */
     public UntilGenerate(UnaryPredicate<? super E> test, Generator<? extends E>
wrapped) {
-        super(Validate.notNull(wrapped, "Generator argument was null"));
-        this.test = Validate.notNull(test, "UnaryPredicate argument was null");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(final UnaryProcedure<? super E> proc) {
-        getWrappedGenerator().run(new UnaryProcedure<E>() {
-            public void run(E obj) {
-                if (isStopped()) {
-                    return;
-                }
-                if (test.test(obj)) {
-                    stop();
-                } else {
-                    proc.run(obj);
-                }
-            }
-        });
+        super(Validate.notNull(wrapped, "Generator argument was null"), UnaryNot.not(Validate.notNull(test,
+            "UnaryPredicate argument was null")), Behavior.TEST_BEFORE);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (!(obj instanceof UntilGenerate<?>)) {
-            return false;
-        }
-        UntilGenerate<?> other = (UntilGenerate<?>) obj;
-        return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.test.equals(test);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        int result = "UntilGenerate".hashCode();
-        result <<= 2;
-        Generator<?> gen = getWrappedGenerator();
-        result ^= gen.hashCode();
-        result <<= 2;
-        result ^= test.hashCode();
-        return result;
-    }
 }

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/WhileGenerate.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/WhileGenerate.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/WhileGenerate.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/loop/WhileGenerate.java
Mon Jan 28 22:49:36 2013
@@ -28,12 +28,7 @@ import org.apache.commons.lang3.Validate
  * @param <E> the type of elements held in this generator.
  * @version $Revision$ $Date$
  */
-public class WhileGenerate<E> extends LoopGenerator<E> {
-
-    /**
-     * The condition has to verified in order to execute the generation.
-     */
-    private final UnaryPredicate<? super E> test;
+public class WhileGenerate<E> extends PredicatedGenerator<E> {
 
     /**
      * Create a new WhileGenerate.
@@ -41,54 +36,8 @@ public class WhileGenerate<E> extends Lo
      * @param wrapped {@link Generator}
      */
     public WhileGenerate(UnaryPredicate<? super E> test, Generator<? extends E>
wrapped) {
-        super(Validate.notNull(wrapped, "Generator argument was null"));
-        this.test = Validate.notNull(test, "UnaryPredicate argument was null");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(final UnaryProcedure<? super E> proc) {
-        getWrappedGenerator().run(new UnaryProcedure<E>() {
-            public void run(E obj) {
-                if (isStopped()) {
-                    return;
-                }
-                if (!test.test(obj)) {
-                    stop();
-                } else {
-                    proc.run(obj);
-                }
-            }
-        });
+        super(Validate.notNull(wrapped, "Generator argument was null"), Validate.notNull(test,
+            "UnaryPredicate argument was null"), Behavior.TEST_BEFORE);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (!(obj instanceof WhileGenerate<?>)) {
-            return false;
-        }
-        WhileGenerate<?> other = (WhileGenerate<?>) obj;
-        return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.test.equals(test);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        int result = "WhileGenerate".hashCode();
-        result <<= 2;
-        Generator<?> gen = getWrappedGenerator();
-        result ^= gen.hashCode();
-        result <<= 2;
-        result ^= test.hashCode();
-        return result;
-    }
 }

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/CharacterRange.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/CharacterRange.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/CharacterRange.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/CharacterRange.java
Mon Jan 28 22:49:36 2013
@@ -21,7 +21,7 @@ import java.util.Collection;
 
 import org.apache.commons.functor.BinaryFunction;
 import org.apache.commons.functor.UnaryProcedure;
-import org.apache.commons.functor.generator.loop.LoopGenerator;
+import org.apache.commons.functor.generator.BaseGenerator;
 import org.apache.commons.lang3.Validate;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.commons.lang3.Validate
  * @since 1.0
  * @version $Revision$ $Date$
  */
-public final class CharacterRange extends LoopGenerator<Character> implements Range<Character,
Integer> {
+public final class CharacterRange extends BaseGenerator<Character> implements Range<Character,
Integer> {
 
     // attributes
     // ---------------------------------------------------------------

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/NumericRange.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/NumericRange.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/NumericRange.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/main/java/org/apache/commons/functor/generator/range/NumericRange.java
Mon Jan 28 22:49:36 2013
@@ -19,7 +19,7 @@ package org.apache.commons.functor.gener
 
 import java.util.Collection;
 
-import org.apache.commons.functor.generator.loop.LoopGenerator;
+import org.apache.commons.functor.generator.BaseGenerator;
 import org.apache.commons.lang3.Validate;
 
 /**
@@ -35,7 +35,7 @@ import org.apache.commons.lang3.Validate
  * @since 0.1
  * @version $Revision$ $Date$
  */
-public abstract class NumericRange<T extends Number & Comparable<T>> extends
LoopGenerator<T> implements Range<T, T> {
+public abstract class NumericRange<T extends Number & Comparable<T>> extends
BaseGenerator<T> implements Range<T, T> {
     // attributes
     // ---------------------------------------------------------------
     /**

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/TestAlgorithms.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/TestAlgorithms.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/TestAlgorithms.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/TestAlgorithms.java
Mon Jan 28 22:49:36 2013
@@ -31,8 +31,8 @@ import java.util.Set;
 import org.apache.commons.functor.core.Identity;
 import org.apache.commons.functor.core.composite.UnaryNot;
 import org.apache.commons.functor.generator.FilteredGenerator;
+import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.functor.generator.loop.IteratorToGeneratorAdapter;
-import org.apache.commons.functor.generator.loop.LoopGenerator;
 import org.apache.commons.functor.generator.loop.TransformedGenerator;
 import org.apache.commons.functor.generator.range.IntegerRange;
 import org.junit.After;
@@ -116,7 +116,7 @@ public class TestAlgorithms {
 
     @Test
     public void testApplyToGenerator() {
-        LoopGenerator<Integer> gen = new IntegerRange(1,5);
+        Generator<Integer> gen = new IntegerRange(1,5);
         Summer summer = new Summer();
 
         new TransformedGenerator<Integer, Integer>(gen, new Doubler()).run(summer);

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/example/lines/Lines.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/example/lines/Lines.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/example/lines/Lines.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/example/lines/Lines.java
Mon Jan 28 22:49:36 2013
@@ -23,12 +23,12 @@ import java.io.FileReader;
 import java.io.Reader;
 
 import org.apache.commons.functor.UnaryProcedure;
-import org.apache.commons.functor.generator.loop.LoopGenerator;
+import org.apache.commons.functor.generator.BaseGenerator;
 
 /**
  * @version $Revision$ $Date$
  */
-public class Lines extends LoopGenerator<String> {
+public class Lines extends BaseGenerator<String> {
     public static Lines from(Reader reader) {
         return new Lines(reader);
     }
@@ -55,19 +55,13 @@ public class Lines extends LoopGenerator
         } catch(Exception e) {
             throw new TunneledException(e);
         } finally {
-            stop();
-        }
-    }
-
-    @Override
-    public void stop() {
-        super.stop();
-        try {
-            in.close();
-        } catch(RuntimeException e) {
-            throw e;
-        } catch(Exception e) {
-            throw new TunneledException(e);
+            try {
+                in.close();
+            } catch(RuntimeException e) {
+                throw e;
+            } catch(Exception e) {
+                throw new TunneledException(e);
+            }
         }
     }
 

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateUntil.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateUntil.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateUntil.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateUntil.java
Mon Jan 28 22:49:36 2013
@@ -40,13 +40,13 @@ public class TestGenerateUntil {
     // ------------------------------------------------------------------------
     private static final Integer FIVE = new Integer(5);
 
-    private LoopGenerator<Integer> wrappedGenerator = null;
+    private Generator<Integer> wrappedGenerator = null;
     private UnaryPredicate<Integer> isMoreThanFive = new UnaryPredicate<Integer>()
{
         public boolean test( Integer obj ) {
             return obj > FIVE;
         }
     };
-    private LoopGenerator<Integer> generateUntil = null;
+    private PredicatedGenerator<Integer> generateUntil = null;
 
     @Before
     public void setUp() throws Exception {

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateWhile.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateWhile.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateWhile.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestGenerateWhile.java
Mon Jan 28 22:49:36 2013
@@ -40,13 +40,13 @@ public class TestGenerateWhile {
     // ------------------------------------------------------------------------
     private static final Integer FIVE = new Integer(5);
 
-    private LoopGenerator<Integer> wrappedGenerator = null;
+    private Generator<Integer> wrappedGenerator = null;
     private UnaryPredicate<Integer> isLessThanFive = new UnaryPredicate<Integer>()
{
         public boolean test( Integer obj ) {
             return obj < FIVE;
         }
     };
-    private LoopGenerator<Integer> generateWhile = null;
+    private PredicatedGenerator<Integer> generateWhile = null;
 
     @Before
     public void setUp() throws Exception {

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestTransformedGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestTransformedGenerator.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestTransformedGenerator.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestTransformedGenerator.java
Mon Jan 28 22:49:36 2013
@@ -22,6 +22,7 @@ import java.util.List;
 
 import org.apache.commons.functor.UnaryFunction;
 import org.apache.commons.functor.UnaryProcedure;
+import org.apache.commons.functor.generator.Generator;
 import org.apache.commons.functor.generator.range.IntegerRange;
 import org.junit.After;
 import org.junit.Before;
@@ -36,7 +37,7 @@ public class TestTransformedGenerator {
     // ------------------------------------------------------------------------
     private static final Integer TWO = new Integer(2);
 
-    private LoopGenerator<Integer> wrappedGenerator = null;
+    private Generator<Integer> wrappedGenerator = null;
     private UnaryFunction<Integer, Integer> sumsTwo = new UnaryFunction<Integer,
Integer>() {
         public Integer evaluate( Integer obj ) {
             return obj += TWO;

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestUntilGenerate.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestUntilGenerate.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestUntilGenerate.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestUntilGenerate.java
Mon Jan 28 22:49:36 2013
@@ -40,13 +40,13 @@ public class TestUntilGenerate {
     // ------------------------------------------------------------------------
     private static final Integer FIVE = new Integer(5);
 
-    private LoopGenerator<Integer> wrappedGenerator = null;
+    private Generator<Integer> wrappedGenerator = null;
     private UnaryPredicate<Integer> isGreaterThanFive = new UnaryPredicate<Integer>()
{
         public boolean test(Integer obj) {
             return obj > FIVE;
         }
     };
-    private LoopGenerator<Integer> untilGenerate = null;
+    private PredicatedGenerator<Integer> untilGenerate = null;
 
     @Before
     public void setUp() throws Exception {

Modified: commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestWhileGenerate.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestWhileGenerate.java?rev=1439683&r1=1439682&r2=1439683&view=diff
==============================================================================
--- commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestWhileGenerate.java
(original)
+++ commons/proper/functor/branches/FUNCTOR-14-mm/core/src/test/java/org/apache/commons/functor/generator/loop/TestWhileGenerate.java
Mon Jan 28 22:49:36 2013
@@ -42,13 +42,13 @@ public class TestWhileGenerate {
     // ------------------------------------------------------------------------
     private static final Integer FIVE = new Integer(5);
 
-    private LoopGenerator<Integer> wrappedGenerator = null;
+    private Generator<Integer> wrappedGenerator = null;
     private UnaryPredicate<Integer> isLessThanFive = new UnaryPredicate<Integer>()
{
         public boolean test( Integer obj ) {
             return obj < FIVE;
         }
     };
-    private LoopGenerator<Integer> whileGenerate = null;
+    private PredicatedGenerator<Integer> whileGenerate = null;
 
     @Before
     public void setUp() throws Exception {



Mime
View raw message