1
2
3
4
5
6 package dev.metaschema.core.metapath.cst.logic;
7
8 import java.util.Arrays;
9 import java.util.List;
10
11 import dev.metaschema.core.metapath.DynamicContext;
12 import dev.metaschema.core.metapath.IExpression;
13 import dev.metaschema.core.metapath.cst.AbstractNAryExpression;
14 import dev.metaschema.core.metapath.cst.IExpressionVisitor;
15 import dev.metaschema.core.metapath.function.library.FnBoolean;
16 import dev.metaschema.core.metapath.item.ISequence;
17 import dev.metaschema.core.metapath.item.atomic.IBooleanItem;
18 import edu.umd.cs.findbugs.annotations.NonNull;
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class Or
34 extends AbstractNAryExpression
35 implements IBooleanLogicExpression {
36
37
38
39
40
41
42
43
44
45
46 @SuppressWarnings("null")
47 public Or(@NonNull String text, @NonNull IExpression... expressions) {
48 this(text, Arrays.asList(expressions));
49 }
50
51
52
53
54
55
56
57
58
59
60
61
62 public Or(@NonNull String text, @NonNull List<IExpression> expressions) {
63 super(text, expressions);
64 }
65
66 @Override
67 public <RESULT, CONTEXT> RESULT accept(IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
68 return visitor.visitOr(this, context);
69 }
70
71 @Override
72 protected ISequence<? extends IBooleanItem> evaluate(DynamicContext dynamicContext, ISequence<?> focus) {
73 boolean retval = false;
74 for (IExpression child : getChildren()) {
75 ISequence<?> result = child.accept(dynamicContext, focus);
76 if (FnBoolean.fnBooleanAsPrimitive(result)) {
77 retval = true;
78 break;
79 }
80 }
81 return ISequence.of(IBooleanItem.valueOf(retval));
82 }
83 }