package org.opendaylight.yangtools.rfc8040.parser;
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatements;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@Beta
-public final class YangDataStatementSupport extends AbstractStatementSupport<String, YangDataStatement,
- EffectiveStatement<String, YangDataStatement>> {
+public final class YangDataStatementSupport
+ extends BaseStringStatementSupport<YangDataStatement, YangDataEffectiveStatement> {
/**
* Declared statement representation of 'yang-data' extension defined in
* <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
*/
- private static final class Declared extends AbstractDeclaredStatement<String> implements YangDataStatement {
- Declared(final StmtContext<String, YangDataStatement, ?> ctx) {
- super(ctx);
- }
-
- @Override
- public String getArgument() {
- return argument();
+ private static final class Declared extends WithSubstatements implements YangDataStatement {
+ Declared(final String rawArgument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(rawArgument, substatements);
}
}
}
@Override
- protected SubstatementValidator getSubstatementValidator() {
- return validator;
+ public void onFullDefinitionDeclared(final Mutable<String, YangDataStatement, YangDataEffectiveStatement> ctx) {
+ // as per https://tools.ietf.org/html/rfc8040#section-8,
+ // yang-data is ignored unless it appears as a top-level statement
+ if (ctx.coerceParentContext().getParentContext() != null) {
+ ctx.setIsSupportedToBuildEffective(false);
+ }
}
@Override
- public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return value;
+ public boolean isIgnoringIfFeatures() {
+ return true;
}
@Override
- public YangDataStatement createDeclared(final StmtContext<String, YangDataStatement, ?> ctx) {
- return new Declared(ctx);
+ public boolean isIgnoringConfig() {
+ return true;
}
@Override
- public EffectiveStatement<String, YangDataStatement> createEffective(final StmtContext<String,
- YangDataStatement, EffectiveStatement<String, YangDataStatement>> ctx) {
- // in case of yang-data node we need to perform substatement validation at the point when we have
- // effective substatement contexts already available - if the node has only a uses statement declared in it,
- // one top-level container node may very well be added to the yang-data as an effective statement
- validator.validate(ctx);
- return new YangDataEffectiveStatementImpl(ctx);
+ protected SubstatementValidator getSubstatementValidator() {
+ return validator;
}
@Override
- public void onFullDefinitionDeclared(final Mutable<String, YangDataStatement,
- EffectiveStatement<String, YangDataStatement>> ctx) {
- // as per https://tools.ietf.org/html/rfc8040#section-8,
- // yang-data is ignored unless it appears as a top-level statement
- if (ctx.getParentContext().getParentContext() != null) {
- ctx.setIsSupportedToBuildEffective(false);
- }
+ protected YangDataStatement createDeclared(@NonNull final StmtContext<String, YangDataStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new Declared(ctx.coerceRawStatementArgument(), substatements);
}
@Override
- public boolean isIgnoringIfFeatures() {
- return true;
+ protected YangDataStatement createEmptyDeclared(final StmtContext<String, YangDataStatement, ?> ctx) {
+ return createDeclared(ctx, ImmutableList.of());
}
@Override
- public boolean isIgnoringConfig() {
- return true;
+ protected YangDataEffectiveStatement createEffective(final Current<String, YangDataStatement> stmt,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ // in case of yang-data node we need to perform substatement validation at the point when we have
+ // effective substatement contexts already available - if the node has only a uses statement declared in it,
+ // one top-level container node may very well be added to the yang-data as an effective statement
+ validator.validate(stmt.caerbannog());
+ return new YangDataEffectiveStatementImpl(stmt, substatements);
}
-}
\ No newline at end of file
+}