package eu.leads.processor.execute; import net.sf.jsqlparser.schema.Column; import java.util.ArrayList; import java.util.Comparator; import java.util.List; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 11/4/13 * Time: 8:52 AM * To change this template use File | Settings | File Templates. */ public class TupleComparator implements Comparator<Tuple> { final List<Column> columns; final ArrayList<Integer> sign; final ArrayList<Boolean> arithmetic; public TupleComparator(List<Column> columns, List<Boolean> ascending, List<Boolean> arithmetic) { this.columns = new ArrayList<Column>(columns); this.arithmetic = new ArrayList<Boolean>(arithmetic); this.sign = new ArrayList<Integer>(); for (Boolean asc : ascending) { if (asc) sign.add(1); else sign.add(-1); } } @Override public int compare(Tuple o1, Tuple o2) { int index = 0; for (Column col : columns) { if (!o1.getAttribute(col.getColumnName()).equals(o2.getAttribute(col.getColumnName()))) { if (arithmetic.get(index)) { int result = compareNumbers(o1.getAttribute(col.getColumnName()), o2.getAttribute(col.getColumnName())); return result * sign.get(index); } else { int result = o1.getAttribute(col.getColumnName()).compareTo(o2.getAttribute(col.getColumnName())); return result * sign.get(index); } } index++; } return 0; } private int compareNumbers(String op1, String op2) { Double o1 = Double.valueOf(op1); Double o2 = Double.valueOf(op2); return o1.compareTo(o2); } private int compareStrings(String op1, String op2) { return op1.compareTo(op2); } }