import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
@Beta
-public interface RefineEffectiveStatement extends EffectiveStatement<SchemaNodeIdentifier, RefineStatement> {
+public interface RefineEffectiveStatement extends EffectiveStatement<Descendant, RefineStatement> {
}
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
-public interface RefineStatement extends ConfigStatementAwareDeclaredStatement<SchemaNodeIdentifier>,
- DocumentedDeclaredStatement<SchemaNodeIdentifier>, IfFeatureAwareDeclaredStatement<SchemaNodeIdentifier>,
- MandatoryStatementAwareDeclaredStatement<SchemaNodeIdentifier>,
- MustStatementAwareDeclaredStatement<SchemaNodeIdentifier> {
+public interface RefineStatement extends ConfigStatementAwareDeclaredStatement<Descendant>,
+ DocumentedDeclaredStatement<Descendant>, IfFeatureAwareDeclaredStatement<Descendant>,
+ MandatoryStatementAwareDeclaredStatement<Descendant>,
+ MustStatementAwareDeclaredStatement<Descendant> {
default @NonNull String getTargetNode() {
// FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
return verifyNotNull(rawArgument());
return PATH_ABS.matcher(path).matches();
}
- @SuppressWarnings("checkstyle:illegalCatch")
+ public static Descendant parseDescendantSchemaNodeIdentifier(final StmtContext<?, ?, ?> ctx, final String str) {
+ // FIXME: this does accept a leading slash
+ return Descendant.of(parseNodeIdentifiers(ctx, str));
+ }
+
public static SchemaNodeIdentifier nodeIdentifierFromPath(final StmtContext<?, ?, ?> ctx, final String path) {
+ final List<QName> qnames = parseNodeIdentifiers(ctx, path);
+ return PATH_ABS.matcher(path).matches() ? Absolute.of(qnames) : Descendant.of(qnames);
+ }
+
+ @SuppressWarnings("checkstyle:illegalCatch")
+ private static List<QName> parseNodeIdentifiers(final StmtContext<?, ?, ?> ctx, final String path) {
// FIXME: is the path trimming really necessary??
- final List<QName> qNames = new ArrayList<>();
+ final List<QName> qnames = new ArrayList<>();
for (final String nodeName : SLASH_SPLITTER.split(trimSingleLastSlashFromXPath(path))) {
try {
- qNames.add(StmtContextUtils.parseNodeIdentifier(ctx, nodeName));
+ qnames.add(StmtContextUtils.parseNodeIdentifier(ctx, nodeName));
} catch (final RuntimeException e) {
throw new SourceException(ctx.getStatementSourceReference(), e,
"Failed to parse node '%s' in path '%s'", nodeName, path);
}
}
- if (qNames.isEmpty()) {
+ if (qnames.isEmpty()) {
throw new SourceException("Schema node identifier must not be empty", ctx.getStatementSourceReference());
}
-
- return PATH_ABS.matcher(path).matches() ? Absolute.of(qNames) : Descendant.of(qNames);
+ return qnames;
}
private static String trimSingleLastSlashFromXPath(final String path) {
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
abstract class AbstractRefineStatementSupport
- extends AbstractStatementSupport<SchemaNodeIdentifier, RefineStatement, RefineEffectiveStatement> {
+ extends AbstractStatementSupport<Descendant, RefineStatement, RefineEffectiveStatement> {
AbstractRefineStatementSupport() {
super(YangStmtMapping.REFINE);
}
@Override
- public final SchemaNodeIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return ArgumentUtils.nodeIdentifierFromPath(ctx, value);
+ public final Descendant parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ return ArgumentUtils.parseDescendantSchemaNodeIdentifier(ctx, value);
}
@Override
- public final RefineStatement createDeclared(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
+ public final RefineStatement createDeclared(final StmtContext<Descendant, RefineStatement, ?> ctx) {
return new RefineStatementImpl(ctx);
}
@Override
public final RefineEffectiveStatement createEffective(
- final StmtContext<SchemaNodeIdentifier, RefineStatement, RefineEffectiveStatement> ctx) {
+ final StmtContext<Descendant, RefineStatement, RefineEffectiveStatement> ctx) {
return new RefineEffectiveStatementImpl(ctx);
}
}
\ No newline at end of file
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
// FIXME: 5.0.0: hide this class
public final class RefineEffectiveStatementImpl
- extends AbstractEffectiveDocumentedNode<SchemaNodeIdentifier, RefineStatement>
+ extends AbstractEffectiveDocumentedNode<Descendant, RefineStatement>
implements RefineEffectiveStatement, SchemaNode {
private final @NonNull QName qname;
private final @NonNull SchemaPath path;
private final SchemaNode refineTargetNode;
- RefineEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
+ RefineEffectiveStatementImpl(final StmtContext<Descendant, RefineStatement, ?> ctx) {
super(ctx);
qname = Iterables.getLast(ctx.coerceStatementArgument().getNodeIdentifiers());
path = ctx.getSchemaPath().get();
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine;
import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class RefineStatementImpl extends AbstractDeclaredStatement<SchemaNodeIdentifier> implements RefineStatement {
- RefineStatementImpl(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> context) {
+final class RefineStatementImpl extends AbstractDeclaredStatement<Descendant> implements RefineStatement {
+ RefineStatementImpl(final StmtContext<Descendant, RefineStatement, ?> context) {
super(context);
}
}