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.statement.CascadeParent;
31 import com.rapiddweller.benerator.engine.statement.CascadeStatement;
32 import com.rapiddweller.benerator.engine.statement.MutatingTypeExpression;
33 import com.rapiddweller.benerator.engine.statement.TranscodeStatement;
34 import com.rapiddweller.common.ArrayUtil;
35 import com.rapiddweller.common.CollectionUtil;
36 import com.rapiddweller.common.xml.XMLUtil;
37 import org.w3c.dom.Element;
38
39 import java.util.Set;
40
41 import static com.rapiddweller.benerator.engine.DescriptorConstants.ATT_REF;
42 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_ATTRIBUTE;
43 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_CASCADE;
44 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_ID;
45 import static com.rapiddweller.benerator.engine.DescriptorConstants.EL_REFERENCE;
46
47
48
49
50
51
52
53
54 public class CascadeParser extends AbstractBeneratorDescriptorParser {
55
56 private static final Set<String> MEMBER_ELEMENTS = CollectionUtil.toSet(
57 EL_ID, EL_ATTRIBUTE, EL_REFERENCE);
58
59
60
61
62 public CascadeParser() {
63 super(EL_CASCADE, CollectionUtil.toSet(ATT_REF), null,
64 TranscodeStatement.class, CascadeStatement.class);
65 }
66
67 @Override
68 public Statementcom/rapiddweller/benerator/engine/Statement.html#Statement">Statement doParse(Element element, Statement[] parentPath,
69 BeneratorParseContext context) {
70 CascadeParent./../../../com/rapiddweller/benerator/engine/statement/CascadeParent.html#CascadeParent">CascadeParent parent = (CascadeParent) ArrayUtil.lastElementOf(parentPath);
71 String ref = getRequiredAttribute("ref", element);
72 CascadeStatemente/statement/CascadeStatement.html#CascadeStatement">CascadeStatement result = new CascadeStatement(ref, new MutatingTypeExpression(element, null), parent);
73 Statement[] currentPath = context.createSubPath(parentPath, result);
74 for (Element child : XMLUtil.getChildElements(element)) {
75 String childName = child.getNodeName();
76 if (!MEMBER_ELEMENTS.contains(childName)) {
77 result.addSubStatement(context.parseChildElement(child, currentPath));
78 }
79
80 }
81 return result;
82 }
83
84 }