package es.udc.cartolab.gvsig.navtable.utils;
import java.text.Collator;
import java.util.Comparator;
import org.apache.log4j.Logger;
import com.hardcode.gdbms.engine.values.BinaryValue;
import com.hardcode.gdbms.engine.values.BooleanValue;
import com.hardcode.gdbms.engine.values.ComplexValue;
import com.hardcode.gdbms.engine.values.DateValue;
import com.hardcode.gdbms.engine.values.NullValue;
import com.hardcode.gdbms.engine.values.NumericValue;
import com.hardcode.gdbms.engine.values.StringValue;
import com.hardcode.gdbms.engine.values.TimeValue;
import com.hardcode.gdbms.engine.values.TimestampValue;
import com.hardcode.gdbms.engine.values.Value;
public class ValueComparator implements Comparator<Value> {
private static final Logger logger = Logger
.getLogger(ValueComparator.class);
@Override
/**
* Prerequisite: o1 and o2 are instances of the same class
*/
public int compare(Value o1, Value o2) {
// Value
// ValueFactory.getValueByType
if (o1 instanceof NullValue) {
return 1;
} else if (o2 instanceof NullValue) {
return -1;
} else if (o1 instanceof NumericValue) {
// } else if (o1 instanceof ByteValue) { // extends Numeric
// } else if (o1 instanceof DoubleValue) { // extends Numeric
// } else if (o1 instanceof FloatValue) { // extends Numeric
// } else if (o1 instanceof IntValue) { // extends Numeric
// } else if (o1 instanceof LongValue) { // extends Numeric
// } else if (o1 instanceof ShortValue) { // extends Numeric
return Double.compare(((NumericValue) o1).doubleValue(),
((NumericValue) o2).doubleValue());
} else if (o1 instanceof StringValue) {
Collator collator = Collator.getInstance();
collator.setStrength(Collator.IDENTICAL);
return collator.compare(o1.toString(), o2.toString());
} else if (o1 instanceof BooleanValue) {
// false first. if equals not matters to switch it
int comp = ((BooleanValue) o1).getValue() ? 1 : -1;
return comp;
} else if (o1 instanceof DateValue) {
return ((DateValue) o1).getValue().compareTo(
((DateValue) o2).getValue());
} else if (o1 instanceof BinaryValue) {
logger.error("\n\nNot implemented\n\n");
} else if (o1 instanceof ComplexValue) { // extends String
logger.error("\n\nNot implemented\n\n");
} else if (o1 instanceof NullValue) {
logger.error("\n\nNot implemented\n\n");
} else if (o1 instanceof TimestampValue) {
logger.error("\n\nNot implemented\n\n");
} else if (o1 instanceof TimeValue) {
logger.error("\n\nNot implemented\n\n");
}
return 0;
}
}