1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package cz.zcu.mre.sparkle.gui.query.modifiers.having;
21
22 import cz.zcu.mre.sparkle.gui.query.QueryFormPane;
23 import cz.zcu.mre.sparkle.gui.query.clause.ClausePane;
24 import cz.zcu.mre.sparkle.gui.query.clause.SingleClausePane;
25 import cz.zcu.mre.sparkle.gui.query.helpers.ObjectRelatedActionEvent;
26 import cz.zcu.mre.sparkle.gui.query.helpers.PartialQueryGenerator;
27 import javafx.collections.ObservableList;
28 import javafx.scene.Node;
29 import org.w3c.dom.Element;
30 import org.w3c.dom.NodeList;
31
32
33
34
35
36
37
38
39 public class HavingClausePane extends ClausePane {
40
41 private static final String XML_ELEMENT_NAME = "Having";
42
43 public HavingClausePane(final QueryFormPane<?> parentQueryFormPane) {
44 super(parentQueryFormPane);
45 }
46
47 @Override
48 protected final HavingClauseConstraintPane addNewRule() {
49 final HavingClauseConstraintPane pane = new HavingClauseConstraintPane(parentQueryFormPane);
50 final ObservableList<Node> children = getChildren();
51 children.add(children.indexOf(addRuleButton), pane);
52
53 pane.setOnRemovalRequested(keeper.toWeak((final ObjectRelatedActionEvent<SingleClausePane> e) -> children.remove(e.relatedObject)));
54
55 return pane;
56 }
57
58 @Override
59 public final String getQueryPart() {
60 final StringBuilder sb = new StringBuilder();
61
62 getChildren().stream().filter((node) -> (node instanceof PartialQueryGenerator)).forEach((node) -> sb.append(((PartialQueryGenerator) node).getQueryPart()));
63
64 if (sb.length() > 0) {
65 sb.insert(0, "HAVING ");
66 }
67
68 return sb.toString();
69 }
70
71 @Override
72 public final void load(final Object e) throws LoadException {
73 if (e instanceof Element) {
74 final NodeList nodes = ((Element) e).getElementsByTagName(HavingClauseConstraintPane.XML_ELEMENT_NAME);
75 final int nodesCount = nodes.getLength();
76 for (int nodeIndex = 0; nodeIndex < nodesCount; nodeIndex++) {
77 final org.w3c.dom.Node childNode = nodes.item(nodeIndex);
78 if (childNode instanceof Element) {
79 addNewRule().load(childNode);
80 }
81 }
82 } else {
83 addNewRule().load(e);
84 }
85 }
86
87 @Override
88 public final String getXMLElementName() {
89 return XML_ELEMENT_NAME;
90 }
91 }