/* * UserList.java */ package project1; import java.awt.*; import java.util.*; public class UserList extends java.awt.List { protected Hashtable vid2name = new Hashtable(); protected Hashtable name2vid = new Hashtable(); UserListObserver observer; public UserList(UserListObserver observer) { this.observer = observer; } public synchronized void addUser(int vid, String name) { if(name.compareTo("")!=0 && name!=null) { String oldName = (String) vid2name.get(new Integer(vid)); if (oldName != null) { name2vid.remove(oldName); replaceItem(name, findItem(oldName)); } else { vid2name.put(new Integer(vid), name); addItem(name); } vid2name.put(new Integer(vid), name); name2vid.put(name, new Integer(vid)); } } public synchronized void addPrefix(int vid, String prefix) { String oldName = (String) vid2name.get(new Integer(vid)); if (oldName != null) { name2vid.remove(oldName); replaceItem(prefix+oldName, findItem(oldName)); } vid2name.put(new Integer(vid), prefix+oldName); name2vid.put(prefix+oldName, new Integer(vid)); } public synchronized void subtractPrefix(int vid, int startOffset) { String oldName = (String) vid2name.get(new Integer(vid)); if (oldName != null) { name2vid.remove(oldName); replaceItem(oldName.substring(startOffset), findItem(oldName)); } vid2name.put(new Integer(vid), oldName.substring(startOffset)); name2vid.put(oldName.substring(startOffset), new Integer(vid)); } public synchronized void removeUser(int vid) { String name = (String) vid2name.get(new Integer(vid)); int pos = findItem(name); if (pos >= 0) { if (pos == getSelectedIndex()) { observer.onUserListDeselect(); } delItem(pos); vid2name.remove(new Integer(vid)); name2vid.remove(name); } } public synchronized void removeAllUsers() { clear(); vid2name.clear(); name2vid.clear(); } public void selectUser(int vid) { int pos = findItem((String) vid2name.get(new Integer(vid))); if (pos >= 0) { select(pos); observer.onUserListSelect(vid); } } // return the VID of the currently selected // item, or -1 if nothing selected private int getSelectedUser() { return ((Integer) name2vid.get(getSelectedItem())).intValue(); } private int findItem(String name) { for (int i = 0; i < countItems(); i++) { if (getItem(i).equals(name)) return i; } return -1; } public String getUserName(int vid) { return ((String) vid2name.get(new Integer(vid))); } public boolean handleEvent(Event evt) { switch (evt.id) { case Event.LIST_SELECT: observer.onUserListSelect(getSelectedUser()); return true; case Event.LIST_DESELECT: observer.onUserListDeselect(); return true; default: return super.handleEvent(evt); } } }