2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.xpath.impl;
10 import static java.util.Objects.requireNonNull;
12 import javax.xml.xpath.XPathExpressionException;
13 import org.opendaylight.yangtools.yang.common.QNameModule;
14 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
15 import org.opendaylight.yangtools.yang.common.YangVersion;
16 import org.opendaylight.yangtools.yang.xpath.api.YangExpr;
17 import org.opendaylight.yangtools.yang.xpath.api.YangLiteralExpr;
18 import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath;
19 import org.opendaylight.yangtools.yang.xpath.api.YangQNameExpr;
20 import org.opendaylight.yangtools.yang.xpath.api.YangQNameExpr.Resolved;
21 import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression;
22 import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathMode;
24 abstract class AntlrYangXPathExpression implements YangXPathExpression {
25 static final class Base extends AntlrYangXPathExpression {
26 Base(final YangXPathMathMode mathMode, final YangVersion yangVersion, final YangExpr rootExpr,
27 final String origStr) {
28 super(mathMode, yangVersion, rootExpr, origStr);
32 public YangQNameExpr interpretAsQName(final YangLiteralExpr expr) throws XPathExpressionException {
33 return Utils.interpretAsQName(expr);
37 InstanceIdentifierParser createInstanceIdentifierParser() {
38 return new InstanceIdentifierParser.Base(getMathMode());
42 static class Qualified extends AntlrYangXPathExpression implements QualifiedBound {
43 final YangNamespaceContext namespaceContext;
45 Qualified(final YangXPathMathMode mathMode, final YangVersion yangVersion, final YangExpr rootExpr,
46 final String origStr, final YangNamespaceContext namespaceContext) {
47 super(mathMode, yangVersion, rootExpr, origStr);
48 this.namespaceContext = requireNonNull(namespaceContext);
51 YangNamespaceContext getNamespaceContext() {
52 return namespaceContext;
56 public YangQNameExpr interpretAsQName(final YangLiteralExpr expr) throws XPathExpressionException {
57 return Utils.interpretAsQName(namespaceContext, expr);
61 final InstanceIdentifierParser createInstanceIdentifierParser() {
62 return new InstanceIdentifierParser.Qualified(getMathMode(), namespaceContext);
66 static final class Unqualified extends Qualified implements UnqualifiedBound {
67 private final QNameModule defaultNamespace;
69 Unqualified(final YangXPathMathMode mathMode, final YangVersion yangVersion, final YangExpr rootExpr,
70 final String origStr, final YangNamespaceContext namespaceContext, final QNameModule defaultNamespace) {
71 super(mathMode, yangVersion, rootExpr, origStr, namespaceContext);
72 this.defaultNamespace = requireNonNull(defaultNamespace);
76 public Resolved interpretAsQName(final YangLiteralExpr expr) throws XPathExpressionException {
77 return Utils.interpretAsQName(getNamespaceContext(), defaultNamespace, expr);
81 private final YangXPathMathMode mathMode;
82 private final YangVersion yangVersion;
83 private final YangExpr rootExpr;
84 private final String origStr;
86 AntlrYangXPathExpression(final YangXPathMathMode mathMode, final YangVersion yangVersion, final YangExpr rootExpr,
87 final String origStr) {
88 this.mathMode = requireNonNull(mathMode);
89 this.yangVersion = requireNonNull(yangVersion);
90 this.rootExpr = requireNonNull(rootExpr);
91 this.origStr = requireNonNull(origStr);
95 public final YangXPathMathMode getMathMode() {
100 public final YangVersion getYangVersion() {
105 public final YangExpr getRootExpr() {
110 public final YangLocationPath interpretAsInstanceIdentifier(final YangLiteralExpr expr)
111 throws XPathExpressionException {
112 return createInstanceIdentifierParser().interpretAsInstanceIdentifier(expr);
116 public final String toString() {
120 abstract InstanceIdentifierParser createInstanceIdentifierParser();