Bug 4662: Introduce a SemanticVersion concept - import processing
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / util / YangModelDependencyInfo.java
index cbe259f1fd9fc1abedb2b0ee7aca82bd6b57a540..e7125bf4ad5d210d884ec60b6d66e1dfb080251e 100644 (file)
@@ -9,21 +9,15 @@ package org.opendaylight.yangtools.yang.parser.impl.util;
 
 import static org.opendaylight.yangtools.yang.parser.impl.ParserListenerUtils.getArgumentString;
 
-import org.opendaylight.yangtools.yang.parser.impl.ParserListenerUtils;
-
 import com.google.common.base.Optional;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
-import java.util.HashSet;
-import java.util.Set;
-import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
-import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
-import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import java.io.InputStream;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Belongs_to_stmtContext;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Import_stmtContext;
@@ -33,9 +27,17 @@ import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Revision_date_stmt
 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Revision_stmtContext;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Revision_stmtsContext;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Submodule_stmtContext;
+import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
+import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
+import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.parser.impl.ParserListenerUtils;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
 
 /**
  * Helper transfer object which holds basic and dependency information for YANG
@@ -484,11 +486,17 @@ public abstract class YangModelDependencyInfo {
     private static final class ModuleImportImpl implements ModuleImport {
 
         private final Date revision;
+        private final SemVer semVer;
         private final String name;
 
         public ModuleImportImpl(final String moduleName, final Date revision) {
-            this.name = moduleName;
+            this(moduleName, revision, Module.DEFAULT_SEMANTIC_VERSION);
+        }
+
+        public ModuleImportImpl(final String moduleName, final Date revision, final SemVer semVer) {
+            this.name = Preconditions.checkNotNull(moduleName, "Module name must not be null.");
             this.revision = revision;
+            this.semVer = Preconditions.checkNotNull(semVer, "Semantic version of module must not be null.");
         }
 
         @Override
@@ -501,6 +509,11 @@ public abstract class YangModelDependencyInfo {
             return this.revision;
         }
 
+        @Override
+        public SemVer getSemanticVersion() {
+            return this.semVer;
+        }
+
         @Override
         public String getPrefix() {
             return null;
@@ -512,6 +525,7 @@ public abstract class YangModelDependencyInfo {
             int result = 1;
             result = prime * result + Objects.hashCode(name);
             result = prime * result + Objects.hashCode(revision);
+            result = prime * result + Objects.hashCode(semVer);
             return result;
         }
 
@@ -541,6 +555,10 @@ public abstract class YangModelDependencyInfo {
             } else if (!revision.equals(other.revision)) {
                 return false;
             }
+
+            if (!Objects.equals(getSemanticVersion(), other.getSemanticVersion())) {
+                return false;
+            }
             return true;
         }