package com.github.aesteve.vertx.nubes.reflections;
import com.github.aesteve.vertx.nubes.annotations.filters.AfterFilter;
import com.github.aesteve.vertx.nubes.annotations.filters.BeforeFilter;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.lang.reflect.Method;
public class Filter implements Comparable<Filter> {
private final int order;
private final Method method;
public Filter(Method method, AfterFilter annot) {
this.method = method;
this.order = annot.value();
}
public Filter(Method method, BeforeFilter annot) {
this.method = method;
this.order = annot.value();
}
@Override
public int compareTo(Filter other) {
if (other == null) {
return -1;
}
return Integer.compare(order, other.order);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Filter filter = (Filter) obj;
return new EqualsBuilder()
.append(order, filter.order)
.append(method, filter.method)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(method)
.append(order)
.toHashCode();
}
public Method method() {
return method;
}
}