package users.swing;
import util.*;
import util.swing.*;
import users.*;
import users.events.*;
import data.events.*;
import java.io.*;
import java.util.*;
public class UserTableModel extends AbstractTableModel implements UserDataListener,
HelpableListener,
Serializable {
protected UserManager m_umManager;
public static abstract class UserComparator {
public abstract int compare (User obj, User obj1);
}
protected UserComparator m_cmpComparator = new UserComparator() {
public int compare (User obj, User obj1) {
return new NaturalComparator().compare (obj.getName(), obj1.getName());
}
};
protected List m_lKeys;
public UserTableModel (UserManager u,
UserComparator cmp,
TableEntryDescriptor ted) {
super (ted);
m_umManager = u;
if (cmp != null) {
m_cmpComparator = cmp;
}
listenerList = new ListenerHelper (this);
updateModel();
}
public Object getRecord (int row) {
((ListenerHelper) listenerList).needModelUpdate();
if ((row > -1) && (row < getRowCount())) {
return m_lKeys.get (row);
}
else {
return null;
}
}
public int getRowCount() {
((ListenerHelper) listenerList).needModelUpdate();
return m_lKeys.size();
}
public void subscribe() {
m_umManager.addUserDataListener (this);
}
public void unsubscribe() {
m_umManager.removeUserDataListener (this);
}
public synchronized void updateModel() {
List lKeys = new LinkedList (m_umManager.getUsers());
Collections.sort (lKeys, new Comparator() {
public int compare (Object o1, Object o2) {
return m_cmpComparator.compare ((User)o1,
(User)o2);
}
});
m_lKeys = lKeys;
}
public void userAdded (UserDataEvent e) {
updateModel();
int nIdx = m_lKeys.indexOf (e.getUser());
if (nIdx > -1) {
fireTableRowsInserted (nIdx, nIdx);
}
}
public void userDeleted (UserDataEvent e) {
int nIdx = m_lKeys.indexOf (e.getUser());
updateModel();
if (nIdx > -1) {
fireTableRowsDeleted (nIdx, nIdx);
}
}
}