package jeql.api.row;
import java.util.Comparator;
import jeql.util.TypeUtil;
public class RowComparator
implements Comparator
{
private Comparator valueComparator = null;
public RowComparator() {
}
public RowComparator(Comparator valueComparator)
{
this.valueComparator = valueComparator;
}
public int compare(Object o1, Object o2)
{
Row r1 = (Row) o1;
Row r2 = (Row) o2;
if (r1.size() != r2.size())
throw new IllegalArgumentException("Rows are different sizes");
for (int i = 0; i < r1.size(); i++) {
Object v1 = r1.getValue(i);
Object v2 = r2.getValue(i);
// have to assume that null values are the same, since we don't have further type information
if (v1 == null && v2 == null)
return 0;
int comp = -999;
if (valueComparator != null)
comp = valueComparator.compare(v1, v2);
else
comp = TypeUtil.compareValue(v1, v2);
if (comp != 0)
return comp;
}
return 0;
}
}