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.engine;
28
29 import com.rapiddweller.benerator.BeneratorFactory;
30 import com.rapiddweller.benerator.factory.DefaultsProvider;
31 import com.rapiddweller.benerator.factory.GeneratorFactory;
32 import com.rapiddweller.common.Context;
33 import com.rapiddweller.model.data.ComponentDescriptor;
34 import com.rapiddweller.model.data.DataModel;
35 import com.rapiddweller.model.data.DescriptorProvider;
36 import com.rapiddweller.model.data.TypeDescriptor;
37 import org.apache.logging.log4j.LogManager;
38 import org.apache.logging.log4j.Logger;
39
40 import java.util.HashSet;
41 import java.util.Locale;
42 import java.util.Map.Entry;
43 import java.util.Set;
44 import java.util.concurrent.ExecutorService;
45
46
47
48
49
50
51
52
53 public abstract class AbstractBeneratorSubContext implements BeneratorSubContext {
54
55 private static final Logger LOGGER = LogManager.getLogger(AbstractBeneratorSubContext.class);
56
57
58
59 protected final BeneratorContext parent;
60
61
62
63 protected final String currentProductName;
64 private final Context localContext;
65
66
67
68
69
70
71
72 public AbstractBeneratorSubContext(String productName, BeneratorContext parent) {
73 this.currentProductName = productName;
74 this.parent = parent;
75 this.localContext = BeneratorFactory.getInstance().createGenerationContext();
76 }
77
78 @Override
79 public BeneratorContext getParent() {
80 return parent;
81 }
82
83 @Override
84 public String getDefaultEncoding() {
85 return parent.getDefaultEncoding();
86 }
87
88
89
90 @Override
91 public void setDefaultEncoding(String defaultEncoding) {
92 parent.setDefaultEncoding(defaultEncoding);
93 }
94
95 @Override
96 public String getDefaultLineSeparator() {
97 return parent.getDefaultLineSeparator();
98 }
99
100 @Override
101 public void setDefaultLineSeparator(String defaultLineSeparator) {
102 parent.setDefaultLineSeparator(defaultLineSeparator);
103 }
104
105 @Override
106 public Locale getDefaultLocale() {
107 return parent.getDefaultLocale();
108 }
109
110 @Override
111 public void setDefaultLocale(Locale defaultLocale) {
112 parent.setDefaultLocale(defaultLocale);
113 }
114
115 @Override
116 public void remove(String key) {
117 parent.remove(key);
118 }
119
120 @Override
121 public String getDefaultDataset() {
122 return parent.getDefaultDataset();
123 }
124
125 @Override
126 public void setDefaultDataset(String defaultDataset) {
127 parent.setDefaultDataset(defaultDataset);
128 }
129
130 @Override
131 public long getDefaultPageSize() {
132 return parent.getDefaultPageSize();
133 }
134
135 @Override
136 public void setDefaultPageSize(long defaultPageSize) {
137 parent.setDefaultPageSize(defaultPageSize);
138 }
139
140 @Override
141 public String getDefaultScript() {
142 return parent.getDefaultScript();
143 }
144
145 @Override
146 public void setDefaultScript(String defaultScript) {
147 parent.setDefaultScript(defaultScript);
148 }
149
150 @Override
151 public boolean isDefaultNull() {
152 return parent.isDefaultNull();
153 }
154
155 @Override
156 public void setDefaultNull(boolean defaultNull) {
157 parent.setDefaultNull(defaultNull);
158 }
159
160 @Override
161 public char getDefaultSeparator() {
162 return parent.getDefaultSeparator();
163 }
164
165 @Override
166 public void setDefaultSeparator(char defaultSeparator) {
167 parent.setDefaultSeparator(defaultSeparator);
168 }
169
170 @Override
171 public String getDefaultErrorHandler() {
172 return parent.getDefaultErrorHandler();
173 }
174
175 @Override
176 public void setDefaultErrorHandler(String defaultErrorHandler) {
177 parent.setDefaultErrorHandler(defaultErrorHandler);
178 }
179
180 @Override
181 public String getContextUri() {
182 return parent.getContextUri();
183 }
184
185 @Override
186 public void setContextUri(String contextUri) {
187 parent.setContextUri(contextUri);
188 }
189
190 @Override
191 public boolean isValidate() {
192 return parent.isValidate();
193 }
194
195 @Override
196 public void setValidate(boolean validate) {
197 parent.setValidate(validate);
198 }
199
200 @Override
201 public Long getMaxCount() {
202 return parent.getMaxCount();
203 }
204
205 @Override
206 public void setMaxCount(Long maxCount) {
207 parent.setMaxCount(maxCount);
208 }
209
210 @Override
211 public GeneratorFactory getGeneratorFactory() {
212 return parent.getGeneratorFactory();
213 }
214
215 @Override
216 public void setGeneratorFactory(GeneratorFactory generatorFactory) {
217 parent.setGeneratorFactory(generatorFactory);
218 }
219
220 @Override
221 public Object getGlobal(String name) {
222 return parent.getGlobal(name);
223 }
224
225 @Override
226 public DefaultsProvider getDefaultsProvider() {
227 return parent.getDefaultsProvider();
228 }
229
230 @Override
231 public void setDefaultsProvider(DefaultsProvider defaultsProvider) {
232 parent.setDefaultsProvider(defaultsProvider);
233 }
234
235 @Override
236 public Class<?> forName(String className) {
237 return parent.forName(className);
238 }
239
240 @Override
241 public ExecutorService getExecutorService() {
242 return parent.getExecutorService();
243 }
244
245 @Override
246 public void setGlobal(String name, Object value) {
247 parent.setGlobal(name, value);
248 }
249
250 @Override
251 public String resolveRelativeUri(String relativeUri) {
252 return parent.resolveRelativeUri(relativeUri);
253 }
254
255 @Override
256 public void close() {
257 parent.close();
258 }
259
260 @Override
261 public void importClass(String className) {
262 parent.importClass(className);
263 }
264
265 @Override
266 public void importPackage(String packageName) {
267 parent.importPackage(packageName);
268 }
269
270 @Override
271 public void importDefaults() {
272 parent.importDefaults();
273 }
274
275 @Override
276 public ComponentDescriptor getDefaultComponentConfig(String name) {
277 return parent.getDefaultComponentConfig(name);
278 }
279
280 @Override
281 public void setDefaultComponentConfig(ComponentDescriptor component) {
282 parent.setDefaultComponentConfig(component);
283 }
284
285 @Override
286 public boolean isDefaultOneToOne() {
287 return parent.isDefaultOneToOne();
288 }
289
290 @Override
291 public void setDefaultOneToOne(boolean defaultOneToOne) {
292 parent.setDefaultOneToOne(defaultOneToOne);
293 }
294
295 @Override
296 public boolean isAcceptUnknownSimpleTypes() {
297 return parent.isAcceptUnknownSimpleTypes();
298 }
299
300 @Override
301 public void setAcceptUnknownSimpleTypes(boolean acceptUnknownSimpleTypes) {
302 parent.setAcceptUnknownSimpleTypes(acceptUnknownSimpleTypes);
303 }
304
305 @Override
306 public boolean isDefaultImports() {
307 return parent.isDefaultImports();
308 }
309
310 @Override
311 public void setDefaultImports(boolean defaultImports) {
312 parent.setDefaultImports(defaultImports);
313 }
314
315 @Override
316 public DataModel getDataModel() {
317 return parent.getDataModel();
318 }
319
320 @Override
321 public void setDataModel(DataModel dataModel) {
322 parent.setDataModel(dataModel);
323 }
324
325 @Override
326 public DescriptorProvider getLocalDescriptorProvider() {
327 return parent.getLocalDescriptorProvider();
328 }
329
330 @Override
331 public void addLocalType(TypeDescriptor type) {
332 parent.addLocalType(type);
333 }
334
335
336
337
338 @Override
339 public boolean hasProductNameInScope(String currentProductName) {
340 return (this.currentProductName != null && this.currentProductName.equals(currentProductName))
341 || (parent != null && parent.hasProductNameInScope(currentProductName));
342 }
343
344 @Override
345 public boolean contains(String key) {
346 return key != null && (key.equalsIgnoreCase(currentProductName) || "this".equalsIgnoreCase(key) ||
347 localContext.contains(key) || parent.contains(key));
348 }
349
350 @Override
351 public Object get(String key) {
352 if (key == null) {
353 return null;
354 } else if (localContext.contains(key)) {
355 return localContext.get(key);
356 } else if (key.equalsIgnoreCase(currentProductName) || "this".equalsIgnoreCase(key)) {
357 return getCurrentProduct().unwrap();
358 } else {
359 return parent.get(key);
360 }
361 }
362
363 @Override
364 public void set(String key, Object value) {
365 localContext.set(key, value);
366 }
367
368 @Override
369 public Set<String> keySet() {
370 Set<String> keySet = new HashSet<>(parent.keySet());
371 keySet.addAll(localContext.keySet());
372 return keySet;
373 }
374
375 @Override
376 public Set<Entry<String, Object>> entrySet() {
377 try {
378 Set<Entry<String, Object>> entrySet = new HashSet<>(parent.entrySet());
379 entrySet.addAll(localContext.entrySet());
380 return entrySet;
381 } catch (NullPointerException e) {
382 return localContext.entrySet();
383 }
384
385
386 }
387
388
389
390
391 @Override
392 public String toString() {
393 return getClass().getSimpleName() + "(" + currentProductName + ")";
394 }
395
396 }