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 * ID for serialization. 025 */ 026 private static final long serialVersionUID = 1360051367774625013L; 027 028 /** 029 * The currently selected user. 030 * 031 * @serial 032 */ 033 protected User m_usrSelection; 034 035 /** 036 * Create a new UserComboBoxModel modelling the global UserManager. 037 */ 038 public UserComboBoxModel() { 039 super(); 040 } 041 042 /** 043 * Create a new UserComboBoxModel modelling the global UserManager. 044 * 045 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will 046 * occur. 047 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared 048 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names. 049 */ 050 public UserComboBoxModel(UserFilter uf, Comparator<User> cmp) { 051 super(uf, cmp); 052 } 053 054 /** 055 * Create a new UserComboBoxModel modelling a given UserManager. 056 * 057 * @param um the UserManager to be modelled. 058 */ 059 public UserComboBoxModel(UserManager um) { 060 super(um); 061 } 062 063 /** 064 * Create a new UserComboBoxModel modelling a given UserManager. 065 * 066 * @param um the UserManager to be modelled. 067 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will 068 * occur. 069 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared 070 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names. 071 */ 072 public UserComboBoxModel(UserManager um, UserFilter uf, Comparator<User> cmp) { 073 super(um, uf, cmp); 074 } 075 076 // ComboBoxModel interface methods 077 078 /** 079 * Return the currently selected user. 080 * 081 * @return the currently selected user. 082 * 083 * @override Never 084 */ 085 public Object getSelectedItem() { 086 // make sure our model is up to date 087 ((ListenerHelper)listenerList).needModelUpdate(); 088 089 return m_usrSelection; 090 } 091 092 /** 093 * Set the currently selected user, making sure that it is known to the 094 * <code>UserManager</code>. If the given <code>User</code> is not known to the <code>UserManager</code>, 095 * the selection is not altered. 096 * 097 * @param oSelectedItem the new selection. 098 * 099 * @override Never 100 */ 101 public void setSelectedItem(Object oSelectedItem) { 102 // make sure our model is up to date 103 ((ListenerHelper)listenerList).needModelUpdate(); 104 105 if (m_lUsers.contains(oSelectedItem)) { 106 m_usrSelection = (User)oSelectedItem; 107 108 fireContentsChanged(this, 0, m_lUsers.size() - 1); 109 } 110 } 111 112 // HelpableListener interface method 113 /** 114 * Update the local model. 115 * 116 * @override Never 117 */ 118 public void updateModel() { 119 super.updateModel(); 120 121 if ((m_usrSelection != null) && (!m_lUsers.contains(m_usrSelection))) { 122 m_usrSelection = null; 123 124 fireContentsChanged(this, 0, m_lUsers.size() - 1); 125 } 126 } 127 }