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;
21
22 import cz.zcu.mre.sparkle.gui.query.QueryFormPane;
23 import cz.zcu.mre.sparkle.gui.query.clause.ClauseVariablePane;
24 import cz.zcu.mre.sparkle.gui.query.clause.SingleClausePane;
25 import cz.zcu.mre.sparkle.gui.query.clause.SingleClauseRulePane;
26 import cz.zcu.mre.sparkle.gui.query.helpers.ObjectRelatedActionEvent;
27 import cz.zcu.mre.sparkle.gui.query.helpers.PartialQueryGenerator;
28 import cz.zcu.mre.sparkle.tools.Definitions;
29 import javafx.collections.ObservableList;
30 import javafx.scene.Node;
31 import org.w3c.dom.Element;
32 import org.w3c.dom.NodeList;
33
34
35
36
37
38
39
40
41
42 public final class OrderByClausePane extends ClauseVariablePane {
43
44 private static final String XML_ELEMENT_NAME = "OrderBy";
45
46 public OrderByClausePane(final QueryFormPane<?> parentQueryFormPane) {
47 super(parentQueryFormPane);
48 }
49
50 @Override
51 protected final OrderByClauseRulePane addNewRule() {
52 final OrderByClauseRulePane pane = new OrderByClauseRulePane(parentQueryFormPane);
53 final ObservableList<Node> children = getChildren();
54 children.add(children.indexOf(addRuleButton), pane);
55
56 pane.addVariablesCollector(this);
57 pane.setOnRemovalRequested(keeper.toWeak((final ObjectRelatedActionEvent<SingleClausePane> e) -> {
58 children.remove(e.relatedObject);
59 ((SingleClauseRulePane) e.relatedObject).getVariables().stream().forEach(this::onVariableRemoved);
60 }));
61
62 return pane;
63 }
64
65 @Override
66 public final String getQueryPart() {
67 final StringBuilder sb = new StringBuilder();
68
69 getChildren().stream().filter((node) -> (node instanceof PartialQueryGenerator)).forEach((node) -> sb.append(((PartialQueryGenerator) node).getQueryPart()));
70
71 if (sb.length() > 0) {
72 sb.insert(0, "ORDER BY ");
73 }
74
75 sb.append(Definitions.SPACE);
76
77 return sb.toString();
78 }
79
80 @Override
81 public final void load(final Object e) throws LoadException {
82 if (e instanceof Element) {
83 final NodeList nodes = ((Element) e).getElementsByTagName(OrderByClauseRulePane.XML_ELEMENT_NAME);
84 final int nodesCount = nodes.getLength();
85 for (int nodeIndex = 0; nodeIndex < nodesCount; nodeIndex++) {
86 final org.w3c.dom.Node childNode = nodes.item(nodeIndex);
87 if (childNode instanceof Element) {
88 addNewRule().load(childNode);
89 }
90 }
91 } else {
92 addNewRule().load(e);
93 }
94 }
95
96 @Override
97 public final String getXMLElementName() {
98 return XML_ELEMENT_NAME;
99 }
100 }