Bug 3189 Special case of checking root node QName.
[yangtools.git] / 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);
+        }
     }
 }