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.parser.xml;
28
29 import com.rapiddweller.benerator.Generator;
30 import com.rapiddweller.benerator.distribution.Distribution;
31 import com.rapiddweller.benerator.engine.Statement;
32 import com.rapiddweller.benerator.engine.statement.WaitStatement;
33 import com.rapiddweller.benerator.factory.FactoryUtil;
34 import com.rapiddweller.benerator.primitive.DynamicLongGenerator;
35 import com.rapiddweller.benerator.util.ExpressionBasedGenerator;
36 import com.rapiddweller.benerator.wrapper.WrapperFactory;
37 import com.rapiddweller.common.CollectionUtil;
38 import com.rapiddweller.model.data.Uniqueness;
39 import com.rapiddweller.script.Expression;
40 import com.rapiddweller.script.expression.ExpressionUtil;
41 import org.w3c.dom.Element;
42
43 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_DISTRIBUTION;
44 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_DURATION;
45 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_GRANULARITY;
46 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_MAX;
47 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_MIN;
48 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_WAIT;
49 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.getAttribute;
50 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.parseLongAttribute;
51
52
53
54
55
56
57
58
59 public class WaitParser extends AbstractBeneratorDescriptorParser {
60
61
62
63
64 public WaitParser() {
65 super(EL_WAIT, null, CollectionUtil.toSet(ATT_DURATION, ATT_MIN, ATT_MAX, ATT_GRANULARITY, ATT_DISTRIBUTION));
66 }
67
68 @Override
69 public Statementcom/rapiddweller/benerator/engine/Statement.html#Statement">Statement doParse(Element element, Statement[] parentPath, BeneratorParseContext context) {
70
71
72 assertAtLeastOneAttributeIsSet(element, ATT_DURATION, ATT_MIN, ATT_MAX);
73 excludeAttributes(element, ATT_DURATION, ATT_MIN);
74 excludeAttributes(element, ATT_DURATION, ATT_MAX);
75
76
77 Expression<Long> duration = parseLongAttribute(ATT_DURATION, element, null);
78 if (duration != null) {
79 ExpressionBasedGenerator<Long> base = new ExpressionBasedGenerator<>(duration, Long.class);
80 return new WaitStatement(WrapperFactory.asNonNullGenerator(base));
81 }
82
83
84 Expression<Long> min = parseLongAttribute(ATT_MIN, element, null);
85 Expression<Long> max = parseLongAttribute(ATT_MAX, element, null);
86 Expression<Long> granularity = parseLongAttribute(ATT_GRANULARITY, element, null);
87 String distSpec = getAttribute(ATT_DISTRIBUTION, element);
88 Expression<Distribution> distribution
89 = FactoryUtil.getDistributionExpression(distSpec, Uniqueness.NONE, false);
90 Generator<Long> durationGenerator = new DynamicLongGenerator(min, max, granularity,
91 distribution, ExpressionUtil.constant(false));
92 return new WaitStatement(WrapperFactory.asNonNullGenerator(durationGenerator));
93 }
94
95 }