package com.link_intersystems.swing;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractListModel;
public class SelectionModelBasedListModel extends AbstractListModel {
private static final long serialVersionUID = 2230029695674837365L;
private class SelectionModelUpdateDelegate implements
PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
SelectionModel<?> selectionModel = (SelectionModel<?>) evt
.getSource();
fireContentsChanged(this, 0, selectionModel.getSelection().size());
}
}
private SelectionModelUpdateDelegate selectionModelUpdateDelegate = new SelectionModelUpdateDelegate();
private SelectionModel<?> selectionModel;
public SelectionModelBasedListModel() {
}
public void setSelectionModel(SelectionModel<?> selectionModel) {
if (this.selectionModel != null) {
this.selectionModel
.removePropertyChangeListener(
SelectionModel.PROP_SELECTION,
selectionModelUpdateDelegate);
}
this.selectionModel = selectionModel;
if (this.selectionModel != null) {
this.selectionModel
.addPropertyChangeListener(SelectionModel.PROP_SELECTION,
selectionModelUpdateDelegate);
fireContentsChanged(this, 0, selectionModel.getSelection().size());
}
}
@Override
public int getSize() {
return selectionModel.getSelection().size();
}
@Override
public Object getElementAt(int index) {
return selectionModel.getSelection().get(index);
}
}