* 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.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;
+import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
/**
* Equality check on namespace and revision is only triggered if they are non-null
*/
public class ModuleIdentifierImpl implements ModuleIdentifier {
+ private final QNameModule qnameModule;
private final String name;
- private final Optional<URI> namespace;
- private final Optional<Date> revision;
- public ModuleIdentifierImpl(String name, Optional<URI> namespace, Optional<Date> revision) {
+ public ModuleIdentifierImpl(final String name, final Optional<URI> namespace, final Optional<Date> revision) {
this.name = checkNotNull(name);
- this.namespace = checkNotNull(namespace);
- this.revision = checkNotNull(revision);
+ this.qnameModule = QNameModule.create(namespace.orNull(), revision.orNull());
+ }
+
+ @Override
+ public QNameModule getQNameModule() {
+ return qnameModule;
}
@Override
public Date getRevision() {
- return revision.orNull();
+ return qnameModule.getRevision();
}
@Override
@Override
public URI getNamespace() {
- return namespace.orNull();
+ return qnameModule.getNamespace();
}
@Override
public String toString() {
return "ModuleIdentifierImpl{" +
"name='" + name + '\'' +
- ", namespace=" + namespace +
- ", revision=" + revision +
+ ", namespace=" + getNamespace() +
+ ", revision=" + getRevision() +
'}';
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(final Object o) {
if (this == o) {
return true;
}
- if (o == null || (o instanceof ModuleIdentifier == false)) {
+ if (o == null || (!(o instanceof ModuleIdentifier))) {
return false;
}
if (!name.equals(that.getName())) {
return false;
}
+
// only fail if this namespace is non-null
- if (namespace.isPresent() && namespace.get().equals(that.getNamespace()) == false) {
+ 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 (revision.isPresent() && revision.get().equals(that.getRevision()) == false) {
+ if (getRevision() != null && that.getRevision() != null && !getRevision().equals(that.getRevision())) {
return false;
}