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%2Ftype%2FInstanceIdentifierSpecificationSupport.java;h=f30af56c5695cdffc4a0da6c82a0f4887dc1cfe2;hb=d605800fa3da3ea340497c683bd83ea37c12da6c;hp=be40ac355a6e8e6cec466e91be9d2b99a9dff9e7;hpb=19efe56f8f20f5692a100e765a581fbc8f0b4aca;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java index be40ac355a..f30af56c56 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java @@ -7,44 +7,57 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.common.QName; 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.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; +import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.ri.type.InstanceIdentifierTypeBuilder; +import org.opendaylight.yangtools.yang.model.ri.type.RestrictedTypes; +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.SubstatementValidator; -final class InstanceIdentifierSpecificationSupport extends AbstractStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .build(); +final class InstanceIdentifierSpecificationSupport + extends AbstractTypeSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE).addOptional(YangStmtMapping.REQUIRE_INSTANCE).build(); - InstanceIdentifierSpecificationSupport() { - super(YangStmtMapping.TYPE); + InstanceIdentifierSpecificationSupport(final YangParserConfiguration config) { + super(config); } @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - public InstanceIdentifierSpecification createDeclared( - final StmtContext ctx) { - return new InstanceIdentifierSpecificationImpl(ctx); + protected InstanceIdentifierSpecification createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return substatements.isEmpty() ? new EmptyIdentifierSpecification(ctx.getRawArgument(), ctx.getArgument()) + : new RegularInstanceIdentifierSpecification(ctx.getRawArgument(), ctx.getArgument(), substatements); } @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new InstanceIdentifierSpecificationEffectiveStatement(ctx); - } + protected EffectiveStatement createEffective( + final Current stmt, + final ImmutableList> substatements) { + final InstanceIdentifierTypeBuilder builder = RestrictedTypes.newInstanceIdentifierBuilder( + BaseTypes.instanceIdentifierType(), stmt.argumentAsTypeQName()); - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + // TODO: we could do better here for empty substatements, but its really splitting hairs + for (EffectiveStatement subStmt : substatements) { + if (subStmt instanceof RequireInstanceEffectiveStatement) { + builder.setRequireInstance(((RequireInstanceEffectiveStatement)subStmt).argument()); + } + } + + return new TypeEffectiveStatementImpl<>(stmt.declared(), substatements, builder); } } \ No newline at end of file