Bug 1991: Ignore AugmentationIdentifier in XML Serialization 95/11395/1
authorTony Tkacik <ttkacik@cisco.com>
Sat, 20 Sep 2014 08:47:26 +0000 (10:47 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Sat, 20 Sep 2014 08:48:02 +0000 (10:48 +0200)
AugmentationIdentifier is YANGTools/MD-SAL specific
concept which eases navigation in parsed data, but
does not exists in XML Instance Identifier.

AugmentationIdentifier from XML perspective identifies
subset of child nodes of parent element, from which
also next path argument select element from that subset
so it is safe to leave it during serialization.

Change-Id: If42acf6db82f7c4920546283cb89a2cf58f80a6e
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractStringInstanceIdentifierCodec.java

index e39d819512f45a528cbd784daceb46a5573bf2cd..3e47e966cf94a1f1f6b0e6b485fb922678f02ce0 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.util;
 import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -18,9 +17,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -39,6 +38,18 @@ public abstract class AbstractStringInstanceIdentifierCodec extends AbstractName
     public final String serialize(final YangInstanceIdentifier data) {
         StringBuilder sb = new StringBuilder();
         for (PathArgument arg : data.getPathArguments()) {
+            if(arg instanceof AugmentationIdentifier) {
+                /*
+                 * XML/YANG instance identifier does not have concept
+                 * of augmentation identifier, which identifies
+                 * mixin (same as paretn element), so we can safely
+                 * ignore it if it is part of path (since child node)
+                 * is identified in same fashion.
+                 *
+                 */
+                continue;
+            }
+
             sb.append('/');
             appendQName(sb, arg.getNodeType());