package topasin.compare;
import org.apache.commons.lang3.StringUtils;
import topasin.util.AsinDetail;
import topasin.util.TopAsinContext;
/**
* this comparator is for single integer field compare.
*
* @author mengzang
*
*/
public final class SingleStringFieldAsinComparable implements AsinComparable {
private static int COMPARE_INDEX = -1;
private String compareValueOrig = NULL_VALUE;
private String compareValueNew = NULL_VALUE;
private static final String NULL_VALUE = "<Null>";
public static void initialAsinCompareField(String compareIndexName) {
COMPARE_INDEX = AsinDetail.getIndexFromFieldName(compareIndexName);
AsinDetail.addNeededFields(compareIndexName);
}
@Override
public void fillCompareFields(AsinDetail asinDetail, int source) {
if (TopAsinContext.ORIG_SOURCE == source) {
compareValueOrig = asinDetail.getStringFieldValue(COMPARE_INDEX);
} else if (TopAsinContext.NEW_SOURCE == source) {
compareValueNew = asinDetail.getStringFieldValue(COMPARE_INDEX);
}
}
@Override
public boolean isValidAsinForTopAsin() {
return StringUtils.equals(compareValueOrig, compareValueNew) == false;
}
private int getCompareDiff() {
return compareValueOrig.compareTo(compareValueNew);
}
private int getCompareDiffAbs() {
return Math.abs(getCompareDiff());
}
@Override
public int compareForTopAsin(AsinComparable asin) {
return compareAbsDiff((SingleStringFieldAsinComparable) asin);
}
@Override
public int compareForOutputSort(AsinComparable asin) {
return -1 * compareAbsDiff((SingleStringFieldAsinComparable) asin);
}
private int compareAbsDiff(SingleStringFieldAsinComparable asin) {
if (asin == null) {
return 1;
}
return this.getCompareDiffAbs() - asin.getCompareDiffAbs();
}
@Override
public String getCompareDiffDisplayValue() {
return String.valueOf(this.getCompareDiff());
}
@Override
public String getCompareOrigDisplayValue() {
return compareValueOrig;
}
@Override
public String getCompareNewDisplayValue() {
return compareValueNew;
}
@Override
public String toString() {
return "SingalIntegerFieldAsinComparable [compareValueOrig=" + compareValueOrig + ", compareValueNew="
+ compareValueNew + ", compareAbsDiff=" + this.getCompareDiff() + "]";
}
}