import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.YangConstants;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
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.StatementSource;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
+import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
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.SubstatementValidator;
@Beta
public final class InputStatementSupport
- extends BaseOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
- private static final @NonNull InputStatementSupport RFC6020_INSTANCE = new InputStatementSupport(
- SubstatementValidator.builder(YangStmtMapping.INPUT)
- .addAny(YangStmtMapping.ANYXML)
- .addAny(YangStmtMapping.CHOICE)
- .addAny(YangStmtMapping.CONTAINER)
- .addAny(YangStmtMapping.GROUPING)
- .addAny(YangStmtMapping.LEAF)
- .addAny(YangStmtMapping.LEAF_LIST)
- .addAny(YangStmtMapping.LIST)
- .addAny(YangStmtMapping.TYPEDEF)
- .addAny(YangStmtMapping.USES)
- .build());
- private static final @NonNull InputStatementSupport RFC7950_INSTANCE = new InputStatementSupport(
- SubstatementValidator.builder(YangStmtMapping.INPUT)
- .addAny(YangStmtMapping.ANYDATA)
- .addAny(YangStmtMapping.ANYXML)
- .addAny(YangStmtMapping.CHOICE)
- .addAny(YangStmtMapping.CONTAINER)
- .addAny(YangStmtMapping.GROUPING)
- .addAny(YangStmtMapping.LEAF)
- .addAny(YangStmtMapping.LEAF_LIST)
- .addAny(YangStmtMapping.LIST)
- .addAny(YangStmtMapping.MUST)
- .addAny(YangStmtMapping.TYPEDEF)
- .addAny(YangStmtMapping.USES)
- .build());
+ extends AbstractOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
+ private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .build();
+ private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addAny(YangStmtMapping.MUST)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .build();
private final SubstatementValidator validator;
- private InputStatementSupport(final SubstatementValidator validator) {
- super(YangStmtMapping.INPUT, YangConstants::operationInputQName);
+ private InputStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
+ super(YangStmtMapping.INPUT, config, YangConstants::operationInputQName);
this.validator = requireNonNull(validator);
}
- public static @NonNull InputStatementSupport rfc6020Instance() {
- return RFC6020_INSTANCE;
+ public static @NonNull InputStatementSupport rfc6020Instance(final YangParserConfiguration config) {
+ return new InputStatementSupport(config, RFC6020_VALIDATOR);
}
- public static @NonNull InputStatementSupport rfc7950Instance() {
- return RFC7950_INSTANCE;
+ public static @NonNull InputStatementSupport rfc7950Instance(final YangParserConfiguration config) {
+ return new InputStatementSupport(config, RFC7950_VALIDATOR);
}
@Override
@Override
protected InputStatement createDeclared(final StmtContext<QName, InputStatement, ?> ctx,
final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- final StatementSource source = ctx.source();
- switch (source) {
+ final StatementOrigin origin = ctx.origin();
+ switch (origin) {
case CONTEXT:
return ImplicitStatements.createInput(ctx.getArgument(), substatements);
case DECLARATION:
return DeclaredStatements.createInput(ctx.getArgument(), substatements);
default:
- throw new IllegalStateException("Unhandled statement source " + source);
+ throw new IllegalStateException("Unhandled statement origin " + origin);
}
}
@Override
- protected InputEffectiveStatement copyDeclaredEffective(final int flags,
- final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
- return EffectiveStatements.copyInput(original, stmt.effectivePath(),
- flags);
+ protected InputStatement attachDeclarationReference(final InputStatement stmt,
+ final DeclarationReference reference) {
+ return DeclaredStatementDecorators.decorateInput(stmt, reference);
}
@Override
- protected InputEffectiveStatement copyUndeclaredEffective(final int flags,
- final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
+ InputEffectiveStatement copyDeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
+ final InputEffectiveStatement original) {
return EffectiveStatements.copyInput(original, stmt.effectivePath(), flags);
}
@Override
- protected InputEffectiveStatement createDeclaredEffective(final int flags,
- final Current<QName, InputStatement> stmt,
+ InputEffectiveStatement copyUndeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
+ final InputEffectiveStatement original) {
+ return EffectiveStatements.copyInput(original, stmt.effectivePath(), flags);
+ }
+
+ @Override
+ InputEffectiveStatement createDeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
return EffectiveStatements.createInput(stmt.declared(), stmt.effectivePath(), flags, substatements);
}
@Override
- protected InputEffectiveStatement createUndeclaredEffective(final int flags,
- final Current<QName, InputStatement> stmt,
+ InputEffectiveStatement createUndeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
return EffectiveStatements.createInput(stmt.effectivePath(), flags, substatements);