Fixed bug in schema path of nested nodes defined in augment under uses. 05/1505/1
authorMartin Vitez <mvitez@cisco.com>
Mon, 30 Sep 2013 09:59:28 +0000 (11:59 +0200)
committerMartin Vitez <mvitez@cisco.com>
Mon, 30 Sep 2013 09:59:28 +0000 (11:59 +0200)
Signed-off-by: Martin Vitez <mvitez@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ModuleImportImpl.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserUtils.xtend

index 0007a751b3aac2a51424ba52c86c438e84b9b6f6..81339033692e109fdb3b548136eec696f61c7343 100644 (file)
@@ -48,6 +48,7 @@ import org.opendaylight.yangtools.yang.parser.builder.api.TypeAwareBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;
 import org.opendaylight.yangtools.yang.parser.util.Comparators;
+import org.opendaylight.yangtools.yang.parser.util.ModuleImportImpl;
 import org.opendaylight.yangtools.yang.parser.util.RefineHolder;
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
 
@@ -1240,91 +1241,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
     }
 
-    /**
-     *
-     * Implementation of <code>ModuleImport</code> interface only for the method
-     * {@link ModuleBuilder#createModuleImport(String, Date, String)
-     * createModuleImport}.
-     *
-     */
-    private class ModuleImportImpl implements ModuleImport {
-        final String moduleName;
-        final Date revision;
-        final String prefix;
-
-        private ModuleImportImpl(final String moduleName, final Date revision, final String prefix) {
-            this.moduleName = moduleName;
-            this.revision = revision;
-            this.prefix = prefix;
-        }
-
-        @Override
-        public String getModuleName() {
-            return moduleName;
-        }
-
-        @Override
-        public Date getRevision() {
-            return revision;
-        }
-
-        @Override
-        public String getPrefix() {
-            return prefix;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + ((moduleName == null) ? 0 : moduleName.hashCode());
-            result = prime * result + ((revision == null) ? 0 : revision.hashCode());
-            result = prime * result + ((prefix == null) ? 0 : prefix.hashCode());
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (obj == null) {
-                return false;
-            }
-            if (getClass() != obj.getClass()) {
-                return false;
-            }
-            ModuleImport other = (ModuleImport) obj;
-            if (getModuleName() == null) {
-                if (other.getModuleName() != null) {
-                    return false;
-                }
-            } else if (!getModuleName().equals(other.getModuleName())) {
-                return false;
-            }
-            if (getRevision() == null) {
-                if (other.getRevision() != null) {
-                    return false;
-                }
-            } else if (!getRevision().equals(other.getRevision())) {
-                return false;
-            }
-            if (getPrefix() == null) {
-                if (other.getPrefix() != null) {
-                    return false;
-                }
-            } else if (!getPrefix().equals(other.getPrefix())) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return "ModuleImport[moduleName=" + moduleName + ", revision=" + revision + ", prefix=" + prefix + "]";
-        }
-    }
-
     private ModuleImport createModuleImport(final String moduleName, final Date revision, final String prefix) {
         final ModuleImport moduleImport = new ModuleImportImpl(moduleName, revision, prefix);
         return moduleImport;
index 4626ce09571e3346419089c4a767e51a8b9cd807..6af2c24118cd7283625b72170f8609344f862ce6 100644 (file)
@@ -205,6 +205,8 @@ public final class GroupingUtils {
         String prefix = module.getPrefix();
 
         SchemaPath parentPath = parent.getPath();
+
+
         if(parent instanceof AugmentationSchemaBuilder) {
             parentPath = ((AugmentationSchemaBuilder)parent).getTargetNodeSchemaPath();
         }
@@ -218,12 +220,11 @@ public final class GroupingUtils {
             GroupingMember gm = (GroupingMember) child;
             if (gm.isAddedByUses()) {
                 if(usesNode.isAugmenting()) {
-                    if(child.getQName().getLocalName().equals("paths")) {
-                        System.out.println();
-                    }
+                    child.setAugmenting(true);
+                }
+                if(usesNode.isAugmenting() && !(usesNode.getParentAugment().getParent() instanceof UsesNodeBuilder)) {
                     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()));
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ModuleImportImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ModuleImportImpl.java
new file mode 100644 (file)
index 0000000..63f07f8
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.util;
+
+import java.util.Date;
+
+import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+
+public final class ModuleImportImpl implements ModuleImport {
+    private final String moduleName;
+    private final Date revision;
+    private final String prefix;
+
+    public ModuleImportImpl(final String moduleName, final Date revision, final String prefix) {
+        this.moduleName = moduleName;
+        this.revision = revision;
+        this.prefix = prefix;
+    }
+
+    @Override
+    public String getModuleName() {
+        return moduleName;
+    }
+
+    @Override
+    public Date getRevision() {
+        return revision;
+    }
+
+    @Override
+    public String getPrefix() {
+        return prefix;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((moduleName == null) ? 0 : moduleName.hashCode());
+        result = prime * result + ((revision == null) ? 0 : revision.hashCode());
+        result = prime * result + ((prefix == null) ? 0 : prefix.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        ModuleImport other = (ModuleImport) obj;
+        if (getModuleName() == null) {
+            if (other.getModuleName() != null) {
+                return false;
+            }
+        } else if (!getModuleName().equals(other.getModuleName())) {
+            return false;
+        }
+        if (getRevision() == null) {
+            if (other.getRevision() != null) {
+                return false;
+            }
+        } else if (!getRevision().equals(other.getRevision())) {
+            return false;
+        }
+        if (getPrefix() == null) {
+            if (other.getPrefix() != null) {
+                return false;
+            }
+        } else if (!getPrefix().equals(other.getPrefix())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "ModuleImport[moduleName=" + moduleName + ", revision=" + revision + ", prefix=" + prefix + "]";
+    }
+
+}
+
index 80b51988d168043be20a9dbc26a8e1ee013caf62..7225a3ddf36bad73a565036f95332969f2b941d4 100644 (file)
@@ -202,7 +202,7 @@ public final class ParserUtils {
     public static def void fillAugmentTarget(AugmentationSchemaBuilder augment, DataNodeContainerBuilder target) {
         for (DataSchemaNodeBuilder child : augment.getChildNodeBuilders()) {
             val childCopy = CopyUtils.copy(child, target, false);
-            childCopy.setAugmenting(true);
+            setNodeAugmenting(childCopy, augment);
             correctNodePath(child, target.getPath());
             correctNodePath(childCopy, target.getPath());
             try {
@@ -213,7 +213,6 @@ public final class ParserUtils {
                 throw new YangParseException(augment.getModuleName(), augment.getLine(),
                     "Failed to perform augmentation: " + e.getMessage());
             }
-
         }
         for (UsesNodeBuilder usesNode : augment.getUsesNodes()) {
             val copy = CopyUtils.copyUses(usesNode, target);
@@ -221,6 +220,20 @@ public final class ParserUtils {
         }
     }
 
+    private static def void setNodeAugmenting(DataSchemaNodeBuilder child, AugmentationSchemaBuilder augment) {
+        child.setAugmenting(true);
+        if (child instanceof DataNodeContainerBuilder) {
+            val DataNodeContainerBuilder dataNodeChild = child as DataNodeContainerBuilder;
+            for (inner : dataNodeChild.getChildNodeBuilders()) {
+                setNodeAugmenting(inner, augment);
+            }
+            for (uses : dataNodeChild.getUsesNodes()) {
+                uses.setParentAugment(augment);
+                uses.setAugmenting(true);
+            }
+        }
+    }
+
     /**
      * Add all augment's child nodes to given target.
      *