BUG-1270: use QNameModule where possible 41/8641/2
authorRobert Varga <rovarga@cisco.com>
Thu, 3 Jul 2014 20:28:43 +0000 (22:28 +0200)
committerRobert Varga <rovarga@cisco.com>
Fri, 4 Jul 2014 07:15:30 +0000 (09:15 +0200)
This converts a couple of callsites, which will hopefully result in more
sharing.

Change-Id: If77948d6cf16b56d3d05eeb5a6dc37d20b0ab1ae
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/InstanceIdentifierForXmlCodec.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java
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/impl/YangParserImpl.java

index 0e2eb0ec60d489acca06804fbd7973cc826840b1..440e68da86f426215a9464e5fbfb3b94ca37ccc0 100644 (file)
@@ -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) {
index 9095e7c43c5a756a1c53780f0088904c173612b6..ce7bfeebf883e40533105f1ae5c1c3067891053d 100644 (file)
@@ -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();
             }
index df88cf27e8289de4571e02ac18f9d6189358a330..f8de37a57c85384377e59747eaf3538df52d5ec9 100644 (file)
@@ -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.<QName> 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<ModuleImport> 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;
     }
 
index 2d0b3abaf0b5ff73c2b131f03c5df150a082dab5..44f5dcb0554d7ebc09ceb3a0a9d34c09388fcbdf 100644 (file)
@@ -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<QName> 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));