Three call sites are performing the same thing, create a common method.
Change-Id: I274f23b1785210cef96465e4db944c3b923886a8
Signed-off-by: Robert Varga <rovarga@cisco.com>
*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl;
-
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl;
-public class MustStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements
- MustStatement {
+public class MustStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements MustStatement {
- protected MustStatementImpl(
- StmtContext<RevisionAwareXPath, MustStatement, ?> context) {
+ protected MustStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> context) {
super(context);
}
- public static class Definition extends AbstractStatementSupport<RevisionAwareXPath,MustStatement,EffectiveStatement<RevisionAwareXPath,MustStatement>> {
+ public static class Definition extends
+ AbstractStatementSupport<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> {
public Definition() {
super(Rfc6020Mapping.MUST);
}
- @Override public RevisionAwareXPath parseArgumentValue(
- StmtContext<?, ?, ?> ctx, String value) {
- return new RevisionAwareXPathImpl(value, Utils.isXPathAbsolute(ctx, value));
+ @Override
+ public RevisionAwareXPath parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ return Utils.parseXPath(ctx, value);
}
- @Override public MustStatement createDeclared(
- StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
+ @Override
+ public MustStatement createDeclared(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
return new MustStatementImpl(ctx);
}
- @Override public EffectiveStatement<RevisionAwareXPath, MustStatement> createEffective(
- StmtContext<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> ctx) {
+ @Override
+ public EffectiveStatement<RevisionAwareXPath, MustStatement> createEffective(
+ final StmtContext<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> ctx) {
return new MustEffectiveStatementImpl(ctx);
}
}
- @Nonnull @Override
+ @Nonnull
+ @Override
public RevisionAwareXPath getCondition() {
return argument();
}
- @Nullable @Override
+ @Nullable
+ @Override
public ErrorAppTagStatement getErrorAppTagStatement() {
return firstDeclared(ErrorAppTagStatement.class);
}
- @Nullable @Override
+ @Nullable
+ @Override
public ErrorMessageStatement getErrorMessageStatement() {
return firstDeclared(ErrorMessageStatement.class);
}
- @Nullable @Override
+ @Nullable
+ @Override
public DescriptionStatement getDescription() {
return firstDeclared(DescriptionStatement.class);
}
- @Nullable @Override
+ @Nullable
+ @Override
public ReferenceStatement getReference() {
return firstDeclared(ReferenceStatement.class);
}
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
import javax.annotation.Nonnull;
-
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PathEffectiveStatementImpl;
public class PathStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements PathStatement {
- protected PathStatementImpl(StmtContext<RevisionAwareXPath, PathStatement, ?> context) {
+ protected PathStatementImpl(final StmtContext<RevisionAwareXPath, PathStatement, ?> context) {
super(context);
}
- public static class Definition
- extends
+ public static class Definition extends
AbstractStatementSupport<RevisionAwareXPath, PathStatement, EffectiveStatement<RevisionAwareXPath, PathStatement>> {
public Definition() {
}
@Override
- public RevisionAwareXPath parseArgumentValue(StmtContext<?, ?, ?> ctx, String value) {
- return new RevisionAwareXPathImpl(value, Utils.isXPathAbsolute(ctx, value));
+ public RevisionAwareXPath parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ return Utils.parseXPath(ctx, value);
}
@Override
- public PathStatement createDeclared(StmtContext<RevisionAwareXPath, PathStatement, ?> ctx) {
+ public PathStatement createDeclared(final StmtContext<RevisionAwareXPath, PathStatement, ?> ctx) {
return new PathStatementImpl(ctx);
}
@Override
public EffectiveStatement<RevisionAwareXPath, PathStatement> createEffective(
- StmtContext<RevisionAwareXPath, PathStatement, EffectiveStatement<RevisionAwareXPath, PathStatement>> ctx) {
+ final StmtContext<RevisionAwareXPath, PathStatement, EffectiveStatement<RevisionAwareXPath, PathStatement>> ctx) {
return new PathEffectiveStatementImpl(ctx);
}
}
public String getValue() {
return rawArgument();
}
-
}
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.opendaylight.yangtools.yang.common.YangConstants;
import org.opendaylight.yangtools.yang.model.api.Deviation;
import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
+import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
return keyNodes;
}
- private static void compileXPath(final StmtContext<?, ?, ?> ctx, final String path) {
+ private static String trimSingleLastSlashFromXPath(final String path) {
+ return path.replaceAll("/$", "");
+ }
+
+ static RevisionAwareXPath parseXPath(final StmtContext<?, ?, ?> ctx, final String path) {
final XPath xPath = XPATH_FACTORY.get().newXPath();
+ final String trimmed = trimSingleLastSlashFromXPath(path);
try {
- xPath.compile(path);
+ // TODO: we could capture the result and expose its 'evaluate' method
+ xPath.compile(trimmed);
} catch (XPathExpressionException e) {
- LOG.warn("Argument {} is not valid XPath string at {}", path, ctx.getStatementSourceReference(), e);
+ LOG.warn("Argument \"{}\" is not valid XPath string at \"{}\"", path, ctx.getStatementSourceReference(), e);
}
- }
-
- private static String trimSingleLastSlashFromXPath(final String path) {
- return path.replaceAll("/$", "");
- }
-
- public static boolean isXPathAbsolute(final StmtContext<?, ?, ?> ctx, final String path) {
- // FIXME: this is probably an overkill, as this is called for all XPath objects. If we need this validation,
- // we should wrap the resulting XPath into RevisionAwareXPath.
- compileXPath(ctx, trimSingleLastSlashFromXPath(path));
- return PATH_ABS.matcher(path).matches();
+ return new RevisionAwareXPathImpl(path, PATH_ABS.matcher(path).matches());
}
public static QName trimPrefix(final QName identifier) {
*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.WhenEffectiveStatementImpl;
-
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.WhenEffectiveStatementImpl;
-public class WhenStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements
- WhenStatement {
+public class WhenStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements WhenStatement {
- protected WhenStatementImpl(
- StmtContext<RevisionAwareXPath, WhenStatement, ?> context) {
+ protected WhenStatementImpl(final StmtContext<RevisionAwareXPath, WhenStatement, ?> context) {
super(context);
}
- public static class Definition extends AbstractStatementSupport<RevisionAwareXPath,WhenStatement,EffectiveStatement<RevisionAwareXPath,WhenStatement>> {
+ public static class Definition extends
+ AbstractStatementSupport<RevisionAwareXPath, WhenStatement, EffectiveStatement<RevisionAwareXPath, WhenStatement>> {
public Definition() {
super(Rfc6020Mapping.WHEN);
}
- @Override public RevisionAwareXPath parseArgumentValue(
- StmtContext<?, ?, ?> ctx, String value) throws SourceException {
- return new RevisionAwareXPathImpl(value, Utils.isXPathAbsolute(ctx, value));
+ @Override
+ public RevisionAwareXPath parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ return Utils.parseXPath(ctx, value);
}
- @Override public WhenStatement createDeclared(
- StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
+ @Override
+ public WhenStatement createDeclared(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
return new WhenStatementImpl(ctx);
}
- @Override public EffectiveStatement<RevisionAwareXPath, WhenStatement> createEffective(
- StmtContext<RevisionAwareXPath, WhenStatement, EffectiveStatement<RevisionAwareXPath, WhenStatement>> ctx) {
+ @Override
+ public EffectiveStatement<RevisionAwareXPath, WhenStatement> createEffective(
+ final StmtContext<RevisionAwareXPath, WhenStatement, EffectiveStatement<RevisionAwareXPath, WhenStatement>> ctx) {
return new WhenEffectiveStatementImpl(ctx);
}
}
- @Nonnull @Override
+ @Nonnull
+ @Override
public RevisionAwareXPath getCondition() {
return argument();
}
- @Nullable @Override
+ @Nullable
+ @Override
public DescriptionStatement getDescription() {
return firstDeclared(DescriptionStatement.class);
}
- @Nullable @Override
+ @Nullable
+ @Override
public ReferenceStatement getReference() {
return firstDeclared(ReferenceStatement.class);
}