001 package users.swing; 002 003 import javax.swing.*; 004 005 import users.*; 006 007 import util.*; 008 009 import java.util.*; 010 011 /** 012 * A ComboBoxModel modelling a UserManager. 013 * 014 * @see UserManager 015 * @see User 016 * 017 * @author Steffen Zschaler 018 * @version 2.0 05/05/1999 019 * @since v2.0 020 */ 021 public class UserComboBoxModel extends UserListModel implements ComboBoxModel { 022 023 /** 024 * The currently selected user. 025 * 026 * @serial 027 */ 028 protected User m_usrSelection; 029 030 /** 031 * Create a new UserComboBoxModel modelling the global UserManager. 032 */ 033 public UserComboBoxModel() { 034 super(); 035 } 036 037 /** 038 * Create a new UserComboBoxModel modelling the global UserManager. 039 * 040 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will 041 * occur. 042 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared 043 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names. 044 */ 045 public UserComboBoxModel(UserFilter uf, Comparator cmp) { 046 super(uf, cmp); 047 } 048 049 /** 050 * Create a new UserComboBoxModel modelling a given UserManager. 051 * 052 * @param um the UserManager to be modelled. 053 */ 054 public UserComboBoxModel(UserManager um) { 055 super(um); 056 } 057 058 /** 059 * Create a new UserComboBoxModel modelling a given UserManager. 060 * 061 * @param um the UserManager to be modelled. 062 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will 063 * occur. 064 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared 065 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names. 066 */ 067 public UserComboBoxModel(UserManager um, UserFilter uf, Comparator cmp) { 068 super(um, uf, cmp); 069 } 070 071 // ComboBoxModel interface methods 072 073 /** 074 * Return the currently selected user. 075 * 076 * @return the currently selected user. 077 * 078 * @override Never 079 */ 080 public Object getSelectedItem() { 081 // make sure our model is up to date 082 ((ListenerHelper)listenerList).needModelUpdate(); 083 084 return m_usrSelection; 085 } 086 087 /** 088 * Set the currently selected user, making sure that it is known to the 089 * <code>UserManager</code>. If the given <code>User</code> is not known to the <code>UserManager</code>, 090 * the selection is not altered. 091 * 092 * @param oSelectedItem the new selection. 093 * 094 * @override Never 095 */ 096 public void setSelectedItem(Object oSelectedItem) { 097 // make sure our model is up to date 098 ((ListenerHelper)listenerList).needModelUpdate(); 099 100 if (m_lUsers.contains(oSelectedItem)) { 101 m_usrSelection = (User)oSelectedItem; 102 103 fireContentsChanged(this, 0, m_lUsers.size() - 1); 104 } 105 } 106 107 // HelpableListener interface method 108 /** 109 * Update the local model. 110 * 111 * @override Never 112 */ 113 public void updateModel() { 114 super.updateModel(); 115 116 if ((m_usrSelection != null) && (!m_lUsers.contains(m_usrSelection))) { 117 m_usrSelection = null; 118 119 fireContentsChanged(this, 0, m_lUsers.size() - 1); 120 } 121 } 122 }