X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FExtensionStatementImpl.java;h=b883bd33e701e5d5323d75bd048fd286d66143c1;hb=db22d7c0d40195a17885f44bc7ac27ac6924cfab;hp=0dd010deba6de5ad3b9cb564d007b5d973d3876a;hpb=42a5ab126bea6cdbc1eb3693044a024ed468ac4e;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java index 0dd010deba..b883bd33e7 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java @@ -8,65 +8,85 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; -import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator; 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.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ExtensionEffectiveStatementImpl; public class ExtensionStatementImpl extends AbstractDeclaredStatement implements ExtensionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .EXTENSION) - .add(Rfc6020Mapping.ARGUMENT, 0, 1) - .add(Rfc6020Mapping.DESCRIPTION, 0, 1) - .add(Rfc6020Mapping.REFERENCE, 0, 1) - .add(Rfc6020Mapping.STATUS, 0, 1) + .addOptional(YangStmtMapping.ARGUMENT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) .build(); - protected ExtensionStatementImpl(StmtContext context) { + protected ExtensionStatementImpl(final StmtContext context) { super(context); } - public static class Definition extends AbstractStatementSupport> { - + public static class Definition + extends AbstractQNameStatementSupport> { public Definition() { - super(Rfc6020Mapping.EXTENSION); + super(YangStmtMapping.EXTENSION); } @Override - public QName parseArgumentValue(StmtContext ctx, String value) { - return Utils.qNameFromArgument(ctx, value); + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); } @Override - public ExtensionStatement createDeclared(StmtContext ctx) { + public ExtensionStatement createDeclared(final StmtContext ctx) { return new ExtensionStatementImpl(ctx); } @Override - public EffectiveStatement createEffective(StmtContext> ctx) { - return new ExtensionEffectiveStatementImpl(ctx); + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return ExtensionEffectiveStatementImpl.create(ctx); } @Override - public void onStatementDefinitionDeclared(final StmtContext.Mutable> stmt) throws SourceException { - stmt.addContext(ExtensionNamespace.class, stmt.getStatementArgument(), stmt); + public void onStatementDefinitionDeclared( + final Mutable> stmt) { + super.onStatementDefinitionDeclared(stmt); + + QName stmtName = stmt.getStatementArgument(); + if (SupportedExtensionsMapping.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { + stmtName = stmtName.withoutRevision(); + } + + stmt.addContext(ExtensionNamespace.class, stmtName, stmt); + + final StmtContext argument = StmtContextUtils.findFirstDeclaredSubstatement(stmt, + ArgumentStatement.class); + final StmtContext yinElement = StmtContextUtils.findFirstDeclaredSubstatement(stmt, + YinElementStatement.class); + + stmt.addToNs(StatementDefinitionNamespace.class, stmt.getStatementArgument(), + new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(stmt.getStatementArgument(), + argument != null ? argument.getStatementArgument() : null, + yinElement != null ? yinElement.getStatementArgument() : false))); } @Override - public void onFullDefinitionDeclared(StmtContext.Mutable> stmt) throws SourceException { - super.onFullDefinitionDeclared(stmt); - SUBSTATEMENT_VALIDATOR.validate(stmt); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } } @@ -89,5 +109,4 @@ public class ExtensionStatementImpl extends AbstractDeclaredStatement imp public ArgumentStatement getArgument() { return firstDeclared(ArgumentStatement.class); } - }