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.engine.Statement;
30 import com.rapiddweller.benerator.engine.expression.ErrorHandlerExpression;
31 import com.rapiddweller.benerator.engine.expression.context.DefaultPageSizeExpression;
32 import com.rapiddweller.benerator.engine.statement.GenerateOrIterateStatement;
33 import com.rapiddweller.benerator.engine.statement.RunTaskStatement;
34 import com.rapiddweller.benerator.engine.statement.WhileStatement;
35 import com.rapiddweller.common.ErrorHandler;
36 import com.rapiddweller.format.xml.AbstractXMLElementParser;
37 import com.rapiddweller.format.xml.ParseContext;
38 import com.rapiddweller.script.Expression;
39 import org.apache.logging.log4j.LogManager;
40 import org.apache.logging.log4j.Logger;
41 import org.w3c.dom.Element;
42
43 import java.util.Set;
44
45 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_ON_ERROR;
46 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_PAGESIZE;
47 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.parseScriptableStringAttribute;
48
49
50
51
52
53
54
55
56 public abstract class AbstractBeneratorDescriptorParser extends AbstractXMLElementParser<Statement> {
57
58
59
60
61 protected Logger logger = LogManager.getLogger(AbstractBeneratorDescriptorParser.class);
62
63
64
65
66
67
68
69
70
71 public AbstractBeneratorDescriptorParser(String elementName,
72 Set<String> requiredAttributes, Set<String> optionalAttributes, Class<?>... supportedParentTypes) {
73 super(elementName, requiredAttributes, optionalAttributes, supportedParentTypes);
74 }
75
76
77
78
79
80
81
82 public static boolean containsLoop(Statement[] parentPath) {
83 if (parentPath == null) {
84 return false;
85 }
86 for (Statement statement : parentPath) {
87 if (isLoop(statement)) {
88 return true;
89 }
90 }
91 return false;
92 }
93
94
95
96
97
98
99
100 public static boolean isLoop(Statement statement) {
101 return (statement instanceof RunTaskStatement)
102 || (statement instanceof GenerateOrIterateStatement)
103 || (statement instanceof WhileStatement);
104 }
105
106
107
108
109
110
111
112 public static boolean containsGeneratorStatement(Statement[] parentPath) {
113 if (parentPath == null) {
114 return false;
115 }
116 for (Statement statement : parentPath) {
117 if (statement instanceof GenerateOrIterateStatement) {
118 return true;
119 }
120 }
121 return false;
122 }
123
124 @Override
125 public final Statementcom/rapiddweller/benerator/engine/Statement.html#Statement">Statement doParse(Element element, Statement[] parentPath, ParseContext<Statement> context) {
126 return doParse(element, parentPath, (BeneratorParseContext) context);
127 }
128
129
130
131
132
133
134
135
136
137 public abstract Statementcom/rapiddweller/benerator/engine/Statement.html#Statement">Statement doParse(Element element, Statement[] parentPath, BeneratorParseContext context);
138
139
140
141
142
143
144
145
146 protected Expression<ErrorHandler> parseOnErrorAttribute(Element element, String id) {
147 return new ErrorHandlerExpression(id, parseScriptableStringAttribute(ATT_ON_ERROR, element));
148 }
149
150
151
152
153
154
155
156 protected Expression<Long> parsePageSize(Element element) {
157 return DescriptorParserUtil.parseLongAttribute(ATT_PAGESIZE, element, new DefaultPageSizeExpression());
158 }
159
160 }