1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.functor.generator;
18
19 import org.apache.commons.functor.Predicate;
20 import org.apache.commons.functor.Procedure;
21 import org.apache.commons.functor.core.composite.ConditionalProcedure;
22 import org.apache.commons.lang3.Validate;
23
24
25
26
27
28
29
30
31 public class FilteredGenerator<E> extends BaseGenerator<E> {
32
33
34
35
36 private Generator<? extends E> wrappedGenerator;
37
38
39
40
41 private final Predicate<? super E> pred;
42
43
44
45
46
47
48 public FilteredGenerator(Generator<? extends E> wrapped, Predicate<? super E> pred) {
49 this.wrappedGenerator = Validate.notNull(wrapped, "Generator argument was null");
50 this.pred = Validate.notNull(pred, "Predicate argument was null");
51 }
52
53
54
55
56 public void run(Procedure<? super E> proc) {
57 getWrappedGenerator().run(new ConditionalProcedure<E>(pred, proc));
58 }
59
60
61
62
63
64 protected Generator<? extends E> getWrappedGenerator() {
65 return this.wrappedGenerator;
66 }
67
68
69
70
71 @Override
72 public boolean equals(Object obj) {
73 if (obj == this) {
74 return true;
75 }
76 if (!(obj instanceof FilteredGenerator<?>)) {
77 return false;
78 }
79 FilteredGenerator<?> other = (FilteredGenerator<?>) obj;
80 return other.getWrappedGenerator().equals(getWrappedGenerator()) && other.pred.equals(pred);
81 }
82
83
84
85
86 @Override
87 public int hashCode() {
88 int result = "FilteredGenerator".hashCode();
89 result <<= 2;
90 Generator<?> gen = getWrappedGenerator();
91 result ^= gen.hashCode();
92 result <<= 2;
93 result ^= pred.hashCode();
94 return result;
95 }
96 }