Bug 3189 Special case of checking root node QName. 72/20772/4
authorTony Tkacik <ttkacik@cisco.com>
Wed, 20 May 2015 08:23:14 +0000 (10:23 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Wed, 20 May 2015 08:39:43 +0000 (10:39 +0200)
Root instance identifier is special in that it does not have a path
argument.

Change-Id: I59d699b786b3ce117511785dc4f8227ca86057f2
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java

index 37818b96ed6ebb7a619a3987fbbe363cf325dc44..032bd927a42b4eec10c966b9ce2d49c7fdbfa696 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.collect.Iterables;
 import java.util.Collection;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -22,6 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification
 import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNodes;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -250,10 +252,15 @@ final class InMemoryDataTreeModification implements DataTreeModification {
         }
     }
 
-    private static void checkIdentifierReferencesData(final YangInstanceIdentifier path,
-            final NormalizedNode<?, ?> data) {
-        final PathArgument lastArg = path.getLastPathArgument();
-        Preconditions.checkArgument(data.getIdentifier().equals(lastArg),
-                "Instance identifier references %s but data identifier is %s", lastArg, data.getIdentifier());
+    private static void checkIdentifierReferencesData(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
+        if (!path.isEmpty()) {
+            final PathArgument lastArg = path.getLastPathArgument();
+            Preconditions.checkArgument(lastArg != null, "Instance identifier %s has invalid null path argument", path);
+            Preconditions.checkArgument(lastArg.equals(data.getIdentifier()),
+                    "Instance identifier references %s but data identifier is %s", lastArg, data.getIdentifier());
+        } else {
+            final QName type = data.getNodeType();
+            Preconditions.checkArgument(SchemaContext.NAME.equals(type), "Incorrect name %s of root node", type);
+        }
     }
 }