1
2
3
4
5
6 package dev.metaschema.core.metapath.cst.path;
7
8 import dev.metaschema.core.metapath.DynamicContext;
9 import dev.metaschema.core.metapath.IExpression;
10 import dev.metaschema.core.metapath.cst.IExpressionVisitor;
11 import dev.metaschema.core.metapath.item.ISequence;
12 import dev.metaschema.core.metapath.item.ItemUtils;
13 import dev.metaschema.core.util.CustomCollectors;
14 import dev.metaschema.core.util.ObjectUtils;
15 import edu.umd.cs.findbugs.annotations.NonNull;
16
17
18
19
20
21
22
23
24
25 public class RootSlashPath
26 extends AbstractRootPathExpression {
27
28
29
30
31
32
33
34
35
36
37 public RootSlashPath(@NonNull String text, @NonNull IExpression node) {
38 super(text, node);
39 }
40
41 @Override
42 public <RESULT, CONTEXT> RESULT accept(IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
43 return visitor.visitRootSlashPath(this, context);
44 }
45
46 @Override
47 protected ISequence<?> evaluate(DynamicContext dynamicContext, ISequence<?> focus) {
48 ISequence<?> roots = ObjectUtils.notNull(focus.stream()
49 .map(item -> ItemUtils.checkItemIsNodeItem(dynamicContext, item))
50
51 .flatMap(item -> Axis.ANCESTOR_OR_SELF.execute(ObjectUtils.notNull(item)).limit(1))
52 .collect(CustomCollectors.toSequence()));
53 return getExpression().accept(dynamicContext, roots);
54 }
55 }