package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.common.YangVersion;
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.YangVersionStatement;
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.YangVersionEffectiveStatementImpl;
-public class YangVersionStatementImpl extends AbstractDeclaredStatement<String> implements YangVersionStatement {
+public class YangVersionStatementImpl extends AbstractDeclaredStatement<YangVersion> implements YangVersionStatement {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping
.YANG_VERSION)
.build();
- protected YangVersionStatementImpl(StmtContext<String, YangVersionStatement, ?> context) {
+ protected YangVersionStatementImpl(final StmtContext<YangVersion, YangVersionStatement, ?> context) {
super(context);
}
- public static class Definition extends AbstractStatementSupport<String,YangVersionStatement,
- EffectiveStatement<String,YangVersionStatement>> {
+ public static class Definition extends AbstractStatementSupport<YangVersion, YangVersionStatement,
+ EffectiveStatement<YangVersion, YangVersionStatement>> {
public Definition() {
super(Rfc6020Mapping.YANG_VERSION);
}
@Override
- public String parseArgumentValue(StmtContext<?, ?, ?> ctx, String value) {
- return value;
+ public YangVersion parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ try {
+ return YangVersion.parse(value);
+ } catch (IllegalArgumentException e) {
+ throw new SourceException("Unsupported YANG version " + value, ctx.getStatementSourceReference(), e);
+ }
}
@Override
- public YangVersionStatement createDeclared(StmtContext<String, YangVersionStatement, ?> ctx) {
+ public YangVersionStatement createDeclared(final StmtContext<YangVersion, YangVersionStatement, ?> ctx) {
return new YangVersionStatementImpl(ctx);
}
@Override
- public EffectiveStatement<String, YangVersionStatement> createEffective
- (StmtContext<String, YangVersionStatement, EffectiveStatement<String, YangVersionStatement>> ctx) {
+ public void onPreLinkageDeclared(
+ final StmtContext.Mutable<YangVersion, YangVersionStatement, EffectiveStatement<YangVersion, YangVersionStatement>> stmt) {
+ stmt.setRootVersion(stmt.getStatementArgument());
+ }
+
+ @Override
+ public EffectiveStatement<YangVersion, YangVersionStatement> createEffective
+ (final StmtContext<YangVersion, YangVersionStatement, EffectiveStatement<YangVersion, YangVersionStatement>> ctx) {
return new YangVersionEffectiveStatementImpl(ctx);
}
@Override
- public void onFullDefinitionDeclared(StmtContext.Mutable<String, YangVersionStatement,
- EffectiveStatement<String, YangVersionStatement>> stmt) {
+ public void onFullDefinitionDeclared(final StmtContext.Mutable<YangVersion, YangVersionStatement,
+ EffectiveStatement<YangVersion, YangVersionStatement>> stmt) {
super.onFullDefinitionDeclared(stmt);
SUBSTATEMENT_VALIDATOR.validate(stmt);
}
}
@Nonnull @Override
- public String getValue() {
- return rawArgument();
+ public YangVersion getValue() {
+ return argument();
}
}