import com.google.common.annotations.Beta;
import javax.xml.xpath.XPathExpressionException;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
+import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.YangNamespaceContextNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathParser;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathParserFactory;
this.factory = requireNonNull(factory);
}
- public RevisionAwareXPath parseXPath(final StmtContext<?, ?, ?> ctx, final String xpath) {
- final boolean isAbsolute = ArgumentUtils.isAbsoluteXPath(xpath);
- final YangXPathParser.QualifiedBound parser = factory.newParser(new StmtNamespaceContext(ctx));
+ public QualifiedBound parseXPath(final StmtContext<?, ?, ?> ctx, final String xpath) {
+ final YangXPathParser.QualifiedBound parser = factory.newParser(
+ YangNamespaceContextNamespace.computeIfAbsent(ctx));
final QualifiedBound parsed;
try {
parsed = parser.parseExpression(xpath);
} catch (XPathExpressionException e) {
- LOG.warn("Argument \"{}\" is not valid XPath string at \"{}\"", xpath,
- ctx.getStatementSourceReference(), e);
- return new RevisionAwareXPathImpl(xpath, isAbsolute);
+ throw new SourceException(ctx, e, "Argument \"%s\" is not valid XPath string", xpath);
}
- if (ctx.getRootVersion().compareTo(parsed.getYangVersion()) < 0) {
+ if (ctx.yangVersion().compareTo(parsed.getYangVersion()) < 0) {
LOG.warn("{} features required in {} context to parse expression '{}' [at {}]",
- parsed.getYangVersion().getReference(), ctx.getRootVersion().getReference(), xpath,
- ctx.getStatementSourceReference());
+ parsed.getYangVersion().getReference(), ctx.yangVersion().getReference(), xpath,
+ ctx.sourceReference());
}
- return new WithExpressionImpl(xpath, isAbsolute, parsed);
+ return parsed;
}
}