From 1f29c046d27af10f5228396a94213ebc59aa0b9b Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Wed, 20 May 2015 10:23:14 +0200 Subject: [PATCH] Bug 3189 Special case of checking root node QName. Root instance identifier is special in that it does not have a path argument. Change-Id: I59d699b786b3ce117511785dc4f8227ca86057f2 Signed-off-by: Tony Tkacik Signed-off-by: Robert Varga --- .../tree/InMemoryDataTreeModification.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java index 37818b96ed..032bd927a4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java @@ -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); + } } } -- 2.36.6