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;
import com.revolsys.swing.map.layer.record.table.RecordLayerTable;
public class RecordLayerListSelectionModel extends DefaultListSelectionModel {
private static final long serialVersionUID = 1L;
private final RecordLayerTableModel model;
public RecordLayerListSelectionModel(final RecordLayerTableModel model) {
this.model = model;
}
@Override
public void addSelectionInterval(final int index0, final int index1) {
final List<LayerRecord> records = getRecords(index0, index1);
final AbstractRecordLayer layer = this.model.getLayer();
layer.addSelectedRecords(records);
super.addSelectionInterval(index0, index1);
}
public int convertRowIndexToModel(final int i) {
final RecordLayerTable table = this.model.getTable();
return table.convertRowIndexToModel(i);
}
protected List<LayerRecord> getRecords(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();
final boolean selected = layer.isSelected(record);
return selected;
}
return false;
}
@Override
public boolean isSelectionEmpty() {
final AbstractRecordLayer layer = this.model.getLayer();
return layer.getSelectionCount() == 0;
}
@Override
public void removeSelectionInterval(final int index0, final int index1) {
final List<LayerRecord> records = getRecords(index0, index1);
final AbstractRecordLayer layer = this.model.getLayer();
layer.unSelectRecords(records);
super.removeSelectionInterval(index0, index1);
}
@Override
public void setSelectionInterval(int index0, final int index1) {
if (index0 == -1 || index1 == -1) {
return;
} else if (getSelectionMode() == SINGLE_SELECTION) {
index0 = index1;
}
final boolean valueIsAdjusting = getValueIsAdjusting();
try {
setValueIsAdjusting(true);
final List<LayerRecord> records = getRecords(index0, index1);
final AbstractRecordLayer layer = this.model.getLayer();
layer.setSelectedRecords(records);
super.setSelectionInterval(index0, index1);
} finally {
setValueIsAdjusting(valueIsAdjusting);
}
}
}