Peel MustConstraintAware from ConstraintDefinition 08/65408/7
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 10 Nov 2017 12:13:09 +0000 (13:13 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 10 Nov 2017 22:52:57 +0000 (23:52 +0100)
ConstraintDefinition as such is on its way out, remove its proxying
of MustConstraintAware interface, moving it to appropriate SchemaNodes.

Change-Id: I2cc7cb934cd9eb85e38e62fc6a1678cbfc2f3cfa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
36 files changed:
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ConstraintDefinitions.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerSchemaNodes.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/EmptyConstraintDefinition.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/RpcAsContainer.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AnyDataSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AnyXmlSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ConstraintDefinition.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ContainerSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/LeafListSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/LeafSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ListSchemaNode.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SimpleSchemaContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveContainerSchemaNode.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyxmlEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConstraintDefinitionsTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/Bug6871Test.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug5518Test.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/DeviationResolutionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveUsesRefineAndConstraintsTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/GroupingTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MustAndWhenStmtTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserSimpleTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java

index 6d4477add6d0ca0666ccee8dbaf76d33f17c6c44..b05e01caf9e5a89e7179f0932debd9b02214dc99 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.yangtools.yang.data.codec.xml;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import com.google.common.collect.ImmutableSet;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Collection;
@@ -37,6 +38,7 @@ import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
@@ -239,5 +241,10 @@ public class YangModeledAnyXMLDeserializationTest {
             return contentSchema;
         }
 
+        @Override
+        public Collection<MustDefinition> getMustConstraints() {
+            return ImmutableSet.of();
+        }
+
     }
 }
index 1a94ac839274a22b0e2d88bc7c617215c772ab58..1729a6104178eea3f7b90307f0440bcf6a718e5e 100644 (file)
@@ -23,7 +23,6 @@ public final class ConstraintDefinitions {
         final int prime = 31;
         int result = 1;
         result = prime * result + Objects.hashCode(def.getWhenCondition());
-        result = prime * result + Objects.hashCode(def.getMustConstraints());
         result = prime * result + Objects.hashCode(def.getMinElements());
         result = prime * result + Objects.hashCode(def.getMaxElements());
         return result;
@@ -40,9 +39,6 @@ public final class ConstraintDefinitions {
         if (!Objects.equals(def.getWhenCondition(), other.getWhenCondition())) {
             return false;
         }
-        if (!Objects.equals(def.getMustConstraints(), other.getMustConstraints())) {
-            return false;
-        }
         if (!Objects.equals(def.getMinElements(), other.getMinElements())) {
             return false;
         }
@@ -55,7 +51,6 @@ public final class ConstraintDefinitions {
     public static String toString(final ConstraintDefinition def) {
         return MoreObjects.toStringHelper(def).omitNullValues()
                 .add("whenCondition", def.getWhenCondition().orElse(null))
-                .add("mustConstraints", def.getMustConstraints())
                 .add("minElements", def.getMinElements())
                 .add("maxElements", def.getMaxElements()).toString();
     }
index dfc003d47f0fa00ce9ce87f60400a277b8ffd5f4..9833ab2092e5359633d00868bd658e4f9b6edbd1 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -122,6 +123,11 @@ public final class ContainerSchemaNodes {
         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
             return ImmutableList.of();
         }
+
+        @Override
+        public Collection<MustDefinition> getMustConstraints() {
+            return ImmutableList.of();
+        }
     }
 
     private static final class RpcContainerSchemaNode extends AbstractContainerSchemaNode {
index d5d5e9a3038cc32607627d05657899caade26b68..58b4a5ee4c1771968044124782ddfae09d934469 100644 (file)
@@ -7,11 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.data.util;
 
-import com.google.common.collect.ImmutableSet;
 import java.util.Optional;
-import java.util.Set;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 
 /**
@@ -33,11 +30,6 @@ public final class EmptyConstraintDefinition implements ConstraintDefinition {
         return Optional.empty();
     }
 
-    @Override
-    public Set<MustDefinition> getMustConstraints() {
-        return ImmutableSet.of();
-    }
-
     @Override
     public Integer getMinElements() {
         return null;
index 11d4115f34c9847554ff63c09408e7e4cff48dc4..c3eefa46ef705af839f63cca3f78d582b8bcbea5 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -162,4 +163,9 @@ public final class RpcAsContainer implements ContainerSchemaNode {
     public Set<NotificationDefinition> getNotifications() {
         return ImmutableSet.of();
     }
+
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return ImmutableSet.of();
+    }
 }
index 6859ed7f5f3536a11841c5a4b004a46ffbdca293..295fc72dba89cdf609d75795661701d772a3bbd8 100644 (file)
@@ -22,7 +22,7 @@ import java.util.Optional;
  * of this document.
  */
 @Beta
-public interface AnyDataSchemaNode extends DataSchemaNode, MandatoryAware {
+public interface AnyDataSchemaNode extends DataSchemaNode, MandatoryAware, MustConstraintAware {
     /**
      * Schema of data.
      *
index d4768a8c089de50220eaa4e7db5ee46396a36e2c..6b1ef8e2e92913d0388cf11b8c229755985a4b17 100644 (file)
@@ -16,6 +16,6 @@ package org.opendaylight.yangtools.yang.model.api;
  * This interface was modeled according to definition in
  * <a href="https://tools.ietf.org/html/rfc6020#section-7.10">[RFC-6020] The anyxml Statement</a>
  */
-public interface AnyXmlSchemaNode extends DataSchemaNode, MandatoryAware {
+public interface AnyXmlSchemaNode extends DataSchemaNode, MandatoryAware, MustConstraintAware {
 
 }
index 35be486e24dda8469b63ae0adcb2879272102d95..24e1c4a4f7afe4104de88cab638011bb1ef2a0be 100644 (file)
@@ -15,7 +15,7 @@ import javax.annotation.Nullable;
  * YANG element therefore if the constraint doesn't have sense for some element
  * then the method returns <code>null</code> value.
  */
-public interface ConstraintDefinition extends MustConstraintAware, WhenConditionAware {
+public interface ConstraintDefinition extends WhenConditionAware {
     /**
      * Returns the minimum required number of data elements for node where this
      * constraint is specified.
index bb7d8bd5e0f66b330699f898edb4dd5ff3754d50..3142bb1d605d3d707ff7ef7ef63882e8c5b75f49 100644 (file)
@@ -14,7 +14,7 @@ package org.opendaylight.yangtools.yang.model.api;
  * configuration has an explicit meaning.
  */
 public interface ContainerSchemaNode extends DataNodeContainer,
-        AugmentationTarget, DataSchemaNode, NotificationNodeContainer, ActionNodeContainer {
+        AugmentationTarget, DataSchemaNode, NotificationNodeContainer, ActionNodeContainer, MustConstraintAware {
     /**
      * Returns true if this container is marked as presence.
      *
index c78b26b9e7454e15e47e0f436598ea6c74aeacef..1af2d5db2079d49d901679f998fb0e07d936ec08 100644 (file)
@@ -13,7 +13,7 @@ import javax.annotation.Nonnull;
 /**
  * Interface describing YANG 'leaf-list' statement.
  */
-public interface LeafListSchemaNode extends TypedSchemaNode {
+public interface LeafListSchemaNode extends TypedSchemaNode, MustConstraintAware {
     /**
      * YANG 'ordered-by' statement. It defines whether the order of entries
      * within this leaf-list are determined by the user or the system. If not
index 00513411e3dd75d38f56689104585b68fa11ad8f..673da45012ff14a889abdc9adc6678fc20e6c851 100644 (file)
@@ -17,6 +17,6 @@ package org.opendaylight.yangtools.yang.model.api;
  * Since we are presenting the effective model of the world, the information dictated by 'default' and 'units'
  * substatements is captured in the type returned via {@link #getType()}.
  */
-public interface LeafSchemaNode extends TypedSchemaNode, MandatoryAware {
+public interface LeafSchemaNode extends TypedSchemaNode, MandatoryAware, MustConstraintAware {
 
 }
index 84cd1e79212f9f8b5b38bf44443cb5938e289830..c9731e9eda370a73305a69d3675b11d97f3b3f3b 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.common.QName;
  * by the values of the list's keys, if defined.
  */
 public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, DataSchemaNode,
-        NotificationNodeContainer, ActionNodeContainer {
+        NotificationNodeContainer, ActionNodeContainer, MustConstraintAware {
     /**
      * Returns the list of leaf identifiers.
      *
index 71437d4f724ff2d543852893b4ad7dc25ce7302c..c91e35e4ecde4609f9bfd382c6d4496777353439 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.api;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import java.net.URI;
+import java.util.Collection;
 import java.util.Optional;
 import java.util.Set;
 import javax.annotation.Nullable;
@@ -158,4 +159,9 @@ public interface SchemaContext extends ContainerSchemaNode {
     default Optional<String> getReference() {
         return Optional.empty();
     }
+
+    @Override
+    default Collection<MustDefinition> getMustConstraints() {
+        return ImmutableSet.of();
+    }
 }
index 6643876d92fbdf1522faa41ea563a3e3b6e1fc84..9b64a9f8bbd51a7c39998e56a26d491bcbc7bc8d 100644 (file)
  *   <dd>{@link org.opendaylight.yangtools.yang.model.api.Module}
  *
  * <dt>must
- *   <dd>{@link org.opendaylight.yangtools.yang.model.api.ConstraintDefinition#getMustConstraints()}
+ *   <dd>{@link org.opendaylight.yangtools.yang.model.api.MustConstraintAware#getMustConstraints()}
  *   <dd>{@link org.opendaylight.yangtools.yang.model.api.MustDefinition}
  *
  * <dt>namespace
index d9657eab421577018fea10c0b03757ccc38ab8fa..c6cef8f52bebaf841079a0517f7256f1e709f958 100644 (file)
@@ -50,6 +50,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.MustConstraintAware;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
@@ -1745,6 +1746,7 @@ abstract class SchemaContextEmitter {
 
         private void emitContainer(final ContainerSchemaNode child) {
             super.writer.startContainerNode(child.getQName());
+            child.getMustConstraints().forEach(this::emitMust);
             emitConstraints(child.getConstraints());
             // FIXME: BUG-2444: whenNode //:Optional
             // FIXME: BUG-2444: *(ifFeatureNode )
@@ -1761,9 +1763,6 @@ abstract class SchemaContextEmitter {
 
         private void emitConstraints(final ConstraintDefinition constraints) {
             constraints.getWhenCondition().ifPresent(this::emitWhen);
-            for (final MustDefinition mustCondition : constraints.getMustConstraints()) {
-                emitMust(mustCondition);
-            }
         }
 
         private void emitLeaf(final LeafSchemaNode child) {
@@ -1772,7 +1771,7 @@ abstract class SchemaContextEmitter {
             // FIXME: BUG-2444: *(ifFeatureNode )
             emitTypeNode(child.getPath(), child.getType());
             child.getType().getUnits().ifPresent(this::emitUnitsNode);
-            emitMustNodes(child.getConstraints().getMustConstraints());
+            child.getMustConstraints().forEach(this::emitMust);
             child.getType().getDefaultValue().ifPresent(this::emitDefaultNode);
             emitConfigNode(child.isConfiguration());
             emitMandatoryNode(child.isMandatory());
@@ -1790,7 +1789,7 @@ abstract class SchemaContextEmitter {
             emitTypeNode(child.getPath(), child.getType());
             child.getType().getUnits().ifPresent(this::emitUnitsNode);
             // FIXME: BUG-2444: unitsNode /Optional
-            emitMustNodes(child.getConstraints().getMustConstraints());
+            child.getMustConstraints().forEach(this::emitMust);
             emitConfigNode(child.isConfiguration());
             emitDefaultNodes(child.getDefaults());
             emitMinElementsNode(child.getConstraints().getMinElements());
@@ -1807,7 +1806,7 @@ abstract class SchemaContextEmitter {
             child.getConstraints().getWhenCondition().ifPresent(this::emitWhen);
 
             // FIXME: BUG-2444: *(ifFeatureNode )
-            emitMustNodes(child.getConstraints().getMustConstraints());
+            child.getMustConstraints().forEach(this::emitMust);
             emitKey(child.getKeyDefinition());
             emitUniqueConstraints(child.getUniqueConstraints());
             emitConfigNode(child.isConfiguration());
@@ -1823,12 +1822,6 @@ abstract class SchemaContextEmitter {
 
         }
 
-        private void emitMustNodes(final Collection<MustDefinition> mustConstraints) {
-            for (final MustDefinition must : mustConstraints) {
-                emitMust(must);
-            }
-        }
-
         private void emitKey(final List<QName> keyList) {
             if (keyList != null && !keyList.isEmpty()) {
                 super.writer.startKeyNode(keyList);
@@ -1892,7 +1885,9 @@ abstract class SchemaContextEmitter {
         private void emitBodyOfDataSchemaNode(final DataSchemaNode dataSchemaNode) {
             dataSchemaNode.getConstraints().getWhenCondition().ifPresent(this::emitWhen);
             // FIXME: BUG-2444: *(ifFeatureNode )
-            emitMustNodes(dataSchemaNode.getConstraints().getMustConstraints());
+            if (dataSchemaNode instanceof MustConstraintAware) {
+                ((MustConstraintAware) dataSchemaNode).getMustConstraints().forEach(this::emitMust);
+            }
             emitConfigNode(dataSchemaNode.isConfiguration());
             emitDocumentedNode(dataSchemaNode);
             emitUnknownStatementNodes(dataSchemaNode.getUnknownSchemaNodes());
@@ -2168,7 +2163,7 @@ abstract class SchemaContextEmitter {
         private void emitInput(@Nonnull final ContainerSchemaNode input) {
             if (isExplicitStatement(input)) {
                 super.writer.startInputNode();
-                emitConstraints(input.getConstraints());
+                input.getMustConstraints().forEach(this::emitMust);
                 emitDataNodeContainer(input);
                 emitUnknownStatementNodes(input.getUnknownSchemaNodes());
                 super.writer.endNode();
@@ -2179,7 +2174,7 @@ abstract class SchemaContextEmitter {
         private void emitOutput(@Nonnull final ContainerSchemaNode output) {
             if (isExplicitStatement(output)) {
                 super.writer.startOutputNode();
-                emitConstraints(output.getConstraints());
+                output.getMustConstraints().forEach(this::emitMust);
                 emitDataNodeContainer(output);
                 emitUnknownStatementNodes(output.getUnknownSchemaNodes());
                 super.writer.endNode();
index 0968726442fcadbc9ecfcc0afb0aa3e583135493..878d9016ed3bdb046a9db601bf0310a991234c69 100644 (file)
@@ -71,16 +71,6 @@ public class SimpleSchemaContext extends AbstractSchemaContext {
         return modules;
     }
 
-    @Override
-    public final String toString() {
-        return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
-    }
-
-    protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("modules", modules);
-    }
-
-
     @Override
     protected final SetMultimap<URI, Module> getNamespaceToModules() {
         return namespaceToModules;
@@ -90,4 +80,13 @@ public class SimpleSchemaContext extends AbstractSchemaContext {
     protected final SetMultimap<String, Module> getNameToModules() {
         return nameToModules;
     }
+
+    @Override
+    public final String toString() {
+        return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
+    }
+
+    protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+        return toStringHelper.add("modules", modules);
+    }
 }
index e0fe76f782cce066b0b02601ee35b228e1946bbd..82009ed2aadb37c5add95087541ed4054c8d070e 100644 (file)
@@ -9,12 +9,15 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
@@ -29,6 +32,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AbstractEff
 final class AnydataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnydataStatement>
         implements AnydataEffectiveStatement, AnyDataSchemaNode, DerivableSchemaNode {
 
+    private final Collection<MustDefinition> mustConstraints;
     private final AnyDataSchemaNode original;
     private final ContainerSchemaNode schema;
     private final boolean mandatory;
@@ -39,6 +43,7 @@ final class AnydataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNod
         this.original = (AnyDataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
         final MandatoryEffectiveStatement mandatoryStmt = firstEffective(MandatoryEffectiveStatement.class);
         mandatory = mandatoryStmt == null ? false : mandatoryStmt.argument().booleanValue();
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
 
         /*
          * :TODO we need to determine a way how to set schema of AnyData
@@ -61,6 +66,11 @@ final class AnydataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNod
         return mandatory;
     }
 
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(getQName(),getPath());
index ec21e16eb060e223ef77d983cea201f24adb164f..6a6e17e09de9369315181f7d55d0f721501d37a4 100644 (file)
@@ -7,24 +7,25 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 abstract class AbstractEffectiveContainerSchemaNode<D extends DeclaredStatement<QName>> extends
         AbstractEffectiveSimpleDataNodeContainer<D> implements ContainerSchemaNode {
-
-    private final boolean presence;
+    private final Collection<MustDefinition> mustConstraints;
 
     AbstractEffectiveContainerSchemaNode(final StmtContext<QName, D, ?> ctx) {
         super(ctx);
-        this.presence = firstEffective(PresenceEffectiveStatement.class) != null;
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
     }
 
     @Override
-    public boolean isPresenceContainer() {
-        return presence;
+    public final Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
     }
 }
index 3e3c8fd5078f764d279174257c2643679204debf..5464128211a2765cb76679a6177bf3882f3538d2 100644 (file)
@@ -7,11 +7,14 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
@@ -21,6 +24,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 public class AnyxmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnyxmlStatement>
         implements AnyxmlEffectiveStatement, AnyXmlSchemaNode, DerivableSchemaNode {
 
+    private final Collection<MustDefinition> mustConstraints;
     private final AnyXmlSchemaNode original;
     private final boolean mandatory;
 
@@ -30,6 +34,7 @@ public class AnyxmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNod
         this.original = (AnyXmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
         final MandatoryEffectiveStatement mandatoryStmt = firstEffective(MandatoryEffectiveStatement.class);
         mandatory = mandatoryStmt == null ? false : mandatoryStmt.argument().booleanValue();
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
     }
 
     @Override
@@ -37,6 +42,11 @@ public class AnyxmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNod
         return mandatory;
     }
 
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
+    }
+
     @Override
     public Optional<AnyXmlSchemaNode> getOriginal() {
         return Optional.ofNullable(original);
index d819f85fa41650be7aa250f1a68d89c1e141dc11..1c50d45959f8e1bf71b07ab5014f2f12fe0bb4e1 100644 (file)
@@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 public final class ContainerEffectiveStatementImpl extends AbstractEffectiveContainerSchemaNode<ContainerStatement>
@@ -27,6 +28,7 @@ public final class ContainerEffectiveStatementImpl extends AbstractEffectiveCont
     private final Set<ActionDefinition> actions;
     private final Set<NotificationDefinition> notifications;
     private final ContainerSchemaNode original;
+    private final boolean presence;
 
     public ContainerEffectiveStatementImpl(
             final StmtContext<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> ctx) {
@@ -46,6 +48,7 @@ public final class ContainerEffectiveStatementImpl extends AbstractEffectiveCont
 
         this.actions = actionsBuilder.build();
         this.notifications = notificationsBuilder.build();
+        presence = firstEffective(PresenceEffectiveStatement.class) != null;
     }
 
     @Override
@@ -63,6 +66,11 @@ public final class ContainerEffectiveStatementImpl extends AbstractEffectiveCont
         return notifications;
     }
 
+    @Override
+    public boolean isPresenceContainer() {
+        return presence;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index ed0cb2889101cc618d30757b0d3b07a4b821040f..cc493b18b44c795cda873df9bab29a9d414ee6c4 100644 (file)
@@ -7,15 +7,10 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.collect.ImmutableSet;
 import java.util.Optional;
-import java.util.Set;
 import org.opendaylight.yangtools.yang.data.util.ConstraintDefinitions;
 import org.opendaylight.yangtools.yang.data.util.EmptyConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement;
@@ -26,16 +21,14 @@ final class EffectiveConstraintDefinitionImpl implements ConstraintDefinition {
     private static final String UNBOUNDED_STR = "unbounded";
 
     private final RevisionAwareXPath whenCondition;
-    private final Set<MustDefinition> mustConstraints;
     private final Integer minElements;
     private final Integer maxElements;
 
     private EffectiveConstraintDefinitionImpl(final Integer minElements, final Integer maxElements,
-            final RevisionAwareXPath whenCondition, final Set<MustDefinition> mustConstraints) {
+            final RevisionAwareXPath whenCondition) {
         this.minElements = minElements;
         this.maxElements = maxElements;
         this.whenCondition = whenCondition;
-        this.mustConstraints = requireNonNull(mustConstraints);
     }
 
     static ConstraintDefinition forParent(final EffectiveStatementBase<?, ?> parent) {
@@ -60,17 +53,15 @@ final class EffectiveConstraintDefinitionImpl implements ConstraintDefinition {
             maxElements = null;
         }
 
-        final Set<MustDefinition> mustSubstatements = ImmutableSet.copyOf(parent.allSubstatementsOfType(
-            MustDefinition.class));
         final WhenEffectiveStatement firstWhenStmt = parent.firstEffective(WhenEffectiveStatement.class);
 
         // Check for singleton instances
-        if (minElements == null && maxElements == null && mustSubstatements.isEmpty() && firstWhenStmt == null) {
+        if (minElements == null && maxElements == null && firstWhenStmt == null) {
             return EmptyConstraintDefinition.getInstance();
         }
 
         return new EffectiveConstraintDefinitionImpl(minElements, maxElements,
-            firstWhenStmt == null ? null : firstWhenStmt.argument(), mustSubstatements);
+            firstWhenStmt == null ? null : firstWhenStmt.argument());
     }
 
     @Override
@@ -78,11 +69,6 @@ final class EffectiveConstraintDefinitionImpl implements ConstraintDefinition {
         return Optional.ofNullable(whenCondition);
     }
 
-    @Override
-    public Set<MustDefinition> getMustConstraints() {
-        return mustConstraints;
-    }
-
     @Override
     public Integer getMinElements() {
         return minElements;
index eeeb51604356cd87a0d5550f229b002d369d6ccb..3fee5c04dcdfd467146f851ae1e7543c4cc789c9 100644 (file)
@@ -36,6 +36,12 @@ public final class InputEffectiveStatementImpl extends AbstractEffectiveContaine
         return ImmutableSet.of();
     }
 
+    @Override
+    public boolean isPresenceContainer() {
+        // FIXME: this should not really be here
+        return false;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index 1f8140246ccfce14e1baaf3761d08fe987d7e8a8..e61fb000b1600454b2e08f128136bbf3a821a107 100644 (file)
@@ -7,11 +7,14 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+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;
@@ -31,6 +34,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
 
 public final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<LeafStatement>
         implements LeafEffectiveStatement, LeafSchemaNode, DerivableSchemaNode {
+    private final Collection<MustDefinition> mustConstraints;
     private final LeafSchemaNode original;
     private final TypeDefinition<?> type;
     private final String defaultStr;
@@ -76,6 +80,7 @@ public final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchem
         type = builder.build();
         final MandatoryEffectiveStatement mandatoryStmt = firstEffective(MandatoryEffectiveStatement.class);
         mandatory = mandatoryStmt == null ? false : mandatoryStmt.argument().booleanValue();
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
     }
 
     @Override
@@ -93,6 +98,11 @@ public final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchem
         return type;
     }
 
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index 8a81f884d35658110ea092f8f29c5d1be9e0cb10..0209cc4e486b00eddadc9e1f7aa3fa309fcf1e01 100644 (file)
@@ -15,6 +15,7 @@ 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;
@@ -41,6 +42,7 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS
     private final LeafListSchemaNode original;
     private final boolean userOrdered;
     private final Set<String> defaultValues;
+    private final Collection<MustDefinition> mustConstraints;
 
     public LeafListEffectiveStatementImpl(
             final StmtContext<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> ctx) {
@@ -85,6 +87,7 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS
 
         type = builder.build();
         userOrdered = isUserOrdered;
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
     }
 
     @Override
@@ -107,6 +110,11 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS
         return userOrdered;
     }
 
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index e7f02e55fc0399fcf8043fdbc2acf60309c74a85..a3f2e3a15dbea9a650d40f6e45253510693720b2 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -44,6 +45,7 @@ public final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDat
     private final Set<ActionDefinition> actions;
     private final Set<NotificationDefinition> notifications;
     private final Collection<UniqueConstraint> uniqueConstraints;
+    private final Collection<MustDefinition> mustConstraints;
 
     public ListEffectiveStatementImpl(
             final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
@@ -96,6 +98,7 @@ public final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDat
 
         this.actions = actionsBuilder.build();
         this.notifications = notificationsBuilder.build();
+        mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
     }
 
     @Override
@@ -129,6 +132,11 @@ public final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDat
         return userOrdered;
     }
 
+    @Override
+    public Collection<MustDefinition> getMustConstraints() {
+        return mustConstraints;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index bb3739efee52b1e67880ce1efa43946ddcf3d07e..cc41b9a5c42f52ee9ed787a3d70ad05f1c473ca6 100644 (file)
@@ -36,6 +36,12 @@ public final class OutputEffectiveStatementImpl extends AbstractEffectiveContain
         return ImmutableSet.of();
     }
 
+    @Override
+    public boolean isPresenceContainer() {
+        // FIXME: this should not really be here
+        return false;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
index fb5281ef44a43b4e3a4c25f3bc9a9c8540c975b6..a42772d856eec5d44661e305c48db1ff673da389 100644 (file)
@@ -78,10 +78,6 @@ public class ConstraintDefinitionsTest {
         final LeafSchemaNode mandatoryLeaf5 = (LeafSchemaNode) testModule.getDataChildByName(
                 QName.create(testModule.getQNameModule(), "mandatory-leaf-5"));
         assertNotNull(mandatoryLeaf5);
-        final ConstraintDefinition constraints5 = mandatoryLeaf5.getConstraints();
-
-        assertNotEquals(ConstraintDefinitions.hashCode(constraints4), ConstraintDefinitions.hashCode(constraints5));
-        assertFalse(ConstraintDefinitions.equals(constraints4, constraints5));
 
         final LeafListSchemaNode constrainedLeafList1 = (LeafListSchemaNode) testModule.getDataChildByName(
                 QName.create(testModule.getQNameModule(), "constrained-leaf-list-1"));
@@ -113,7 +109,7 @@ public class ConstraintDefinitionsTest {
         assertFalse(ConstraintDefinitions.equals(constraints3, constraints4));
 
         final String constraintsString = ConstraintDefinitions.toString(constraints4);
-        assertEquals("EffectiveConstraintDefinitionImpl{whenCondition=foo = 'bar', mustConstraints=[bar != 'foo'], "
-                + "minElements=50, maxElements=100}", constraintsString);
+        assertEquals("EffectiveConstraintDefinitionImpl{whenCondition=foo = 'bar', minElements=50, maxElements=100}",
+            constraintsString);
     }
 }
\ No newline at end of file
index 46a6be1940b102bbf3873e483668f5270460235d..197e47ac2f89999477c461923b6e2ace808093b2 100644 (file)
@@ -47,12 +47,12 @@ public class Bug6871Test {
 
         final ContainerSchemaNode input = myRpc.getInput();
         assertNotNull(input);
-        mustConstraints = input.getConstraints().getMustConstraints();
+        mustConstraints = input.getMustConstraints();
         assertEquals(2, mustConstraints.size());
 
         final ContainerSchemaNode output = myRpc.getOutput();
         assertNotNull(output);
-        mustConstraints = output.getConstraints().getMustConstraints();
+        mustConstraints = output.getMustConstraints();
         assertEquals(2, mustConstraints.size());
     }
 
index a299e0f2924c932765df054dea13637d19dc58ac..316f99958fd72677fcbb0616defdf0fafa7beff2 100644 (file)
@@ -28,7 +28,7 @@ public class Bug5518Test {
         final DataSchemaNode dataChildByName = context.getDataChildByName(QName.create("foo", "root"));
         assertTrue(dataChildByName instanceof ContainerSchemaNode);
         final ContainerSchemaNode root = (ContainerSchemaNode) dataChildByName;
-        final Collection<MustDefinition> mustConstraints = root.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> mustConstraints = root.getMustConstraints();
         assertEquals(1, mustConstraints.size());
         final MustDefinition must = mustConstraints.iterator().next();
         assertEquals("not(deref(.)/../same-pass)", must.getXpath().toString());
index 397bb51a2e586d520906621d01ca4a068568315d..ee6976dd58a57e8edd32d91d8796a030551405bb 100644 (file)
@@ -96,9 +96,9 @@ public class DeviationResolutionTest {
 
         final RpcDefinition myRpc = barModule.getRpcs().iterator().next();
         final ContainerSchemaNode input = myRpc.getInput();
-        assertEquals(2, input.getConstraints().getMustConstraints().size());
+        assertEquals(2, input.getMustConstraints().size());
         final ContainerSchemaNode output = myRpc.getOutput();
-        assertEquals(2, output.getConstraints().getMustConstraints().size());
+        assertEquals(2, output.getMustConstraints().size());
 
         final NotificationDefinition myNotification = barModule.getNotifications().iterator().next();
         assertEquals(2, myNotification.getMustConstraints().size());
@@ -188,7 +188,7 @@ public class DeviationResolutionTest {
         assertNotNull(myLeafList);
 
         assertEquals(0, myLeafList.getDefaults().size());
-        assertEquals(0, myLeafList.getConstraints().getMustConstraints().size());
+        assertEquals(0, myLeafList.getMustConstraints().size());
 
         final ListSchemaNode myList = (ListSchemaNode) barModule.getDataChildByName(
                 QName.create(barModule.getQNameModule(), "my-list"));
@@ -206,7 +206,7 @@ public class DeviationResolutionTest {
         assertNotNull(myAugLeaf);
         assertEquals(Optional.empty(), myAugLeaf.getType().getDefaultValue());
         assertEquals(Optional.empty(), myAugLeaf.getType().getUnits());
-        assertEquals(0, myAugLeaf.getConstraints().getMustConstraints().size());
+        assertEquals(0, myAugLeaf.getMustConstraints().size());
         assertEquals(0, myAugLeaf.getUnknownSchemaNodes().size());
 
         final LeafSchemaNode myUsedLeaf = (LeafSchemaNode) myCont.getDataChildByName(
@@ -214,7 +214,7 @@ public class DeviationResolutionTest {
         assertNotNull(myUsedLeaf);
         assertEquals(Optional.empty(), myUsedLeaf.getType().getDefaultValue());
         assertEquals(Optional.empty(), myUsedLeaf.getType().getUnits());
-        assertEquals(0, myUsedLeaf.getConstraints().getMustConstraints().size());
+        assertEquals(0, myUsedLeaf.getMustConstraints().size());
         assertEquals(0, myUsedLeaf.getUnknownSchemaNodes().size());
     }
 
index d65bc5a60f92529d0c6697911610279855dd501b..0c7dc38e888051a988da3eeab7e319c24b9b6ab9 100644 (file)
@@ -86,8 +86,7 @@ public class EffectiveUsesRefineAndConstraintsTest {
         assertTrue(containerSchemaNode.isConfiguration());
         assertFalse(containerSchemaNode.isPresenceContainer());
 
-        ConstraintDefinition containerConstraints = containerSchemaNode.getConstraints();
-        assertEquals(0, containerConstraints.getMustConstraints().size());
+        assertEquals(0, containerSchemaNode.getMustConstraints().size());
     }
 
     private static void checkOriginalChoice(final SchemaContext result, final SchemaPath path) {
@@ -96,9 +95,6 @@ public class EffectiveUsesRefineAndConstraintsTest {
 
         ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
         assertFalse(choiceSchemaNode.isMandatory());
-
-        ConstraintDefinition choiceConstraints = choiceSchemaNode.getConstraints();
-        assertTrue(choiceConstraints.getMustConstraints().isEmpty());
     }
 
     private static void checkOriginalList(final SchemaContext result, final SchemaPath path) {
@@ -113,7 +109,7 @@ public class EffectiveUsesRefineAndConstraintsTest {
         ConstraintDefinition listConstraints = listSchemaNode.getConstraints();
         assertEquals(10, listConstraints.getMinElements().intValue());
         assertEquals(20, listConstraints.getMaxElements().intValue());
-        assertEquals(1, listConstraints.getMustConstraints().size());
+        assertEquals(1, listSchemaNode.getMustConstraints().size());
     }
 
     private static void checkRefinedContainer(final SchemaContext result, final SchemaPath path) {
@@ -125,9 +121,7 @@ public class EffectiveUsesRefineAndConstraintsTest {
         assertEquals(Optional.of("new description"), containerSchemaNode.getDescription());
         assertTrue(containerSchemaNode.isConfiguration());
         assertTrue(containerSchemaNode.isPresenceContainer());
-
-        ConstraintDefinition containerConstraints = containerSchemaNode.getConstraints();
-        assertEquals(1, containerConstraints.getMustConstraints().size());
+        assertEquals(1, containerSchemaNode.getMustConstraints().size());
     }
 
     private static void checkRefinedChoice(final SchemaContext result, final SchemaPath path) {
@@ -136,9 +130,6 @@ public class EffectiveUsesRefineAndConstraintsTest {
 
         ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
         assertTrue(choiceSchemaNode.isMandatory());
-
-        ConstraintDefinition choiceConstraints = choiceSchemaNode.getConstraints();
-        assertTrue(choiceConstraints.getMustConstraints().isEmpty());
     }
 
     private static void checkRefinedList(final SchemaContext result, final SchemaPath path) {
@@ -153,6 +144,6 @@ public class EffectiveUsesRefineAndConstraintsTest {
         ConstraintDefinition listConstraints = listSchemaNode.getConstraints();
         assertEquals(5, listConstraints.getMinElements().intValue());
         assertEquals(7, listConstraints.getMaxElements().intValue());
-        assertEquals(2, listConstraints.getMustConstraints().size());
+        assertEquals(2, listSchemaNode.getMustConstraints().size());
     }
 }
index 5ce28716878d721dfb864075791acadc5abdabb5..ffc1dd4a6dd0637c2a73fdb860e52414a62fb1ea 100644 (file)
@@ -104,7 +104,7 @@ public class GroupingTest {
         assertEquals(Optional.of("address reference added by refine"), refineLeaf.getReference());
         assertFalse(refineLeaf.isConfiguration());
         assertFalse(refineLeaf.isMandatory());
-        final Collection<MustDefinition> leafMustConstraints = refineLeaf.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> leafMustConstraints = refineLeaf.getMustConstraints();
         assertEquals(1, leafMustConstraints.size());
         final MustDefinition leafMust = leafMustConstraints.iterator().next();
         assertEquals("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)", leafMust.toString());
@@ -112,7 +112,7 @@ public class GroupingTest {
 
         // container port
         assertNotNull(refineContainer);
-        final Collection<MustDefinition> mustConstraints = refineContainer.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> mustConstraints = refineContainer.getMustConstraints();
         assertTrue(mustConstraints.isEmpty());
         assertEquals(Optional.of("description of port defined by refine"), refineContainer.getDescription());
         assertEquals(Optional.of("port reference added by refine"), refineContainer.getReference());
index 4fecbad377f656ae8a12e9cc15c0b31024670d98..aacbb46a093c87f8e36a9b0c49cc09fe91dc4823 100644 (file)
@@ -44,7 +44,7 @@ public class MustAndWhenStmtTest {
         assertNotNull(container);
         assertTrue(container.isPresenceContainer());
 
-        final Collection<MustDefinition> musts = container.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> musts = container.getMustConstraints();
         assertEquals(2, musts.size());
 
         final Iterator<MustDefinition> mustsIterator = musts.iterator();
index bff629f781dfb063a8e83a27f2c881ff128b272b..a827ebf5ddf120df4e02540ae263400e34b3345f 100644 (file)
@@ -76,8 +76,8 @@ public class YangParserSimpleTest {
         assertTrue(data.isMandatory());
         final ConstraintDefinition constraints = data.getConstraints();
         assertEquals("class != 'wheel'", constraints.getWhenCondition().get().toString());
-        final Collection<MustDefinition> mustConstraints = constraints.getMustConstraints();
-        assertEquals(2, constraints.getMustConstraints().size());
+        final Collection<MustDefinition> mustConstraints = data.getMustConstraints();
+        assertEquals(2, mustConstraints.size());
 
         final String must1 = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
         final String must2 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
@@ -121,8 +121,8 @@ public class YangParserSimpleTest {
         // constraints
         final ConstraintDefinition constraints = nodes.getConstraints();
         assertEquals("class != 'wheel'", constraints.getWhenCondition().get().toString());
-        final Collection<MustDefinition> mustConstraints = constraints.getMustConstraints();
-        assertEquals(2, constraints.getMustConstraints().size());
+        final Collection<MustDefinition> mustConstraints = nodes.getMustConstraints();
+        assertEquals(2, mustConstraints.size());
 
         final String must1 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
         final String errMsg1 = "An atm MTU must be  64 .. 17966";
index cac44d56546103444a9e1041ff3df07cf3314411..db05eecda78f13915fe1993a5fbb5ee1c9acc9ac 100644 (file)
@@ -139,7 +139,7 @@ public class YangParserTest {
         // :TODO augment to ifEntry have when condition and so in consequence
         // ifEntry should be a context node ?
         // assertNull(constraints.getWhenCondition());
-        assertEquals(0, constraints.getMustConstraints().size());
+        assertEquals(0, ifEntry.getMustConstraints().size());
         assertEquals(1, (int) constraints.getMinElements());
         assertEquals(11, (int) constraints.getMaxElements());
         // test AugmentationTarget args
index 71cdf653009be1d05c0cf26b57c337ba4ccc82b2..cd33162e9a8687dd99b7bdddcc90c458f8c773ea 100644 (file)
@@ -253,14 +253,14 @@ public class YangParserWithContextTest {
         assertEquals(Optional.of("address reference added by refine"), refineLeaf.getReference());
         assertFalse(refineLeaf.isConfiguration());
         assertTrue(refineLeaf.isMandatory());
-        final Collection<MustDefinition> leafMustConstraints = refineLeaf.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> leafMustConstraints = refineLeaf.getMustConstraints();
         assertEquals(1, leafMustConstraints.size());
         final MustDefinition leafMust = leafMustConstraints.iterator().next();
         assertEquals("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)", leafMust.toString());
 
         // container port
         assertNotNull(refineContainer);
-        final Collection<MustDefinition> mustConstraints = refineContainer.getConstraints().getMustConstraints();
+        final Collection<MustDefinition> mustConstraints = refineContainer.getMustConstraints();
         assertTrue(mustConstraints.isEmpty());
         assertEquals(Optional.of("description of port defined by refine"), refineContainer.getDescription());
         assertEquals(Optional.of("port reference added by refine"), refineContainer.getReference());