import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccess;
import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessEffectiveStatement;
import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+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.parser.rfc7950.stmt.BaseStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+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;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
@Beta
public final class MaxAccessStatementSupport
- extends BaseStringStatementSupport<MaxAccessStatement, MaxAccessEffectiveStatement> {
- private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+ extends AbstractStatementSupport<MaxAccess, MaxAccessStatement, MaxAccessEffectiveStatement> {
+ private static final SubstatementValidator VALIDATOR =
SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS).build();
- private static final MaxAccessStatementSupport INSTANCE = new MaxAccessStatementSupport();
- private MaxAccessStatementSupport() {
- super(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS);
- }
-
- public static MaxAccessStatementSupport getInstance() {
- return INSTANCE;
+ public MaxAccessStatementSupport(final YangParserConfiguration config) {
+ super(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS, StatementPolicy.contextIndependent(), config, VALIDATOR);
}
@Override
- public void onFullDefinitionDeclared(final Mutable<String, MaxAccessStatement, MaxAccessEffectiveStatement> stmt) {
- stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+ public MaxAccess parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ final MaxAccess val = MaxAccess.forStringLiteral(value);
+ if (val == null) {
+ throw new SourceException(ctx, "Invalid max-access value '%s'", value);
+ }
+ return val;
}
@Override
- protected SubstatementValidator getSubstatementValidator() {
- return SUBSTATEMENT_VALIDATOR;
+ public String internArgument(final String rawArgument) {
+ final MaxAccess val = MaxAccess.forStringLiteral(rawArgument);
+ return val == null ? rawArgument : val.stringLiteral();
}
@Override
- protected MaxAccessStatement createDeclared(final StmtContext<String, MaxAccessStatement, ?> ctx,
+ protected MaxAccessStatement createDeclared(final StmtContext<MaxAccess, MaxAccessStatement, ?> ctx,
final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- return new MaxAccessStatementImpl(ctx.coerceRawStatementArgument(), substatements);
- }
-
- @Override
- protected MaxAccessStatement createEmptyDeclared(final StmtContext<String, MaxAccessStatement, ?> ctx) {
- return createDeclared(ctx, ImmutableList.of());
+ return new MaxAccessStatementImpl(ctx.getArgument(), substatements);
}
@Override
- protected MaxAccessEffectiveStatement createEffective(
- final StmtContext<String, MaxAccessStatement, MaxAccessEffectiveStatement> ctx,
- final MaxAccessStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- return new MaxAccessEffectiveStatementImpl(ctx, substatements);
+ protected MaxAccessStatement attachDeclarationReference(final MaxAccessStatement stmt,
+ final DeclarationReference reference) {
+ return new RefMaxAccessStatement(stmt, reference);
}
@Override
- protected MaxAccessEffectiveStatement createEmptyEffective(
- final StmtContext<String, MaxAccessStatement, MaxAccessEffectiveStatement> ctx,
- final MaxAccessStatement declared) {
- return createEffective(ctx, declared, ImmutableList.of());
+ protected MaxAccessEffectiveStatement createEffective(final Current<MaxAccess, MaxAccessStatement> stmt,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new MaxAccessEffectiveStatementImpl(stmt, substatements);
}
}
\ No newline at end of file