001    /**
002     * Jetrix TetriNET Server
003     * Copyright (C) 2001-2004  Emmanuel Bourg
004     *
005     * This program is free software; you can redistribute it and/or
006     * modify it under the terms of the GNU General Public License
007     * as published by the Free Software Foundation; either version 2
008     * of the License, or (at your option) any later version.
009     *
010     * This program is distributed in the hope that it will be useful,
011     * but WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013     * GNU General Public License for more details.
014     *
015     * You should have received a copy of the GNU General Public License
016     * along with this program; if not, write to the Free Software
017     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
018     */
019    
020    package net.jetrix.winlist;
021    
022    import java.util.*;
023    import java.util.logging.*;
024    
025    import net.jetrix.config.*;
026    
027    /**
028     * Winlist manager.
029     * 
030     * @author Emmanuel Bourg
031     * @version $Revision: 794 $, $Date: 2009-02-17 20:08:39 +0100 (Tue, 17 Feb 2009) $
032     */
033    public class WinlistManager
034    {
035        private static WinlistManager instance = new WinlistManager();
036        private Map<String,Winlist> winlists;
037    
038        private Logger log = Logger.getLogger("net.jetrix");
039    
040        private WinlistManager()
041        {
042            winlists = new TreeMap<String, Winlist>();
043        }
044    
045        public static WinlistManager getInstance()
046        {
047            return instance;
048        }
049    
050        /**
051         * Register a new winlist.
052         */
053        protected void addWinlist(Winlist winlist)
054        {
055            if (winlist != null && winlist.getId() != null)
056            {
057                winlists.put(winlist.getId(), winlist);
058                if (log.isLoggable(Level.FINE))
059                {
060                    log.fine("registered winlist " + winlist.getId());
061                }
062            }
063        }
064    
065        /**
066         * Declare a new winlist.
067         */
068        public void addWinlist(WinlistConfig config)
069        {
070            if (config != null && config.getName() != null && config.getClassname() != null)
071            {
072                try
073                {
074                    Class cls = Class.forName(config.getClassname());
075                    Winlist winlist = (Winlist) cls.newInstance();
076                    winlist.setId(config.getName());
077                    winlist.init(config);
078    
079                    addWinlist(winlist);
080                }
081                catch (Exception e)
082                {
083                    log.log(Level.WARNING, "Unable to create the winlist '" + config.getName() + "'", e);
084                }
085            }
086        }
087    
088        /**
089         * Return the winlist with the specified id.
090         */
091        public Winlist getWinlist(String id)
092        {
093            return (id == null) ? null : winlists.get(id);
094        }
095    
096        /**
097         * Return the registered winlists
098         *
099         * @since 0.2
100         */
101        public Collection<Winlist> getWinlists()
102        {
103            return winlists.values();
104        }
105    }