X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=parser%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Fmeta%2FChoiceStatementSupport.java;h=eec559721196e33994fb2d22605a79f2c8120a8a;hb=eb017d49e00a06c1b29ac1a91d4d95007fa7c1a6;hp=0905efcb047849ed4e736f8f9e77a28fbf6e3f16;hpb=7bda1a105c1f4d3f7caeabdb84e48fa75986d8f9;p=yangtools.git diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java index 0905efcb04..eec5597211 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java @@ -7,11 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta; +import static com.google.common.base.Verify.verify; import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import java.util.Collection; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; @@ -35,15 +37,16 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; -import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.ImplicitParentAwareStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStmtCtx; +import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -67,11 +70,15 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) .build(); + private static final ImmutableSet RFC6020_CASE_SHORTHANDS = ImmutableSet.of( + YangStmtMapping.ANYXML, YangStmtMapping.CONTAINER, YangStmtMapping.LEAF, YangStmtMapping.LIST, + YangStmtMapping.LEAF_LIST); private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CASE) + .addAny(YangStmtMapping.CHOICE) .addOptional(YangStmtMapping.CONFIG) .addAny(YangStmtMapping.CONTAINER) .addOptional(YangStmtMapping.DEFAULT) @@ -85,23 +92,30 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) .build(); + private static final ImmutableSet RFC7950_CASE_SHORTHANDS = ImmutableSet.of( + YangStmtMapping.ANYDATA, YangStmtMapping.ANYXML, YangStmtMapping.CHOICE, YangStmtMapping.CONTAINER, + YangStmtMapping.LEAF, YangStmtMapping.LIST, YangStmtMapping.LEAF_LIST); - private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + private final ImmutableSet caseShorthands; + + private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator, + final ImmutableSet caseShorthands) { super(YangStmtMapping.CHOICE, instantiatedPolicy(), config, requireNonNull(validator)); + this.caseShorthands = requireNonNull(caseShorthands); } public static @NonNull ChoiceStatementSupport rfc6020Instance(final YangParserConfiguration config) { - return new ChoiceStatementSupport(config, RFC6020_VALIDATOR); + return new ChoiceStatementSupport(config, RFC6020_VALIDATOR, RFC6020_CASE_SHORTHANDS); } public static @NonNull ChoiceStatementSupport rfc7950Instance(final YangParserConfiguration config) { - return new ChoiceStatementSupport(config, RFC7950_VALIDATOR); + return new ChoiceStatementSupport(config, RFC7950_VALIDATOR, RFC7950_CASE_SHORTHANDS); } @Override public Optional> getImplicitParentFor(final NamespaceStmtCtx parent, final StatementDefinition stmtDef) { - if (!YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmtDef)) { + if (!caseShorthands.contains(stmtDef)) { return Optional.empty(); } return Optional.of(verifyNotNull(parent.getFromNamespace(StatementSupportNamespace.class, @@ -109,8 +123,8 @@ public final class ChoiceStatementSupport } @Override - protected ChoiceStatement createDeclared(@NonNull final StmtContext ctx, - final ImmutableList> substatements) { + protected ChoiceStatement createDeclared(final BoundStmtCtx ctx, + final ImmutableList> substatements) { return DeclaredStatements.createChoice(ctx.getArgument(), substatements); } @@ -124,7 +138,7 @@ public final class ChoiceStatementSupport public ChoiceEffectiveStatement copyEffective(final Current stmt, final ChoiceEffectiveStatement original) { return EffectiveStatements.copyChoice(original, stmt.getArgument(), - computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ChoiceSchemaNode.class)); + computeFlags(stmt, original.effectiveSubstatements())); } @Override @@ -149,12 +163,24 @@ public final class ChoiceStatementSupport try { return EffectiveStatements.createChoice(stmt.declared(), stmt.getArgument(), - computeFlags(stmt, substatements), substatements, defaultCase, stmt.original(ChoiceSchemaNode.class)); + computeFlags(stmt, substatements), substatements, defaultCase); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } } + @Override + public EffectiveStatementState extractEffectiveState(final ChoiceEffectiveStatement stmt) { + verify(stmt instanceof ChoiceSchemaNode, "Unexpected statement %s", stmt); + final var schema = (ChoiceSchemaNode) stmt; + return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder() + .setHistory(schema) + .setStatus(schema.getStatus()) + .setConfiguration(schema.effectiveConfig().orElse(null)) + .setMandatory(schema.isMandatory()) + .toFlags()); + } + private static int computeFlags(final Current stmt, final Collection> substatements) { return new FlagsBuilder()