X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Ffeature%2FFeatureStatementSupport.java;h=b4561d42fd06198ae59332ac837bfa7f32b551f6;hb=4e084f1b2db18c4aa9593718557e26bacbb55251;hp=548f1518ab8cbb0b0ad760b62152dad6170cac2a;hpb=66eebf76b15eebd461acf118a59205a0ff468b06;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java index 548f1518ab..b4561d42fd 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java @@ -7,17 +7,27 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature; +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.stmt.FeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; +import org.opendaylight.yangtools.yang.parser.spi.FeatureNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class FeatureStatementSupport - extends AbstractQNameStatementSupport> { + extends AbstractQNameStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.FEATURE) .addOptional(YangStmtMapping.DESCRIPTION) @@ -26,9 +36,10 @@ public final class FeatureStatementSupport .addOptional(YangStmtMapping.REFERENCE) .build(); private static final FeatureStatementSupport INSTANCE = new FeatureStatementSupport(); + private static final int EMPTY_EFFECTIVE_FLAGS = new FlagsBuilder().setStatus(Status.CURRENT).toFlags(); private FeatureStatementSupport() { - super(YangStmtMapping.FEATURE); + super(YangStmtMapping.FEATURE, StatementPolicy.reject()); } public static FeatureStatementSupport getInstance() { @@ -37,23 +48,43 @@ public final class FeatureStatementSupport @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); + return StmtContextUtils.parseIdentifier(ctx, value); } @Override - public FeatureStatement createDeclared( - final StmtContext ctx) { - return new FeatureStatementImpl(ctx); + public void onFullDefinitionDeclared(final Mutable stmt) { + super.onFullDefinitionDeclared(stmt); + stmt.addContext(FeatureNamespace.class, stmt.getArgument(), stmt); } @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new FeatureEffectiveStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected FeatureStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new RegularFeatureStatement(ctx.getArgument(), substatements); + } + + @Override + protected FeatureStatement createEmptyDeclared(@NonNull final StmtContext ctx) { + return new EmptyFeatureStatement(ctx.getArgument()); + } + + @Override + protected FeatureEffectiveStatement createEffective(final Current stmt, + final ImmutableList> substatements) { + return substatements.isEmpty() + ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(), EMPTY_EFFECTIVE_FLAGS) + : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(), + computeFlags(substatements), substatements); + } + + private static int computeFlags(final ImmutableList> substatements) { + return new FlagsBuilder() + .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) + .toFlags(); } } \ No newline at end of file