Lists with min-elements > 0 are mandatory 22/28722/3
authorRobert Varga <rovarga@cisco.com>
Fri, 23 Oct 2015 08:51:29 +0000 (10:51 +0200)
committerRobert Varga <rovarga@cisco.com>
Sat, 24 Oct 2015 15:24:32 +0000 (17:24 +0200)
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 <rovarga@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ConstraintsBuilderImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/retest/YangParserTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/ListTest.java

index da26783d4a8cfa63accda5f0ceccf5fe91ebf6c7..8db7ed9311606b80170afa5570d3ae92e1d890a2 100644 (file)
@@ -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
index fe08d30333f02ba8fd0297360e104ce5d00dd959..1c4032cebc5bbf3142c8d1fcd3fe836d0936b422 100644 (file)
@@ -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<MustDefinition> mustSubstatements = parent.allSubstatementsOfType(MustDefinition.class);
         this.mustConstraints = ImmutableSet.copyOf(mustSubstatements);
     }
index 6a9c42397bf2bdb55d136a6c0700b4a4c9495e77..ea910c62115d202478bb60b4b6e5bcc6f1abb410 100644 (file)
@@ -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
index 7e652bf1a984b153351a32e52b168ec6c28ba210..ee19e26915d7d5bef65dab9cd8ff741d83121b34 100644 (file)
@@ -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
index e3bec10f411ca0eaabe289accdca0f3725dc4047..edb33fc023d6fba12f701f713d6169c5630f389f 100644 (file)
@@ -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());