package com.revolsys.swing.map.layer.record.table; import java.util.Comparator; import com.revolsys.geometry.model.Geometry; import com.revolsys.logging.Logs; import com.revolsys.record.code.CodeTable; import com.revolsys.record.schema.FieldDefinition; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.swing.map.layer.record.AbstractRecordLayer; import com.revolsys.swing.map.layer.record.table.model.RecordLayerTableModel; import com.revolsys.swing.table.BaseRowSorter; public class RecordLayerTableRowSorter extends BaseRowSorter { private final AbstractRecordLayer layer; public RecordLayerTableRowSorter(final AbstractRecordLayer layer, final RecordLayerTableModel model) { super(model); this.layer = layer; } @Override public Comparator<?> getComparator(final int columnIndex) { final RecordLayerTableModel model = (RecordLayerTableModel)getModel(); final String fieldName = model.getColumnFieldName(columnIndex); final RecordDefinition recordDefinition = this.layer.getRecordDefinition(); final CodeTable codeTable = recordDefinition.getCodeTableByFieldName(fieldName); if (codeTable == null) { final Comparator<?> comparator = super.getComparator(columnIndex); if (comparator == null) { return this.layer.getComparator(fieldName); } else { return comparator; } } else { return codeTable; } } @Override public boolean isSortable(final int columnIndex) { final RecordLayerTableModel model = (RecordLayerTableModel)getModel(); final FieldDefinition fieldDefinition = model.getColumnFieldDefinition(columnIndex); if (fieldDefinition == null) { return true; } else { final Class<?> fieldClass = fieldDefinition.getTypeClass(); return !Geometry.class.isAssignableFrom(fieldClass); } } @Override public void toggleSortOrder(final int column) { try { super.toggleSortOrder(column); } catch (final NullPointerException e) { Logs.debug(this, "Unable to toggle sort order", e); } } }