1
2
3
4
5
6 package dev.metaschema.core.metapath.cst.items;
7
8 import dev.metaschema.core.metapath.DynamicContext;
9 import dev.metaschema.core.metapath.IExpression;
10 import dev.metaschema.core.metapath.cst.AbstractBinaryExpression;
11 import dev.metaschema.core.metapath.cst.IExpressionVisitor;
12 import dev.metaschema.core.metapath.item.ISequence;
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 public class SimpleMap
24 extends AbstractBinaryExpression<IExpression, IExpression> {
25
26
27
28
29
30
31
32
33
34
35
36 public SimpleMap(
37 @NonNull String text,
38 @NonNull IExpression left,
39 @NonNull IExpression right) {
40 super(text, left, right);
41 }
42
43 @Override
44 protected ISequence<?> evaluate(DynamicContext dynamicContext, ISequence<?> focus) {
45 ISequence<?> leftResult = getLeft().accept(dynamicContext, focus);
46
47 IExpression right = getRight();
48 return ObjectUtils.notNull(leftResult.stream()
49 .flatMap(item -> right.accept(dynamicContext, ISequence.of(item)).stream())
50 .collect(CustomCollectors.toSequence()));
51 }
52
53 @Override
54 public <RESULT, CONTEXT> RESULT accept(IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
55 return visitor.visitSimpleMap(this, context);
56 }
57 }