001    package users;
002    
003    import java.io.*;
004    
005    import java.util.*;
006    
007    import users.events.*;
008    import users.swing.*;
009    import users.events.*;
010    
011    import util.*;
012    
013    /**
014     * Filters a UserManager's users with help of a UserFilter
015     *
016     * @see UserManager
017     * @see UserFilter
018     *
019     * @author Andreas Bartho
020     * @version 3.1 05/03/2003
021     * @since v3.1
022     */
023    public class UserManagerFilter extends UserManager {
024    
025        /**
026         * The UserManager to be filtered.
027         */
028        UserManager m_umManager = UserManager.getGlobalUM();
029    
030        /**
031         * The filter to be applied to the UserManager.
032         */UserFilter m_ufFilter = new UserFilter() {
033            public boolean match(User u) {
034                return true;
035            }
036        };
037    
038        /**
039         * Creates a new UserManagerFilter. The UserManager used is the globally set UserManager.
040         * All Users are visible, which means that the applied UserFilter returns true for every User.
041         * The UserManagerFilter created with this constructor behaves like a normal UserManager.
042         *
043         * @see UserManager#setGlobalUM
044         */public UserManagerFilter() {
045        }
046    
047        /**
048         * Creates a new UserManagerFilter from a given UserManager. All Users are visible,
049         * which means that the applied UserFilter returns true for every User.
050         *
051         * @param um The UserManager to be filtered.
052         */
053        public UserManagerFilter(UserManager um) {
054            m_umManager = um;
055        }
056    
057        /**
058         * Creates a new UserManagerFilter. The UserManager used is the globally set UserManager.
059         *
060         * @param uf The UserFilter to be applied.
061         *
062         * @see UserManager#setGlobalUM
063         *
064         */
065        public UserManagerFilter(UserFilter uf) {
066            m_ufFilter = uf;
067        }
068    
069        /**
070         * Creates a new UserManagerFilter from a given UserManager and a UserFilter.
071         *
072         * @param um The UserManager to be filtered.
073         * @param uf The UserFilter to be applied.
074         */
075        public UserManagerFilter(UserManager um, UserFilter uf) {
076            m_umManager = um;
077            m_ufFilter = uf;
078        }
079    
080        /**
081         * Sets the UserFilter. A previously set UserFilter will be replaced.
082         *
083         * @param uf The new UserFilter.
084         */
085        public void setFilter(UserFilter uf) {
086            m_ufFilter = uf;
087        }
088    
089        /**
090         * Returns all users registered with this UserManagerFilter's UserManager that match the filter.
091         */
092        public Collection getUsers() {
093            SortedMap sm = new TreeMap();
094            Iterator it = m_umManager.getUsers().iterator();
095            while (it.hasNext()) {
096                User u = (User)it.next();
097                if (m_ufFilter.match(u)) {
098                    sm.put(u.getName(), u);
099                }
100            }
101            return Collections.unmodifiableCollection(sm.values());
102        }
103    
104        public void addUserDataListener(UserDataListener udl) {
105            m_umManager.addUserDataListener(udl);
106        }
107    }