package org.marketcetera.core;
/**
* A wrapper for a string-typed Order ID that implements <code>Comparable</code> and first
* attempts to compare Order IDs as numerics, falling back onto alphanumeric comparison
* if either ID is not numerical.
*
* @author andrei@lissovski.org
*/
public class NumericStringSortable implements Comparable<NumericStringSortable> {
private String orderId;
public NumericStringSortable(String orderId) {
this.orderId = orderId;
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(NumericStringSortable that) {
try {
//agl attempt to compare as numerics
Long thisNumericOrderId = Long.valueOf(this.orderId); //non-i18n
Long thatNumericOrderId = Long.valueOf(that.orderId); //non-i18n
return thisNumericOrderId.compareTo(thatNumericOrderId);
} catch (NumberFormatException nfe) {
//agl either id is not numeric -- compare as strings
return this.orderId.compareTo(that.orderId);
}
}
@Override
public String toString() {
return orderId;
}
}