1
2
3
4
5
6 package dev.metaschema.core.metapath.cst.path;
7
8 import java.util.stream.Stream;
9
10 import dev.metaschema.core.metapath.DynamicContext;
11 import dev.metaschema.core.metapath.cst.AbstractExpression;
12 import dev.metaschema.core.metapath.cst.IExpressionVisitor;
13 import dev.metaschema.core.metapath.item.ISequence;
14 import dev.metaschema.core.metapath.item.ItemUtils;
15 import dev.metaschema.core.metapath.item.node.IDefinitionNodeItem;
16 import dev.metaschema.core.metapath.item.node.INodeItem;
17 import dev.metaschema.core.qname.IEnhancedQName;
18 import dev.metaschema.core.util.ObjectUtils;
19 import edu.umd.cs.findbugs.annotations.NonNull;
20
21
22
23
24
25
26 @SuppressWarnings("PMD.TestClassWithoutTestCases")
27 public class NameNodeTest
28 extends AbstractExpression
29 implements INodeTestExpression {
30
31 @NonNull
32 private final IEnhancedQName name;
33
34
35
36
37
38
39
40
41
42 public NameNodeTest(@NonNull String text, @NonNull IEnhancedQName name) {
43 super(text);
44 this.name = name;
45 }
46
47
48
49
50
51
52 @NonNull
53 public IEnhancedQName getName() {
54 return name;
55 }
56
57 @Override
58 public <RESULT, CONTEXT> RESULT accept(IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
59 return visitor.visitNameNodeTest(this, context);
60 }
61
62 @Override
63 protected ISequence<? extends INodeItem> evaluate(DynamicContext dynamicContext, ISequence<?> focus) {
64 Stream<INodeItem> nodes = ObjectUtils.notNull(focus.stream()
65 .map(item -> ItemUtils.checkItemIsNodeItem(dynamicContext, item)));
66 return ISequence.of(filterStream(nodes));
67 }
68
69 @Override
70 public boolean match(INodeItem item) {
71 return item instanceof IDefinitionNodeItem
72 && getName().equals(((IDefinitionNodeItem<?, ?>) item).getQName());
73 }
74
75 @SuppressWarnings("null")
76 @Override
77 public String toCSTString() {
78 return String.format("%s[name=%s]", getClass().getName(), getName());
79 }
80 }