View Javadoc

1   /*
2    * Licensed under the Apache License, Version 2.0 (the "License");
3    * you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    *      http://www.apache.org/licenses/LICENSE-2.0
7    *
8    * Unless required by applicable law or agreed to in writing, software
9    * distributed under the License is distributed on an "AS IS" BASIS,
10   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11   * See the License for the specific language governing permissions and
12   * limitations under the License.
13   */
14  
15  package org.apache.commons.functor.generator;
16  
17  import org.apache.commons.functor.UnaryProcedure;
18  
19  import java.util.Iterator;
20  
21  /**
22   * Adapts an {@link Iterator} to the {@link Generator} interface.
23   *
24   * @since 1.0
25   * @version $Revision: 1156798 $ $Date: 2011-08-11 22:11:07 +0200 (Thu, 11 Aug 2011) $
26   * @author Jason Horman (jason@jhorman.org)
27   * @author Rodney Waldhoff
28   */
29  public final class IteratorToGeneratorAdapter<E> extends BaseGenerator<E> {
30      // instance variables
31      //-----------------------------------------------------
32  
33      private final Iterator<? extends E> iter;
34  
35      // constructors
36      //-----------------------------------------------------
37      /**
38       * Create a new IteratorToGeneratorAdapter.
39       * @param iter Iterator to adapt
40       */
41      public IteratorToGeneratorAdapter(Iterator<? extends E> iter) {
42          if (null == iter) {
43              throw new IllegalArgumentException("Iterator argument was null");
44          }
45          this.iter = iter;
46      }
47  
48      // instance methods
49      //-----------------------------------------------------
50      /**
51       * {@inheritDoc}
52       */
53      public void run(UnaryProcedure<? super E> proc) {
54          while (iter.hasNext()) {
55              proc.run(iter.next());
56              if (isStopped()) {
57                  break;
58              }
59          }
60      }
61  
62      /**
63       * {@inheritDoc}
64       */
65      public boolean equals(Object obj) {
66          if (obj == this) {
67              return true;
68          }
69          if (!(obj instanceof IteratorToGeneratorAdapter<?>)) {
70              return false;
71          }
72          IteratorToGeneratorAdapter<?> that = (IteratorToGeneratorAdapter<?>) obj;
73          return this.iter.equals(that.iter);
74      }
75  
76      /**
77       * {@inheritDoc}
78       */
79      public int hashCode() {
80          int hash = "IteratorToGeneratorAdapater".hashCode();
81          hash <<= 2;
82          hash ^= iter.hashCode();
83          return hash;
84      }
85  
86      /**
87       * {@inheritDoc}
88       */
89      public String toString() {
90          return "IteratorToGeneratorAdapter<" + iter + ">";
91      }
92  
93      // static methods
94      //-----------------------------------------------------
95      /**
96       * Adapt an Iterator to the Generator interface.
97       * @param iter to adapt
98       * @return IteratorToGeneratorAdapter
99       */
100     public static <E> IteratorToGeneratorAdapter<E> adapt(Iterator<? extends E> iter) {
101         return null == iter ? null : new IteratorToGeneratorAdapter<E>(iter);
102     }
103 
104 }