From e4750337bbf925ca86933cdbea06ec8419860b4d Mon Sep 17 00:00:00 2001 From: Martin Vitez Date: Mon, 30 Sep 2013 11:59:28 +0200 Subject: [PATCH] Fixed bug in schema path of nested nodes defined in augment under uses. Signed-off-by: Martin Vitez --- .../parser/builder/impl/ModuleBuilder.java | 86 +---------------- .../yang/parser/util/GroupingUtils.java | 9 +- .../yang/parser/util/ModuleImportImpl.java | 92 +++++++++++++++++++ .../yang/parser/util/ParserUtils.xtend | 17 +++- 4 files changed, 113 insertions(+), 91 deletions(-) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ModuleImportImpl.java diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java index 0007a751b3..8133903369 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java @@ -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 ModuleImport 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; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java index 4626ce0957..6af2c24118 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/GroupingUtils.java @@ -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 index 0000000000..63f07f80b8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ModuleImportImpl.java @@ -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 + "]"; + } + +} + diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserUtils.xtend b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserUtils.xtend index 80b51988d1..7225a3ddf3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserUtils.xtend +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserUtils.xtend @@ -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. * -- 2.36.6