1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.tree;
18
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Set;
22 import java.util.stream.Collectors;
23
24
25
26
27
28
29
30
31
32
33
34
35
36 abstract class AbstractImmutableNodeHandler implements NodeHandler<ImmutableNode> {
37 @Override
38 public String nodeName(final ImmutableNode node) {
39 return node.getNodeName();
40 }
41
42 @Override
43 public Object getValue(final ImmutableNode node) {
44 return node.getValue();
45 }
46
47 @Override
48 public List<ImmutableNode> getChildren(final ImmutableNode node) {
49 return node.getChildren();
50 }
51
52 @Override
53 public <C> int getMatchingChildrenCount(final ImmutableNode node, final NodeMatcher<C> matcher, final C criterion) {
54 return getMatchingChildren(node, matcher, criterion).size();
55 }
56
57
58
59
60 @Override
61 public <C> List<ImmutableNode> getMatchingChildren(final ImmutableNode node, final NodeMatcher<C> matcher, final C criterion) {
62 return Collections.unmodifiableList(node.stream().filter(c -> matcher.matches(c, this, criterion)).collect(Collectors.toList()));
63 }
64
65
66
67
68 @Override
69 public List<ImmutableNode> getChildren(final ImmutableNode node, final String name) {
70 return getMatchingChildren(node, NodeNameMatchers.EQUALS, name);
71 }
72
73 @Override
74 public ImmutableNode getChild(final ImmutableNode node, final int index) {
75 return node.getChildren().get(index);
76 }
77
78 @Override
79 public int indexOfChild(final ImmutableNode parent, final ImmutableNode child) {
80 return parent.getChildren().indexOf(child);
81 }
82
83 @Override
84 public int getChildrenCount(final ImmutableNode node, final String name) {
85 if (name == null) {
86 return node.getChildren().size();
87 }
88 return getMatchingChildrenCount(node, NodeNameMatchers.EQUALS, name);
89 }
90
91 @Override
92 public Set<String> getAttributes(final ImmutableNode node) {
93 return node.getAttributes().keySet();
94 }
95
96 @Override
97 public boolean hasAttributes(final ImmutableNode node) {
98 return !node.getAttributes().isEmpty();
99 }
100
101 @Override
102 public Object getAttributeValue(final ImmutableNode node, final String name) {
103 return node.getAttributes().get(name);
104 }
105
106
107
108
109 @Override
110 public boolean isDefined(final ImmutableNode node) {
111 return AbstractImmutableNodeHandler.checkIfNodeDefined(node);
112 }
113
114
115
116
117
118
119
120 static boolean checkIfNodeDefined(final ImmutableNode node) {
121 return node.getValue() != null || !node.getChildren().isEmpty() || !node.getAttributes().isEmpty();
122 }
123 }