/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.server; import org.apache.log4j.Logger; import java.util.Hashtable; import java.util.Vector; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public class ServerListHash extends Hashtable { //~ Static fields/initializers --------------------------------------------- // 'Elemente sind Vectoren von servern private static final transient Logger LOG = Logger.getLogger(ServerListHash.class); //~ Constructors ----------------------------------------------------------- /** * Creates a new ServerListHash object. */ public ServerListHash() { super(); init(); } /** * Creates a new ServerListHash object. * * @param capacity DOCUMENT ME! */ public ServerListHash(final int capacity) { super(capacity); init(); } /** * Creates a new ServerListHash object. * * @param capacity DOCUMENT ME! * @param loadfactor DOCUMENT ME! */ public ServerListHash(final int capacity, final float loadfactor) { super(capacity, loadfactor); init(); } //~ Methods ---------------------------------------------------------------- /** * ------------------------------------------------------------------------- */ private void init() { // FIXME: nasty workaround // Debug xxx not necessary if Xoption for Garbagecollector ist set new ServerType("", 1); // NOI18N final int[] types = ServerType.getAllServerTypes(); for (int i = 0; i < types.length; i++) { put(new Integer(types[i]), new Vector(5, 5)); } } /** * ------------------------------------------------------------------------------------------------- * * @param serverTyp DOCUMENT ME! * @param name DOCUMENT ME! * @param ip DOCUMENT ME! * @param port DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean addServer(final int serverTyp, final String name, final String ip, final String port) { Server s = findServer(serverTyp, name /*,ip,port*/); if (LOG.isDebugEnabled()) { LOG.debug("server there? " + name + " not null?" + s); // NOI18N } if (s == null) // not found { s = new Server(serverTyp, name, ip, port, port); if (containsKey(new Integer(serverTyp))) { getServerList(serverTyp).add(s); return true; } } LOG.error( "tried to add server " // NOI18N + name + " " // NOI18N + ip + " " // NOI18N + port + " but it's already there - or servertype is not defined type::" // NOI18N + serverTyp + " " // NOI18N + s); return false; } /** * DOCUMENT ME! * * @param serverTyp DOCUMENT ME! * * @return DOCUMENT ME! */ public Vector getServerList(final int serverTyp) { return (Vector)get(new Integer(serverTyp)); } /** * DOCUMENT ME! * * @param serverTyp DOCUMENT ME! * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ public Server getServer(final int serverTyp, final String name) { return findServer(serverTyp, name); } /** * DOCUMENT ME! * * @param serverTyp DOCUMENT ME! * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean removeServer(final int serverTyp, final String name) { final Server s = findServer(serverTyp, name); if (s != null) { if (containsKey(new Integer(serverTyp))) { getServerList(serverTyp).remove(s); return true; } } return false; } /** * DOCUMENT ME! * * @param serverTyp DOCUMENT ME! * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ protected Server findServer(final int serverTyp, final String name) { final Integer key = new Integer(serverTyp); if (!containsKey(key)) { return null; } else { final Vector s = getServerList(serverTyp); for (int i = 0; i < s.size(); i++) { final Server server = ((Server)s.get(i)); if (server.getName().equalsIgnoreCase(name)) { return server; } } } return null; } }