package topasin.compare;
import topasin.util.AsinDetail;
import topasin.util.TopAsinContext;
/**
* this comparator is for single integer field compare.
*
* @author mengzang
*
*/
public final class SingleIntegerFieldAsinComparable implements AsinComparable {
private static int COMPARE_INDEX = -1;
private int compareValueOrig = TopAsinSelectionOptionHelper.NULL_VALUE;
private int compareValueNew = TopAsinSelectionOptionHelper.NULL_VALUE;
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.getIntFieldValue(COMPARE_INDEX);
} else if (TopAsinContext.NEW_SOURCE == source) {
compareValueNew = asinDetail.getIntFieldValue(COMPARE_INDEX);
}
}
@Override
public boolean isValidAsinForTopAsin() {
return TopAsinSelectionOptionHelper.applyTopAsinSelectionOption(compareValueOrig, compareValueNew);
}
private int getCompareDiff() {
int diff = 0;
boolean hasNew = compareValueNew >= 0;
boolean hasOrig = compareValueOrig >= 0;
if (hasNew == true && hasOrig == true) {
// in both
diff = compareValueNew - compareValueOrig;
} else if (hasNew == true && hasOrig == false) {
// only in new
diff = compareValueNew - 0;
} else if (hasNew == false && hasOrig == true) {
// only in orig
diff = 0 - compareValueOrig;
}
return diff;
}
private int getCompareDiffAbs() {
return Math.abs(getCompareDiff());
}
@Override
public int compareForTopAsin(AsinComparable asin) {
return compareAbsDiff((SingleIntegerFieldAsinComparable) asin);
}
@Override
public int compareForOutputSort(AsinComparable asin) {
return -1 * compareAbsDiff((SingleIntegerFieldAsinComparable) asin);
}
private int compareAbsDiff(SingleIntegerFieldAsinComparable asin) {
if (asin == null) {
return 1;
}
return this.getCompareDiffAbs() - asin.getCompareDiffAbs();
}
@Override
public String getCompareDiffDisplayValue() {
return String.valueOf(this.getCompareDiff());
}
@Override
public String getCompareOrigDisplayValue() {
if (this.compareValueOrig < 0) {
return "N/A";
}
return String.valueOf(this.compareValueOrig);
}
@Override
public String getCompareNewDisplayValue() {
if (this.compareValueNew < 0) {
return "N/A";
}
return String.valueOf(this.compareValueNew);
}
@Override
public String toString() {
return "SingalIntegerFieldAsinComparable [compareValueOrig=" + compareValueOrig + ", compareValueNew="
+ compareValueNew + ", compareAbsDiff=" + this.getCompareDiff() + "]";
}
}