From ba7ac6117e49070fd78d50f6af7b8e65d8046424 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 23 Oct 2015 10:51:29 +0200 Subject: [PATCH] Lists with min-elements > 0 are mandatory As per https://tools.ietf.org/html/rfc6020#section-3.1, leaf-list and list items which have min-elements greater than zero are considered mandatory. Adjust ConstrainDefinition implementations to take min-elements into account and report isMandatory() as true in case it is non-zero. Change-Id: I7d7a0c15ce26bab2eed5bc2569cc6b8904dac203 Signed-off-by: Robert Varga --- .../yang/parser/builder/impl/ConstraintsBuilderImpl.java | 3 +++ .../effective/EffectiveConstraintDefinitionImpl.java | 8 ++++---- .../yangtools/yang/parser/impl/YangParserTest.java | 2 +- .../yangtools/yang/stmt/retest/YangParserTest.java | 2 +- .../opendaylight/yangtools/yang/stmt/test/ListTest.java | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ConstraintsBuilderImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ConstraintsBuilderImpl.java index da26783d4a..8db7ed9311 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ConstraintsBuilderImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ConstraintsBuilderImpl.java @@ -240,6 +240,9 @@ public final class ConstraintsBuilderImpl implements ConstraintsBuilder { private void setMinElements(final Integer minElements) { this.minElements = minElements; + if (minElements != null && minElements > 0) { + mandatory = true; + } } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java index fe08d30333..1c4032cebc 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java @@ -24,10 +24,6 @@ public final class EffectiveConstraintDefinitionImpl implements ConstraintDefini public EffectiveConstraintDefinitionImpl(final EffectiveStatementBase parent) { - MandatoryEffectiveStatementImpl firstMandatoryStmt = parent - .firstEffective(MandatoryEffectiveStatementImpl.class); - this.mandatory = (firstMandatoryStmt == null) ? false : firstMandatoryStmt.argument(); - WhenEffectiveStatementImpl firstWhenStmt = parent.firstEffective(WhenEffectiveStatementImpl.class); this.whenCondition = (firstWhenStmt == null) ? null : firstWhenStmt.argument(); @@ -44,6 +40,10 @@ public final class EffectiveConstraintDefinitionImpl implements ConstraintDefini this.maxElements = Integer.valueOf(maxElementsArg); } + MandatoryEffectiveStatementImpl firstMandatoryStmt = parent + .firstEffective(MandatoryEffectiveStatementImpl.class); + this.mandatory = (firstMandatoryStmt == null) ? minElements > 0 : firstMandatoryStmt.argument(); + Collection mustSubstatements = parent.allSubstatementsOfType(MustDefinition.class); this.mustConstraints = ImmutableSet.copyOf(mustSubstatements); } diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java index 6a9c42397b..ea910c6211 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java @@ -146,7 +146,7 @@ public class YangParserTest { ConstraintDefinition constraints = ifEntry.getConstraints(); assertNull(constraints.getWhenCondition()); assertEquals(0, constraints.getMustConstraints().size()); - assertFalse(constraints.isMandatory()); + assertTrue(constraints.isMandatory()); assertEquals(1, (int) constraints.getMinElements()); assertEquals(11, (int) constraints.getMaxElements()); // test AugmentationTarget args diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/retest/YangParserTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/retest/YangParserTest.java index 7e652bf1a9..ee19e26915 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/retest/YangParserTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/retest/YangParserTest.java @@ -147,7 +147,7 @@ public class YangParserTest { // ifEntry should be a context node ? // assertNull(constraints.getWhenCondition()); assertEquals(0, constraints.getMustConstraints().size()); - assertFalse(constraints.isMandatory()); + assertTrue(constraints.isMandatory()); assertEquals(1, (int) constraints.getMinElements()); assertEquals(11, (int) constraints.getMaxElements()); // test AugmentationTarget args diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/ListTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/ListTest.java index e3bec10f41..edb33fc023 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/ListTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/ListTest.java @@ -81,7 +81,7 @@ public class ListTest { LeafListSchemaNode leafList = (LeafListSchemaNode) list.getDataChildByName("list-of-leaves"); assertNotNull(leafList); - assertFalse(leafList.getConstraints().isMandatory()); + assertTrue(leafList.getConstraints().isMandatory()); assertTrue(leafList.isUserOrdered()); assertEquals(2, leafList.getConstraints().getMinElements().intValue()); assertEquals(20, leafList.getConstraints().getMaxElements().intValue()); -- 2.36.6