1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package com.rapiddweller.benerator.wrapper;
28
29 import com.rapiddweller.benerator.Generator;
30 import com.rapiddweller.benerator.GeneratorContext;
31 import com.rapiddweller.benerator.GeneratorState;
32 import com.rapiddweller.benerator.InvalidGeneratorSetupException;
33 import com.rapiddweller.benerator.util.AbstractGenerator;
34 import com.rapiddweller.benerator.util.WrapperProvider;
35 import com.rapiddweller.common.BeanUtil;
36 import com.rapiddweller.common.IOUtil;
37 import com.rapiddweller.common.NullSafeComparator;
38
39
40
41
42
43
44
45
46
47
48
49
50 public abstract class GeneratorWrapper<S, P> extends AbstractGenerator<P> {
51
52 private Generator<S> source;
53 private final WrapperProvider<S> sourceWrapperProvider = new WrapperProvider<>();
54
55
56
57
58
59
60 public GeneratorWrapper(Generator<S> source) {
61 this.source = source;
62 }
63
64
65
66
67
68
69
70
71 public Generator<S> getSource() {
72 return source;
73 }
74
75
76
77
78
79
80 public void setSource(Generator<S> source) {
81 this.source = source;
82 }
83
84
85
86
87
88
89 protected ProductWrapper<S> generateFromSource() {
90 return source.generate(getSourceWrapper());
91 }
92
93
94
95
96
97
98 protected ProductWrapper<S> getSourceWrapper() {
99 return sourceWrapperProvider.get();
100 }
101
102
103
104 @Override
105 public boolean isThreadSafe() {
106 return source.isThreadSafe();
107 }
108
109 @Override
110 public boolean isParallelizable() {
111 return source.isParallelizable();
112 }
113
114 @Override
115 public synchronized void init(GeneratorContext context) {
116 assertNotInitialized();
117 if (source == null) {
118 throw new InvalidGeneratorSetupException("source", "is null");
119 }
120 synchronized (source) {
121 if (!source.wasInitialized()) {
122 source.init(context);
123 }
124 }
125 super.init(context);
126 }
127
128 @Override
129 public void reset() {
130 super.reset();
131 source.reset();
132 }
133
134 @Override
135 public void close() {
136 super.close();
137 IOUtil.close(source);
138 }
139
140
141
142 @Override
143 public boolean equals(Object other) {
144 if (this == other) {
145 return true;
146 }
147 if (other == null || getClass() != other.getClass()) {
148 return false;
149 }
150 GeneratorWrapper<?, ?> that = (GeneratorWrapper<?, ?>) other;
151 return NullSafeComparator.equals(this.source, that.source);
152 }
153
154 @Override
155 public int hashCode() {
156 return source.hashCode();
157 }
158
159 @Override
160 public String toString() {
161 return (state != GeneratorState.CREATED ? BeanUtil.toString(this) : getClass().getSimpleName());
162 }
163
164 }