package com.revolsys.swing.map.layer.record.table.model; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListSelectionModel; import com.revolsys.swing.map.layer.record.AbstractRecordLayer; import com.revolsys.swing.map.layer.record.LayerRecord; public class RecordLayerHighlightedListSelectionModel extends DefaultListSelectionModel { private static final long serialVersionUID = 1L; private final RecordLayerTableModel model; public RecordLayerHighlightedListSelectionModel(final RecordLayerTableModel model) { this.model = model; } @Override public void addSelectionInterval(final int index0, final int index1) { super.addSelectionInterval(convertRowIndexToModel(index0), convertRowIndexToModel(index1)); final List<LayerRecord> records = getObjects(index0, index1); final AbstractRecordLayer layer = this.model.getLayer(); layer.addHighlightedRecords(records); } public int convertRowIndexToModel(final int i) { return this.model.getTable().convertRowIndexToModel(i); } protected List<LayerRecord> getObjects(final int index0, final int index1) { final List<LayerRecord> records = new ArrayList<>(); for (int i = index0; i <= index1; i++) { final int rowIndex = convertRowIndexToModel(i); final LayerRecord record = this.model.getRecord(rowIndex); records.add(record); } return records; } @Override public boolean isSelectedIndex(final int index) { final int rowIndex = convertRowIndexToModel(index); final LayerRecord record = this.model.getRecord(rowIndex); if (record != null) { final AbstractRecordLayer layer = this.model.getLayer(); return layer.isHighlighted(record); } return false; } @Override public boolean isSelectionEmpty() { final AbstractRecordLayer layer = this.model.getLayer(); return layer.getHighlightedCount() == 0; } @Override public void removeSelectionInterval(final int index0, final int index1) { super.removeSelectionInterval(convertRowIndexToModel(index0), convertRowIndexToModel(index1)); final List<LayerRecord> records = getObjects(index0, index1); final AbstractRecordLayer layer = this.model.getLayer(); layer.unHighlightRecords(records); } @Override public void setSelectionInterval(final int index0, final int index1) { final List<LayerRecord> records = getObjects(index0, index1); final AbstractRecordLayer layer = this.model.getLayer(); layer.setHighlightedRecords(records); super.setSelectionInterval(convertRowIndexToModel(index0), convertRowIndexToModel(index1)); } }