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.BeneratorRootStatement;
30 import com.rapiddweller.benerator.engine.Statement;
31 import com.rapiddweller.benerator.engine.expression.context.DefaultPageSizeExpression;
32 import com.rapiddweller.benerator.engine.statement.GenerateOrIterateStatement;
33 import com.rapiddweller.benerator.engine.statement.IfStatement;
34 import com.rapiddweller.benerator.engine.statement.RunTaskStatement;
35 import com.rapiddweller.benerator.engine.statement.WhileStatement;
36 import com.rapiddweller.common.CollectionUtil;
37 import com.rapiddweller.common.ConfigurationError;
38 import com.rapiddweller.common.ConversionException;
39 import com.rapiddweller.common.ErrorHandler;
40 import com.rapiddweller.script.DatabeneScriptParser;
41 import com.rapiddweller.script.Expression;
42 import com.rapiddweller.task.PageListener;
43 import com.rapiddweller.task.Task;
44 import org.w3c.dom.Element;
45
46 import java.util.Set;
47
48 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_CLASS;
49 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_COUNT;
50 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_ID;
51 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_ON_ERROR;
52 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_PAGER;
53 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_PAGESIZE;
54 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_SPEC;
55 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_STATS;
56 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_THREADS;
57 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_RUN_TASK;
58 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.parseBooleanExpressionAttribute;
59 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.parseIntAttribute;
60 import static com.rapiddweller.benerator.engine.parser.xml.DescriptorParserUtil.parseLongAttribute;
61
62
63
64
65
66
67
68
69 public class RunTaskParser extends AbstractBeneratorDescriptorParser {
70
71 private static final Set<String> OPTIONAL_ATTRIBUTES =
72 CollectionUtil.toSet(ATT_ID, ATT_CLASS, ATT_SPEC, ATT_COUNT, ATT_PAGESIZE, ATT_THREADS, ATT_PAGER, ATT_STATS, ATT_ON_ERROR);
73 private static final DefaultPageSizeExpression/DefaultPageSizeExpression.html#DefaultPageSizeExpression">DefaultPageSizeExpression DEFAULT_PAGE_SIZE = new DefaultPageSizeExpression();
74
75
76
77
78 public RunTaskParser() {
79 super(EL_RUN_TASK, null, OPTIONAL_ATTRIBUTES,
80 BeneratorRootStatement.class, IfStatement.class, WhileStatement.class, GenerateOrIterateStatement.class);
81 }
82
83 @Override
84 @SuppressWarnings("unchecked")
85 public RunTaskStatement doParse(Element element, Statement[] parentPath, BeneratorParseContext context) {
86 try {
87 Expression<Task> taskProvider = (Expression<Task>) BeanParser.parseBeanExpression(element);
88 Expression<Long> count = parseLongAttribute(ATT_COUNT, element, 1);
89 Expression<Long> pageSize = parseLongAttribute(ATT_PAGESIZE, element, DEFAULT_PAGE_SIZE);
90 Expression<Integer> threads = parseIntAttribute(ATT_THREADS, element, 1);
91 Expression<PageListener> pager = parsePager(element);
92 Expression<Boolean> stats = parseBooleanExpressionAttribute(ATT_STATS, element, false);
93 Expression<ErrorHandler> errorHandler = parseOnErrorAttribute(element, element.getAttribute(ATT_ID));
94 boolean infoLog = containsLoop(parentPath);
95 return new RunTaskStatement(taskProvider, count, pageSize, pager, threads,
96 stats, errorHandler, infoLog);
97 } catch (ConversionException e) {
98 throw new ConfigurationError(e);
99 }
100 }
101
102 @SuppressWarnings("unchecked")
103 private static Expression<PageListener> parsePager(Element element) {
104 String pagerSpec = element.getAttribute(ATT_PAGER);
105 return (Expression<PageListener>) DatabeneScriptParser.parseBeanSpec(pagerSpec);
106 }
107
108 }