package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale; import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition; import java.util.Comparator; import java.util.List; /** * This class can handle any type though the way it compares is inadequate for certain types. */ public class StringIndexedColumn extends IndexedColumn { private CharRange _charRange = new CharRange(); public StringIndexedColumn(List<Object[]> rows, int colIx, ColumnDisplayDefinition colDef) { super(rows, colIx, colDef); Comparator comparator = new Comparator<Object>() { @Override public int compare(Object ix1, Object ix2) { if( ix1 instanceof NoIx && ix2 instanceof NoIx) { return compareString(((NoIx) ix1).get(), ((NoIx) ix2).get()); } else if(ix1 instanceof NoIx) { return compareString(((NoIx) ix1).get(), getRow((Integer) ix2)); } else if(ix2 instanceof NoIx) { return compareString(getRow((Integer) ix1), ((NoIx) ix2).get()); } else { return compareString(getRow((Integer) ix1), getRow((Integer) ix2)); } } }; _charRange.beginInit(); sortIx(comparator); _charRange.endInit(); } private int compareString(Object o1, Object o2) { String s1 = null; if (null != o1) { s1 = o1.toString(); } String s2 = null; if (null != o2) { s2 = o2.toString(); } _charRange.init(s1); _charRange.init(s2); if(s1 == null && s2 != null) { return -1; } else if(s1 != null && s2 == null) { return 1; } else if(s1 == null && s2 == null) { return 0; } return s1.compareTo(s2); } public Calculator getCalculator() { return new StringCalculator(_charRange); } @Override public String calculateDist(Object beginData, Object endData) { return null; } }