package cn.jimmyshi.beanquery.comparators;
import java.util.Comparator;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.jimmyshi.beanquery.DefaultNullValuePropertyValueGetter;
@SuppressWarnings("rawtypes")
public class PropertyComparator implements Comparator {
private transient Logger logger = LoggerFactory.getLogger(PropertyComparator.class);
private final String propertyName;
private final Comparator comparator;
public PropertyComparator(String propertyName, Comparator propertyValueComparator) {
this.propertyName = propertyName;
this.comparator = propertyValueComparator;
}
public PropertyComparator(String propertyName) {
this(propertyName, new ComparableObjectComparator());
}
@SuppressWarnings("unchecked")
@Override
public int compare(Object o1, Object o2) {
logger.debug("comparing [{}] and [{}] with comparator [{}].", o1, o2,this);
int result = 0;
Object property1 = DefaultNullValuePropertyValueGetter.getProperty(o1, propertyName);
Object property2 = DefaultNullValuePropertyValueGetter.getProperty(o2, propertyName);
result=comparator.compare(property1, property2);
logger.debug("Compare result is [{}]", result);
return result;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE,false);
}
}