package com.link_intersystems.swing;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.AbstractListModel;
import javax.swing.ListModel;
/**
* A {@link ListModel} that is based upon a {@link List}.
*
* @author René Link <a
* href="mailto:rene.link@link-intersystems.com">[rene.link@link-
* intersystems.com]</a>
*
*/
public class ListAdapterListModel<E> extends AbstractListModel {
/**
*
*/
private static final long serialVersionUID = -3348705533107354297L;
private List<E> list = new ArrayList<E>();
public void setList(List<? extends E> list) {
List<E> oldList = new ArrayList<E>(this.list);
this.list.clear();
this.list.addAll(list);
if (!oldList.equals(list)) {
fireListDataChanged();
}
}
public void clear() {
this.list.clear();
fireListDataChanged();
}
private void fireListDataChanged() {
fireContentsChanged(this, 0, Math.max(list.size() - 1, 0));
}
public void addAll(List<? extends E> elements) {
if (this.list.addAll(elements)) {
fireIntervalAdded(elements.size());
}
}
protected void fireIntervalAdded(int elementCOunt) {
int index0 = list.size() - elementCOunt;
fireIntervalAdded(this, Math.max(0, index0),
Math.max(0, list.size() - 1));
}
/**
* Returns the list that this {@link ListAdapterListModel} is backed by.
*
* @return
*/
public List<E> getList() {
return Collections.unmodifiableList(list);
}
public int getSize() {
return list.size();
}
public E getElementAt(int index) {
E elementAt = list.get(index);
return elementAt;
}
public int indexOf(E element) {
return list.indexOf(element);
}
}