Bug 2366 - new parser API - implementation of declared statements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ModuleIdentifierImpl.java
index 5a32774036a56b0809a68863a893c9e5a8f43020..6e825dd666473fe878c46deb8bbc85f41c732517 100644 (file)
@@ -9,6 +9,8 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
+
 import com.google.common.base.Optional;
 import java.net.URI;
 import java.util.Date;
@@ -77,8 +79,29 @@ public class ModuleIdentifierImpl implements ModuleIdentifier {
         if (getNamespace() != null && !getNamespace().equals(that.getNamespace())) {
             return false;
         }
+
+        Date defaultRev = SimpleDateFormatUtil.DEFAULT_DATE_REV;
+        Date defaultImp = SimpleDateFormatUtil.DEFAULT_DATE_IMP;
+
+        // if revision is in import only, spec says that it is undefined which
+        // revision to take
+        if (getRevision() == defaultImp ^ that.getRevision() == defaultImp) {
+            return true;
+        }
+
+        // default and none revisions taken as equal
+        if ((defaultRev.equals(getRevision()) && that.getRevision() == null)
+                || (defaultRev.equals(that.getRevision()) && getRevision() == null)) {
+            return true;
+        }
+
+        // else if none of them is default and one null
+        if (getRevision() == null ^ that.getRevision() == null) {
+            return false;
+        }
+
         // only fail if this revision is non-null
-        if (getRevision() != null && !getRevision().equals(that.getRevision())) {
+        if (getRevision() != null && that.getRevision() != null && !getRevision().equals(that.getRevision())) {
             return false;
         }