package hirondelle.stocks.table;
import hirondelle.stocks.util.HashCodeUtil;
import hirondelle.stocks.util.EqualsUtil;
public final class SortBy {
public SortBy(SortOrder aSortOrder, int aColumn) {
fSortOrder = aSortOrder;
fColumn = aColumn;
validateState();
}
public SortOrder getOrder() {
return fSortOrder;
}
public int getColumn() {
return fColumn;
}
public static final SortBy NONE = new SortBy();
public static final int NO_SELECTED_COLUMN = -1;
@Override public String toString() {
StringBuilder result = new StringBuilder();
String newLine = System.getProperty("line.separator");
result.append( this.getClass().getName() );
result.append(" {");
result.append(newLine);
result.append(" fSortOrder = ").append(fSortOrder).append(newLine);
result.append(" fColumn = ").append(fColumn).append(newLine);
result.append("}");
result.append(newLine);
return result.toString();
}
@Override public boolean equals( Object aThat ) {
if ( this == aThat ) return true;
if ( !(aThat instanceof SortBy) ) return false;
SortBy that = (SortBy)aThat;
return
EqualsUtil.areEqual(this.fSortOrder, that.fSortOrder) &&
EqualsUtil.areEqual(this.fColumn, that.fColumn)
;
}
@Override public int hashCode() {
int result = HashCodeUtil.SEED;
result = HashCodeUtil.hash( result, fSortOrder );
result = HashCodeUtil.hash( result, fColumn );
return result;
}
private final SortOrder fSortOrder;
private final int fColumn;
private void validateState() {
boolean hasValidState = (fSortOrder!=null) && (fColumn >= 0);
if ( !hasValidState ) throw new IllegalArgumentException(this.toString());
}
private SortBy(){
fSortOrder = SortOrder.DESCENDING;
fColumn = NO_SELECTED_COLUMN;
}
}