package com.softwaremill.common.util.dependency;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Set;
/**
* Holder for dependencies
*/
public class QualifiedDependency {
private final Set<Annotation> qualifiers;
private final Object dep;
public Set<Annotation> getQualifiers() {
return qualifiers;
}
public Object getDep() {
return dep;
}
public QualifiedDependency(Annotation[] qualifiers, Object dep) {
this.qualifiers = D.createKeyForAnnotations(qualifiers);
this.qualifiers.addAll(Arrays.asList(qualifiers));
this.dep = dep;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof QualifiedDependency)) return false;
QualifiedDependency that = (QualifiedDependency) o;
if (dep != null ? !dep.equals(that.dep) : that.dep != null) return false;
if (qualifiers != null ? !qualifiers.equals(that.qualifiers) : that.qualifiers != null) return false;
return true;
}
@Override
public int hashCode() {
int result = qualifiers != null ? qualifiers.hashCode() : 0;
result = 31 * result + (dep != null ? dep.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "QualifiedDependency{" +
"qualifiers=" + qualifiers +
", dep=" + dep +
'}';
}
public boolean qualifiersEqual(Set<Annotation> qualifiers) {
if (qualifiers == null) {
if(this.qualifiers == null) {
return true;
}
return false;
}
if (this.qualifiers.size() != qualifiers.size()) {
return false;
}
for (Annotation qualifier : qualifiers) {
boolean found = false;
for (Annotation annotation : this.qualifiers) {
if (qualifier.annotationType().equals(annotation.annotationType())) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
}