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%2Feffective%2FLeafListEffectiveStatementImpl.java;h=0209cc4e486b00eddadc9e1f7aa3fa309fcf1e01;hb=refs%2Fchanges%2F08%2F65408%2F7;hp=ae6824f16b29040bf0228b0156c5e1310270795c;hpb=8f2876d895936b36aba1fc3ec65b18900e559184;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java index ae6824f16b..0209cc4e48 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java @@ -15,10 +15,18 @@ import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.MustDefinition; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -26,7 +34,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode - implements LeafListSchemaNode, DerivableSchemaNode { + implements LeafListEffectiveStatement, LeafListSchemaNode, DerivableSchemaNode { private static final String ORDER_BY_USER_KEYWORD = "user"; @@ -34,6 +42,7 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS private final LeafListSchemaNode original; private final boolean userOrdered; private final Set defaultValues; + private final Collection mustConstraints; public LeafListEffectiveStatementImpl( final StmtContext> ctx) { @@ -49,23 +58,24 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS final ImmutableSet.Builder defaultValuesBuilder = ImmutableSet.builder(); boolean isUserOrdered = false; for (final EffectiveStatement stmt : effectiveSubstatements()) { - if (stmt instanceof OrderedByEffectiveStatementImpl) { + if (stmt instanceof OrderedByEffectiveStatement) { isUserOrdered = ORDER_BY_USER_KEYWORD.equals(stmt.argument()); } - if (stmt instanceof DefaultEffectiveStatementImpl) { - defaultValuesBuilder.add(((DefaultEffectiveStatementImpl) stmt).argument()); - } else if (stmt instanceof DescriptionEffectiveStatementImpl) { - builder.setDescription(((DescriptionEffectiveStatementImpl)stmt).argument()); - } else if (stmt instanceof ReferenceEffectiveStatementImpl) { - builder.setReference(((ReferenceEffectiveStatementImpl)stmt).argument()); - } else if (stmt instanceof StatusEffectiveStatementImpl) { - builder.setStatus(((StatusEffectiveStatementImpl)stmt).argument()); - } else if (stmt instanceof UnitsEffectiveStatementImpl) { - builder.setUnits(((UnitsEffectiveStatementImpl)stmt).argument()); + if (stmt instanceof DefaultEffectiveStatement) { + defaultValuesBuilder.add(((DefaultEffectiveStatement) stmt).argument()); + } else if (stmt instanceof DescriptionEffectiveStatement) { + builder.setDescription(((DescriptionEffectiveStatement)stmt).argument()); + } else if (stmt instanceof ReferenceEffectiveStatement) { + builder.setReference(((ReferenceEffectiveStatement)stmt).argument()); + } else if (stmt instanceof StatusEffectiveStatement) { + builder.setStatus(((StatusEffectiveStatement)stmt).argument()); + } else if (stmt instanceof UnitsEffectiveStatement) { + builder.setUnits(((UnitsEffectiveStatement)stmt).argument()); } } + // FIXME: We need to interpret the default value in terms of supplied element type defaultValues = defaultValuesBuilder.build(); SourceException.throwIf( TypeUtils.hasDefaultValueMarkedWithIfFeature(ctx.getRootVersion(), typeStmt, defaultValues), @@ -73,8 +83,11 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS "Leaf-list '%s' has one of its default values '%s' marked with an if-feature statement.", ctx.getStatementArgument(), defaultValues); + // FIXME: RFC7950 section 7.7.4: we need to check for min-elements and defaultValues conflict + type = builder.build(); userOrdered = isUserOrdered; + mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class)); } @Override @@ -97,6 +110,11 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS return userOrdered; } + @Override + public Collection getMustConstraints() { + return mustConstraints; + } + @Override public int hashCode() { final int prime = 31;