From: Robert Varga Date: Wed, 26 Mar 2014 18:29:13 +0000 (+0100) Subject: Bug 499: Fixed normalization of InstanceIdentifier for backwards compatibility X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~282 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=ac7eb6bcfe527ffd6bb25daaa658be5f91ed43ed;ds=sidebyside Bug 499: Fixed normalization of InstanceIdentifier for backwards compatibility Change-Id: I633eb004729c6013df49c3f82420adf6d2417ea9 Signed-off-by: Tony Tkacik Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java index de90f48b35..941f2fdb39 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java @@ -61,6 +61,11 @@ public abstract class DataNormalizationOperation impleme return false; } + + public boolean isKeyedEntry() { + return false; + } + protected Set getQNameIdentifiers() { return Collections.singleton(identifier.getNodeType()); } @@ -129,6 +134,11 @@ public abstract class DataNormalizationOperation impleme return Builders.leafSetEntryBuilder().withNodeIdentifier(nodeId).withValue(node.getValue()).build(); } + + @Override + public boolean isKeyedEntry() { + return true; + } } private static abstract class CompositeNodeNormalizationOpertation extends @@ -243,7 +253,9 @@ public abstract class DataNormalizationOperation impleme protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { ImmutableMap.Builder keys = ImmutableMap.builder(); for (QName key : keyDefinition) { - SimpleNode valueNode = checkNotNull(compositeNode.getFirstSimpleByName(key),"List node %s MUST contain leaf %s with value.",getIdentifier().getNodeType(),key); + + SimpleNode valueNode = checkNotNull(compositeNode.getFirstSimpleByName(key), + "List node %s MUST contain leaf %s with value.", getIdentifier().getNodeType(), key); keys.put(key, valueNode.getValue()); } @@ -263,6 +275,12 @@ public abstract class DataNormalizationOperation impleme } return builder.build(); } + + + @Override + public boolean isKeyedEntry() { + return true; + } } private static final class ContainerNormalization extends DataContainerNormalizationOperation { diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizer.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizer.java index 9487f21590..28b2bde26d 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizer.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizer.java @@ -4,6 +4,7 @@ import static com.google.common.base.Preconditions.checkArgument; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Iterator; import java.util.Map; import org.opendaylight.yangtools.yang.data.api.CompositeNode; @@ -11,6 +12,7 @@ import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.SimpleNode; @@ -31,12 +33,9 @@ import com.google.common.collect.Iterables; public class DataNormalizer { - private final SchemaContext schemaContext; - private final DataNormalizationOperation operation; public DataNormalizer(final SchemaContext ctx) { - schemaContext = ctx; operation = DataNormalizationOperation.from(ctx); } @@ -44,14 +43,18 @@ public class DataNormalizer { ImmutableList.Builder normalizedArgs = ImmutableList.builder(); DataNormalizationOperation currentOp = operation; - for (PathArgument legacyArg : legacy.getPath()) { + Iterator arguments = legacy.getPath().iterator(); + while ( arguments.hasNext() ) { + PathArgument legacyArg = arguments.next(); currentOp = currentOp.getChild(legacyArg); checkArgument(currentOp != null, "Legacy Instance Identifier %s is not correct. Normalized Instance Identifier so far %s",legacy,normalizedArgs.build()); while (currentOp.isMixin()) { normalizedArgs.add(currentOp.getIdentifier()); currentOp = currentOp.getChild(legacyArg.getNodeType()); } - normalizedArgs.add(legacyArg); + if(arguments.hasNext() || (!currentOp.isKeyedEntry() || legacyArg instanceof NodeIdentifierWithPredicates || legacyArg instanceof NodeWithValue)) { + normalizedArgs.add(legacyArg); + } } return new InstanceIdentifier(normalizedArgs.build()); }