1
2
3
4
5
6 package gov.nist.secauto.metaschema.core.metapath.impl;
7
8 import gov.nist.secauto.metaschema.core.metapath.DynamicContext;
9 import gov.nist.secauto.metaschema.core.metapath.IExpression;
10 import gov.nist.secauto.metaschema.core.metapath.IMetapathExpression;
11 import gov.nist.secauto.metaschema.core.metapath.StaticContext;
12 import gov.nist.secauto.metaschema.core.metapath.cst.IExpressionVisitor;
13 import gov.nist.secauto.metaschema.core.metapath.item.IItem;
14 import gov.nist.secauto.metaschema.core.metapath.item.ISequence;
15 import gov.nist.secauto.metaschema.core.util.CollectionUtil;
16
17 import java.util.List;
18
19 import edu.umd.cs.findbugs.annotations.NonNull;
20
21 public abstract class AbstractMetapathExpression implements IMetapathExpression {
22
23 @NonNull
24 private final String path;
25 @NonNull
26 private final StaticContext staticContext;
27
28
29
30
31
32
33
34
35
36 public AbstractMetapathExpression(
37 @NonNull String path,
38 @NonNull StaticContext context) {
39 this.path = path;
40 this.staticContext = context;
41 }
42
43 @Override
44 public String getPath() {
45 return path;
46 }
47
48 @Override
49 public StaticContext getStaticContext() {
50 return staticContext;
51 }
52
53
54
55
56
57
58 @NonNull
59 protected abstract IExpression getExpression();
60
61 @Override
62 public Class<? extends IItem> getBaseResultType() {
63 return getExpression().getStaticResultType();
64 }
65
66 @Override
67 public List<? extends IExpression> getChildren() {
68 return CollectionUtil.singletonList(getExpression());
69 }
70
71 @Override
72 public ISequence<? extends IItem> accept(DynamicContext dynamicContext, ISequence<?> focus) {
73 return getExpression().accept(dynamicContext, focus);
74 }
75
76 @Override
77 public <RESULT, CONTEXT> RESULT accept(IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
78 return getExpression().accept(visitor, context);
79 }
80 }