From 5764d0f70d796fdd270c2dedcbedd38161238516 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 3 Jul 2014 22:28:43 +0200 Subject: [PATCH] BUG-1270: use QNameModule where possible This converts a couple of callsites, which will hopefully result in more sharing. Change-Id: If77948d6cf16b56d3d05eeb5a6dc37d20b0ab1ae Signed-off-by: Robert Varga --- .../xml/InstanceIdentifierForXmlCodec.java | 19 +-------- .../yang/parser/builder/impl/CopyUtils.java | 4 +- .../parser/builder/impl/ModuleBuilder.java | 41 +++++++++---------- .../yang/parser/impl/YangParserImpl.java | 30 ++++++-------- 4 files changed, 35 insertions(+), 59 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/InstanceIdentifierForXmlCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/InstanceIdentifierForXmlCodec.java index 0e2eb0ec60..440e68da86 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/InstanceIdentifierForXmlCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/InstanceIdentifierForXmlCodec.java @@ -170,23 +170,8 @@ public final class InstanceIdentifierForXmlCodec { throw new IllegalArgumentException("I wasn't possible to get namespace for prefix " + prefix); } - Module youngestModule = findYoungestModuleByNamespace(schemaContext, namespace); - return QName.create(namespace, youngestModule.getRevision(), identifier); - } - - // FIXME: this method should be provided by SchemaContext - private static Module findYoungestModuleByNamespace(final SchemaContext schemaContext, final URI namespace) { - Module result = null; - for (Module module : schemaContext.findModuleByNamespace(namespace)) { - if (result != null) { - if (module.getRevision().after(result.getRevision())) { - result = module; - } - } else { - result = module; - } - } - return result; + Module module = schemaContext.findModuleByNamespaceAndRevision(namespace, null); + return QName.create(module.getQNameModule(), identifier); } private static String trimIfEndIs(final String str, final char end) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java index 9095e7c43c..ce7bfeebf8 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java @@ -7,7 +7,6 @@ */ package org.opendaylight.yangtools.yang.parser.builder.impl; -import java.util.ArrayList; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -459,8 +458,7 @@ public final class CopyUtils { SchemaNodeBuilder parent = (SchemaNodeBuilder) newParent; QName parentQName = parent.getQName(); if (updateQName) { - newQName = new QName(parentQName.getNamespace(), parentQName.getRevision(), parentQName.getPrefix(), - old.getQName().getLocalName()); + newQName = QName.create(parentQName, old.getQName().getLocalName()); } else { newQName = old.getQName(); } 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 df88cf27e8..f8de37a57c 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 @@ -6,6 +6,7 @@ */ package org.opendaylight.yangtools.yang.parser.builder.impl; +import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; import java.io.IOException; @@ -21,8 +22,10 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; + import org.apache.commons.io.IOUtils; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.Deviation; import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; @@ -63,9 +66,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im private final String name; private final String sourcePath; private static final SchemaPath SCHEMA_PATH = SchemaPath.create(Collections. emptyList(), true); - private URI namespace; private String prefix; - private Date revision; + private QNameModule qnameModule = QNameModule.create(null, null); private final boolean submodule; private String belongsTo; @@ -132,9 +134,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im submodule = false; yangVersion = base.getYangVersion(); actualPath.push(this);//FIXME: this escapes constructor - namespace = base.getNamespace(); prefix = base.getPrefix(); - revision = base.getRevision(); + qnameModule = base.getQNameModule(); augments.addAll(base.getAugmentations()); rpcs.addAll(base.getRpcs()); @@ -322,11 +323,19 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public URI getNamespace() { - return namespace; + return qnameModule.getNamespace(); + } + + public QNameModule getQNameModule() { + return qnameModule; + } + + public void setQNameModule(final QNameModule qnameModule) { + this.qnameModule = Preconditions.checkNotNull(qnameModule); } public void setNamespace(final URI namespace) { - this.namespace = namespace; + this.qnameModule = QNameModule.create(namespace, qnameModule.getRevision()); } public String getPrefix() { @@ -334,7 +343,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public Date getRevision() { - return revision; + return qnameModule.getRevision(); } protected Set getImports() { @@ -363,7 +372,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setRevision(final Date revision) { - this.revision = revision; + this.qnameModule = QNameModule.create(qnameModule.getNamespace(), revision); } public void setPrefix(final String prefix) { @@ -1022,8 +1031,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((namespace == null) ? 0 : namespace.hashCode()); - result = prime * result + ((revision == null) ? 0 : revision.hashCode()); + result = prime * result + qnameModule.hashCode(); result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); return result; @@ -1048,11 +1056,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } else if (!name.equals(other.name)) { return false; } - if (namespace == null) { - if (other.namespace != null) { - return false; - } - } else if (!namespace.equals(other.namespace)) { + if (!qnameModule.equals(other.qnameModule)) { return false; } if (prefix == null) { @@ -1062,13 +1066,6 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } else if (!prefix.equals(other.prefix)) { return false; } - if (revision == null) { - if (other.revision != null) { - return false; - } - } else if (!revision.equals(other.revision)) { - return false; - } return true; } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java index 2d0b3abaf0..44f5dcb055 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java @@ -29,6 +29,7 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.HashBiMap; import com.google.common.io.ByteSource; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -45,7 +46,9 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; + import javax.annotation.concurrent.Immutable; + import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; @@ -839,30 +842,25 @@ public final class YangParserImpl implements YangContextParser { DataNodeContainerBuilder usesParent = ((UsesNodeBuilder) parent).getParent(); newPath.addAll(usesParent.getPath().getPath()); - URI ns; - Date revision; - String prefix; - QName baseQName = usesParent.getQName(); + final QName baseQName = usesParent.getQName(); + final QNameModule qnm; + final String prefix; if (baseQName == null) { ModuleBuilder m = BuilderUtils.getParentModule(usesParent); - ns = m.getNamespace(); - revision = m.getRevision(); + qnm = m.getQNameModule(); prefix = m.getPrefix(); } else { - ns = baseQName.getNamespace(); - revision = baseQName.getRevision(); + qnm = baseQName.getModule(); prefix = baseQName.getPrefix(); } - final QNameModule qm = QNameModule.create(ns, revision); for (QName qn : oldSchemaPath.getPathFromRoot()) { - newPath.add(QName.create(qm, prefix, qn.getLocalName())); + newPath.add(QName.create(qnm, prefix, qn.getLocalName())); } } else { Iterable oldPath = oldSchemaPath.getPathFromRoot(); for (QName qn : oldPath) { - URI ns = module.getNamespace(); - Date rev = module.getRevision(); + QNameModule qnm = module.getQNameModule(); String localPrefix = qn.getPrefix(); if (localPrefix != null && !localPrefix.isEmpty()) { ModuleBuilder currentModule = BuilderUtils.findModuleFromBuilders(modules, module, localPrefix, @@ -873,14 +871,12 @@ public final class YangParserImpl implements YangContextParser { throw new YangParseException(module.getName(), augment.getLine(), "Module with prefix " + localPrefix + " not found."); } - ns = m.getNamespace(); - rev = m.getRevision(); + qnm = m.getQNameModule(); } else { - ns = currentModule.getNamespace(); - rev = currentModule.getRevision(); + qnm = currentModule.getQNameModule(); } } - newPath.add(new QName(ns, rev, localPrefix, qn.getLocalName())); + newPath.add(new QName(qnm.getNamespace(), qnm.getRevision(), localPrefix, qn.getLocalName())); } } augment.setTargetNodeSchemaPath(SchemaPath.create(newPath, true)); -- 2.36.6