Replace UniqueConstraint with UniqueEffectiveStatement 94/92894/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Oct 2020 20:19:38 +0000 (22:19 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Oct 2020 20:48:24 +0000 (22:48 +0200)
As noted in the FIXME, this @Beta class has served its purpose.
Rather than bridging it, perform a direct replacement with
UniqueEffectiveStatement.

JIRA: YANGTOOLS-1119
Change-Id: I022f940b859224a58b5d706fa5a63e8acd7f6c5a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DeviateDefinition.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/UniqueConstraint.java [deleted file]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/UniqueEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/EmptyUniqueEffectiveStatement.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug5946Test.java

index 54034d5244e3aac5c087e86137c7997b1e7edddc..6ba7c7c77c9ee3609c60a71e2a115e38f7ada1d3 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.api;
 import com.google.common.annotations.Beta;
 import java.util.Collection;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 
 /**
  * Interface describing YANG 'deviate' statement.
@@ -82,7 +83,7 @@ public interface DeviateDefinition extends EffectiveStatementEquivalent<DeviateE
      *
      * @return collection of the deviated unique statements
      */
-    Collection<? extends UniqueConstraint> getDeviatedUniques();
+    Collection<? extends UniqueEffectiveStatement> getDeviatedUniques();
 
     /**
      * Returns deviated units statement.
index d8604585641ffe31dc9919d58658ecd63cf47f98..a9627ba099704f4babef6d02f7dd8755809ae59a 100644 (file)
@@ -12,6 +12,7 @@ import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 
 /**
  * Interface describing YANG 'list' statement.
@@ -43,5 +44,5 @@ public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, D
      *
      * @return Collection of unique constraints of this list schema node
      */
-    @NonNull Collection<? extends UniqueConstraint> getUniqueConstraints();
+    @NonNull Collection<? extends UniqueEffectiveStatement> getUniqueConstraints();
 }
diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UniqueConstraint.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UniqueConstraint.java
deleted file mode 100644 (file)
index f409f8b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.api;
-
-import com.google.common.annotations.Beta;
-import java.util.Set;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
-
-/**
- * Interface describing YANG 'unique' constraint.
- *
- * <p>
- * The 'unique' constraint specifies that the combined values of all the leaf instances specified in the argument
- * string, including leafs with default values, MUST be unique within all list entry instances in which all referenced
- * leafs exist (for more information see RFC-6020 section 7.8.3.).
- */
-@Beta
-// FIXME: 6.0.0: YANGTOOLS-1119: replace all usages of this class with UniqueEffectiveStatement and remove this
-public interface UniqueConstraint {
-    @NonNull Set<Descendant> getTag();
-}
index da81108ba5d0d0fe62be3201a1f150841a423505..f356073770c0fafb1da482329a73490c9f0b76e9 100644 (file)
  *   <dd>{@link org.opendaylight.yangtools.yang.model.api.TypeDefinition}
  *
  * <dt>unique
- *   <dd>{@link org.opendaylight.yangtools.yang.model.api.UniqueConstraint}
+ *   <dd>{@link org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement}
  *
  * <dt>units
  *   <dd>{@link org.opendaylight.yangtools.yang.model.api.TypeDefinition#getUnits()}
index 206aba9a04de2967c5d0fed7cdf94cac71aa8344..9cb7fb23b40fff2bac11d9691225b069f29dc6ea 100644 (file)
@@ -14,6 +14,14 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 
+/**
+ * Interface describing YANG 'unique' constraint.
+ *
+ * <p>
+ * The 'unique' constraint specifies that the combined values of all the leaf instances specified in the argument
+ * string, including leafs with default values, MUST be unique within all list entry instances in which all referenced
+ * leafs exist (for more information see RFC-6020 section 7.8.3.).
+ */
 @Beta
 public interface UniqueEffectiveStatement extends EffectiveStatement<Set<Descendant>, UniqueStatement> {
     @Override
index f4c4d180e085efd267e5e339fb856b38de237dc9..ee35b794b397d9df6866c9e64cce08fc673053a4 100644 (file)
@@ -14,7 +14,6 @@ import org.opendaylight.yangtools.yang.model.api.DeviateDefinition;
 import org.opendaylight.yangtools.yang.model.api.DeviateKind;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
@@ -24,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatemen
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 
@@ -78,8 +78,8 @@ final class DeviateEffectiveStatementImpl extends WithSubstatements<DeviateKind,
     }
 
     @Override
-    public Collection<? extends UniqueConstraint> getDeviatedUniques() {
-        return allSubstatementsOfType(UniqueConstraint.class);
+    public Collection<? extends UniqueEffectiveStatement> getDeviatedUniques() {
+        return allSubstatementsOfType(UniqueEffectiveStatement.class);
     }
 
     @Override
index 9d8e50b0a459957a04d0c09e0199b3d27506ace9..ea83f751c15cf96e54a266403c6639584b3fef37 100644 (file)
@@ -19,10 +19,10 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.compat.ActionNodeContainerCompat;
 import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree;
@@ -103,10 +103,10 @@ abstract class AbstractListEffectiveStatement
     }
 
     @Override
-    public final Collection<UniqueConstraint> getUniqueConstraints() {
+    public final Collection<? extends UniqueEffectiveStatement> getUniqueConstraints() {
         return effectiveSubstatements().stream()
-                .filter(UniqueConstraint.class::isInstance)
-                .map(UniqueConstraint.class::cast)
+                .filter(UniqueEffectiveStatement.class::isInstance)
+                .map(UniqueEffectiveStatement.class::cast)
                 .collect(ImmutableList.toImmutableList());
     }
 
index 4c7cf368001360deed214e057b4525ae7f8a053e..c282c7718b5c2afa1686ee4bd1f4f6a4094b0275 100644 (file)
@@ -7,24 +7,15 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.unique;
 
-import static com.google.common.base.Verify.verifyNotNull;
-
 import java.util.Set;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
 
 class EmptyUniqueEffectiveStatement extends DefaultArgument<Set<Descendant>, UniqueStatement>
-        implements UniqueEffectiveStatement, UniqueConstraint {
+        implements UniqueEffectiveStatement {
     EmptyUniqueEffectiveStatement(final UniqueStatement declared) {
         super(declared);
     }
-
-    @Override
-    public final Set<Descendant> getTag() {
-        // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
-        return verifyNotNull(argument());
-    }
 }
index ee20186e6fcabad39e4e07f55f10fdeabf508676..2af5328248a1c1ae47cf609a0b22dacc622413af 100644 (file)
@@ -20,9 +20,9 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
+import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class Bug5946Test {
@@ -45,25 +45,27 @@ public class Bug5946Test {
                 .getResource("/bugs/bug5946/foo.yang").toURI()));
         assertNotNull(context);
 
-        Collection<? extends UniqueConstraint> uniqueConstraints = getListConstraints(context, WITHOUT_UNIQUE);
+        Collection<? extends UniqueEffectiveStatement> uniqueConstraints = getListConstraints(context, WITHOUT_UNIQUE);
         assertNotNull(uniqueConstraints);
         assertTrue(uniqueConstraints.isEmpty());
 
-        Collection<? extends UniqueConstraint> simpleUniqueConstraints = getListConstraints(context, SIMPLE_UNIQUE);
+        Collection<? extends UniqueEffectiveStatement> simpleUniqueConstraints =
+            getListConstraints(context, SIMPLE_UNIQUE);
         assertNotNull(simpleUniqueConstraints);
         assertEquals(1, simpleUniqueConstraints.size());
-        Collection<Descendant> simpleUniqueConstraintTag = simpleUniqueConstraints.iterator().next().getTag();
+        Collection<Descendant> simpleUniqueConstraintTag = simpleUniqueConstraints.iterator().next().argument();
         assertTrue(simpleUniqueConstraintTag.contains(L1_ID));
         assertTrue(simpleUniqueConstraintTag.contains(C_L3_ID));
 
-        Collection<? extends UniqueConstraint> multipleUniqueConstraints = getListConstraints(context, MULTIPLE_UNIQUE);
+        Collection<? extends UniqueEffectiveStatement> multipleUniqueConstraints =
+            getListConstraints(context, MULTIPLE_UNIQUE);
         assertNotNull(multipleUniqueConstraints);
         assertEquals(3, multipleUniqueConstraints.size());
         boolean l1l2 = false;
         boolean l1cl3 = false;
         boolean cl3l2 = false;
-        for (UniqueConstraint uniqueConstraint : multipleUniqueConstraints) {
-            Collection<Descendant> uniqueConstraintTag = uniqueConstraint.getTag();
+        for (UniqueEffectiveStatement uniqueConstraint : multipleUniqueConstraints) {
+            Collection<Descendant> uniqueConstraintTag = uniqueConstraint.argument();
             if (uniqueConstraintTag.contains(L1_ID) && uniqueConstraintTag.contains(L2_ID)) {
                 l1l2 = true;
             } else if (uniqueConstraintTag.contains(L1_ID) && uniqueConstraintTag.contains(C_L3_ID)) {
@@ -87,8 +89,8 @@ public class Bug5946Test {
         }
     }
 
-    private static @NonNull Collection<? extends UniqueConstraint> getListConstraints(final SchemaContext context,
-            final QName listQName) {
+    private static @NonNull Collection<? extends UniqueEffectiveStatement> getListConstraints(
+            final SchemaContext context, final QName listQName) {
         DataSchemaNode dataChildByName = context.getDataChildByName(listQName);
         assertTrue(dataChildByName instanceof ListSchemaNode);
         return ((ListSchemaNode) dataChildByName).getUniqueConstraints();