Fixed schema path of nodes added by augmentation in uses statement. 02/1202/2
authorMartin Vitez <mvitez@cisco.com>
Mon, 16 Sep 2013 16:36:58 +0000 (18:36 +0200)
committerMartin Vitez <mvitez@cisco.com>
Mon, 16 Sep 2013 16:41:30 +0000 (18:41 +0200)
Change-Id: Id3d39fa316f0907ccba12cb3ad2b0fb539f2c6e3
Signed-off-by: Martin Vitez <mvitez@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/UsesAugmentTest.java

index 0f554c6206b67978ebc1f4e7dc80bf64008e1dfa..160e9c907b7a18dce8130eea0f37d306efff66ac 100644 (file)
@@ -822,9 +822,6 @@ public final class YangParserImpl implements YangModelParser {
             GroupingUtils.updateUsesParent(usesNode);
             GroupingUtils.performRefine(usesNode);
         }
-        for (UsesNodeBuilder usesNode : allModulesUses) {
-            GroupingUtils.fixUsesNodesPath(usesNode);
-        }
 
         if (!resolveWithContext) {
             for (UsesNodeBuilder usesNode : allModulesUses) {
index ddfef5033bd6bfeaa519ffa81cfec495ac66d324..8ac23863ad77ff6b9b1b10785bf8b861113a20d0 100644 (file)
@@ -199,30 +199,62 @@ public final class GroupingUtils {
      */
     public static void updateUsesParent(UsesNodeBuilder usesNode) {
         DataNodeContainerBuilder parent = usesNode.getParent();
+        ModuleBuilder module = ParserUtils.getParentModule(parent);
+        URI ns = module.getNamespace();
+        Date rev = module.getRevision();
+        String prefix = module.getPrefix();
+
+        SchemaPath parentPath = parent.getPath();
+        if(parent instanceof AugmentationSchemaBuilder) {
+            parentPath = ((AugmentationSchemaBuilder)parent).getTargetPath();
+        }
 
         // child nodes
         for (DataSchemaNodeBuilder child : usesNode.getTargetChildren()) {
             if (child instanceof GroupingMember) {
                 ((GroupingMember) child).setAddedByUses(true);
             }
+
+            GroupingMember gm = (GroupingMember) child;
+            if (gm.isAddedByUses()) {
+                if(usesNode.isAugmenting()) {
+                    if(child.getQName().getLocalName().equals("paths")) {
+                        System.out.println();
+                    }
+                    AugmentationSchemaBuilder parentAugment = usesNode.getParentAugment();
+                    ModuleBuilder m = ParserUtils.getParentModule(parentAugment);
+                    child.setAugmenting(true);
+                    correctNodePathForUsesNodes(child, parentPath, m);
+                } else {
+                    child.setQName(new QName(ns, rev, prefix, child.getQName().getLocalName()));
+                    correctNodePathForUsesNodes(child, parentPath, module);
+                }
+            }
+
             parent.addChildNode(child);
         }
 
         // groupings
         for (GroupingBuilder gb : usesNode.getTargetGroupings()) {
             gb.setAddedByUses(true);
+            gb.setQName(new QName(ns, rev, prefix, gb.getQName().getLocalName()));
+            correctNodePathForUsesNodes(gb, parentPath, module);
             parent.addGrouping(gb);
         }
 
         // typedefs
         for (TypeDefinitionBuilder tdb : usesNode.getTargetTypedefs()) {
             tdb.setAddedByUses(true);
+            tdb.setQName(new QName(ns, rev, prefix, tdb.getQName().getLocalName()));
+            correctNodePathForUsesNodes(tdb, parentPath, module);
             parent.addTypedef(tdb);
         }
 
         // unknown nodes
         for (UnknownSchemaNodeBuilder un : usesNode.getTargetUnknownNodes()) {
             un.setAddedByUses(true);
+            un.setQName(new QName(ns, rev, prefix, un.getQName().getLocalName()));
+            correctNodePathForUsesNodes(un, parentPath, module);
             parent.addUnknownNodeBuilder(un);
         }
     }
@@ -540,71 +572,6 @@ public final class GroupingUtils {
 
     }
 
-    /**
-     * Fix schema path of all nodes which were defined by this usesNode.
-     *
-     * @param usesNode
-     */
-    public static void fixUsesNodesPath(UsesNodeBuilder usesNode) {
-        DataNodeContainerBuilder parent = usesNode.getParent();
-        ModuleBuilder module = ParserUtils.getParentModule(parent);
-        URI ns = module.getNamespace();
-        Date rev = module.getRevision();
-        String prefix = module.getPrefix();
-
-        SchemaPath parentPath = parent.getPath();
-        if(parent instanceof AugmentationSchemaBuilder) {
-            parentPath = ((AugmentationSchemaBuilder)parent).getTargetPath();
-        }
-
-        // child nodes
-        Set<DataSchemaNodeBuilder> currentChildNodes = parent.getChildNodeBuilders();
-        for (DataSchemaNodeBuilder child : currentChildNodes) {
-            if (child instanceof GroupingMember) {
-                GroupingMember gm = (GroupingMember) child;
-                if (gm.isAddedByUses()) {
-                    if(usesNode.isAugmenting()) {
-                        AugmentationSchemaBuilder parentAugment = usesNode.getParentAugment();
-                        ModuleBuilder m = ParserUtils.getParentModule(parentAugment);
-                        correctNodePathForUsesNodes(child, parentPath, m);
-                    } else {
-                        child.setQName(new QName(ns, rev, prefix, child.getQName().getLocalName()));
-                        correctNodePathForUsesNodes(child, parentPath, module);
-                    }
-                }
-            }
-        }
-
-        // groupings
-        Set<GroupingBuilder> currentGroupings = parent.getGroupingBuilders();
-        for (GroupingBuilder grouping : currentGroupings) {
-            if (grouping.isAddedByUses()) {
-                grouping.setQName(new QName(ns, rev, prefix, grouping.getQName().getLocalName()));
-                correctNodePathForUsesNodes(grouping, parentPath, module);
-            }
-
-        }
-
-        // typedefs
-        Set<TypeDefinitionBuilder> currentTypedefs = parent.getTypeDefinitionBuilders();
-        for (TypeDefinitionBuilder typedef : currentTypedefs) {
-            if (typedef.isAddedByUses()) {
-                typedef.setQName(new QName(ns, rev, prefix, typedef.getQName().getLocalName()));
-                correctNodePathForUsesNodes(typedef, parentPath, module);
-            }
-
-        }
-
-        // unknown nodes
-        List<UnknownSchemaNodeBuilder> currentUN = parent.getUnknownNodeBuilders();
-        for (UnknownSchemaNodeBuilder un : currentUN) {
-            if (un.isAddedByUses()) {
-                un.setQName(new QName(ns, rev, prefix, un.getQName().getLocalName()));
-                correctNodePathForUsesNodes(un, parentPath, module);
-            }
-        }
-    }
-
     /**
      * Correct schema path of nodes added by uses statement.
      *
index 3395dedfe67a850316e224973f463d336c1a875e..47edbc2c87bfb63e2e282dc961e2fe6fe3e09963 100644 (file)
@@ -326,7 +326,7 @@ public class UsesAugmentTest {
         assertTrue(version.getType() instanceof ExtendedType);
         assertEquals(Uint8.getInstance(), version.getType().getBaseType());
         assertTrue(version.isAddedByUses());
-        assertFalse(version.isAugmenting());
+        assertTrue(version.isAugmenting());
         // * |-- |-- |-- |-- |-- leaf type
         type = (LeafSchemaNode) pathKeys.getDataChildByName("type");
         assertNotNull(type);
@@ -338,7 +338,7 @@ public class UsesAugmentTest {
         assertEquals(expectedPath, type.getPath());
         assertTrue(type.getType() instanceof ExtendedType);
         assertTrue(type.isAddedByUses());
-        assertFalse(type.isAugmenting());
+        assertTrue(type.isAugmenting());
         // * |-- |-- container segment-computation
         ContainerSchemaNode sc = (ContainerSchemaNode) requests.getDataChildByName("segment-computation");
         assertNotNull(sc);