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.factory;
28
29 import com.rapiddweller.benerator.Generator;
30 import com.rapiddweller.benerator.engine.BeneratorContext;
31 import com.rapiddweller.benerator.primitive.IncrementGenerator;
32 import com.rapiddweller.model.data.ComponentDescriptor;
33 import com.rapiddweller.model.data.IdDescriptor;
34 import com.rapiddweller.model.data.InstanceDescriptor;
35 import com.rapiddweller.model.data.Mode;
36 import com.rapiddweller.model.data.SimpleTypeDescriptor;
37 import com.rapiddweller.model.data.TypeDescriptor;
38 import com.rapiddweller.model.data.Uniqueness;
39 import org.apache.logging.log4j.LogManager;
40 import org.apache.logging.log4j.Logger;
41
42
43
44
45
46
47
48
49 public class InstanceGeneratorFactory {
50
51 private static final Logger LOGGER = LogManager.getLogger(InstanceGeneratorFactory.class);
52
53
54
55
56
57
58 protected InstanceGeneratorFactory() {
59 }
60
61
62
63
64
65
66
67
68
69 public static Generator<?> createSingleInstanceGenerator(
70 InstanceDescriptor descriptor, Uniqueness ownerUniqueness, BeneratorContext context) {
71
72 Generator<?> generator = DescriptorUtil.createNullQuotaOneGenerator(descriptor, context);
73 if (generator != null) {
74 return generator;
75 }
76
77
78 Uniqueness uniqueness = DescriptorUtil.getUniqueness(descriptor, context);
79 if (!uniqueness.isUnique()) {
80 uniqueness = ownerUniqueness;
81 }
82
83
84 boolean nullable = DescriptorUtil.isNullable(descriptor, context);
85
86
87 if (descriptor.getMode() == Mode.ignored) {
88 LOGGER.debug("Ignoring descriptor {}", descriptor);
89 return null;
90 }
91
92
93 TypeDescriptor type = descriptor.getTypeDescriptor();
94 String instanceName = descriptor.getName();
95 if (type != null) {
96 generator = MetaGeneratorFactory.createTypeGenerator(type, instanceName, nullable, uniqueness, context);
97 } else {
98 ComponentDescriptor defaultConfig = context.getDefaultComponentConfig(instanceName);
99 if (defaultConfig != null) {
100 return createSingleInstanceGenerator(defaultConfig, ownerUniqueness, context);
101 }
102 if (nullable && DescriptorUtil.shouldNullifyEachNullable(descriptor, context)) {
103 return createNullGenerator(descriptor, context);
104 }
105 if (descriptor instanceof IdDescriptor) {
106 generator = new IncrementGenerator(1);
107 } else {
108 throw new UnsupportedOperationException("Type of " + instanceName + " is not defined");
109 }
110 }
111 GeneratorFactory generatorFactory = context.getGeneratorFactory();
112 generator = generatorFactory.applyNullSettings(generator, nullable, descriptor.getNullQuota());
113 return generator;
114 }
115
116
117
118
119
120
121
122
123
124 public static Generator<?> createConfiguredDefaultGenerator(String componentName, Uniqueness ownerUniqueness, BeneratorContext context) {
125 ComponentDescriptor defaultConfig = context.getDefaultComponentConfig(componentName);
126 if (defaultConfig != null) {
127 return createSingleInstanceGenerator(defaultConfig, ownerUniqueness, context);
128 }
129 return null;
130 }
131
132
133
134
135
136
137
138
139 protected static Generator<?> createNullGenerator(InstanceDescriptor descriptor, BeneratorContext context) {
140 Class<?> generatedType;
141 TypeDescriptor typeDescriptor = descriptor.getTypeDescriptor();
142 if (typeDescriptor instanceof SimpleTypeDescriptor) {
143 generatedType = ((SimpleTypeDescriptor) typeDescriptor).getPrimitiveType().getJavaType();
144 } else {
145 generatedType = String.class;
146 }
147 return context.getGeneratorFactory().createNullGenerator(generatedType);
148 }
149
150 }