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%2FContainerStatementImpl.java;h=50be6fd6c60755e4fabab789cc1a8d480b39e6ec;hb=8b3dc57efefedaaa422c75eabca99ba0953a06b2;hp=da3d8bc3ee3fba6f9775da2cc3a96e17eadfc559;hpb=b5c32f072f61abfe730a386f8ffe3862491785cd;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java index da3d8bc3ee..50be6fd6c6 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java @@ -8,9 +8,11 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import java.util.Collection; +import javax.annotation.Nonnull; 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.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -18,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; @@ -26,36 +29,71 @@ import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; 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.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.ContainerEffectiveStatementImpl; public class ContainerStatementImpl extends AbstractDeclaredStatement implements ContainerStatement { - - protected ContainerStatementImpl(StmtContext context) { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .CONTAINER) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.PRESENCE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + + protected ContainerStatementImpl(final StmtContext context) { super(context); } public static class Definition extends AbstractStatementSupport> { public Definition() { - super(Rfc6020Mapping.Container); + super(YangStmtMapping.CONTAINER); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx,value); } @Override - public QName parseArgumentValue(StmtContext ctx, String value) { - return Utils.qNameFromArgument(ctx,value); + public void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); } @Override - public ContainerStatement createDeclared(StmtContext ctx) { + public ContainerStatement createDeclared(final StmtContext ctx) { return new ContainerStatementImpl(ctx); } @Override - public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + public EffectiveStatement createEffective(final StmtContext> ctx) { + return new ContainerEffectiveStatementImpl(ctx); } + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } } + @Nonnull @Override public QName getName() { return argument(); @@ -66,6 +104,7 @@ public class ContainerStatementImpl extends AbstractDeclaredStatement imp return firstDeclared(WhenStatement.class); } + @Nonnull @Override public Collection getIfFeatures() { return allDeclared(IfFeatureStatement.class); @@ -101,19 +140,32 @@ public class ContainerStatementImpl extends AbstractDeclaredStatement imp return firstDeclared(ReferenceStatement.class); } + @Nonnull @Override public Collection getTypedefs() { return allDeclared(TypedefStatement.class); } + @Nonnull @Override public Collection getGroupings() { return allDeclared(GroupingStatement.class); } + @Nonnull @Override public Collection getDataDefinitions() { return allDeclared(DataDefinitionStatement.class); } + @Nonnull + @Override + public Collection getActions() { + return allDeclared(ActionStatement.class); + } + + @Override + public final Collection getNotifications() { + return allDeclared(NotificationStatement.class); + } }