package chatty.gui;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.AbstractListModel;
/**
* The data model behind the userlist, sorts items.
*
* @author tduva
*/
public class UserlistModel<T extends Comparable> extends AbstractListModel {
ArrayList<T> data = new ArrayList<>();
public ArrayList<T> getData() {
return (ArrayList) data.clone();
}
@Override
public int getSize() {
return data.size();
}
@Override
public T getElementAt(int index) {
return data.get(index);
}
public void add(T item) {
int insertionPoint = findInsertionPoint(item);
data.add(insertionPoint, item);
super.fireIntervalAdded(this, insertionPoint, insertionPoint);
}
public void remove(T item) {
int index = data.indexOf(item);
if (index == -1) {
return;
}
data.remove(index);
super.fireIntervalRemoved(this, index, index);
}
private int findInsertionPoint(T item) {
int insertionPoint = Collections.binarySearch(data, item, null);
if (insertionPoint < 0) {
insertionPoint = -(insertionPoint + 1);
}
return insertionPoint;
}
public void updated(T item) {
int index = data.indexOf(item);
if (index == -1) {
return;
}
super.fireContentsChanged(this, index, index);
}
public void clear() {
if (!data.isEmpty()) {
super.fireIntervalRemoved(this, 0, data.size() - 1);
data.clear();
}
}
/**
* Manually sort entries. This may sometimes fix the sorting.
*/
public void sort() {
Collections.sort(data);
super.fireContentsChanged(this, 0, data.size() - 1);
}
/**
* Mark all entries as changed, so they get repainted.
*/
public void update() {
super.fireContentsChanged(this, 0, data.size() - 1);
}
}