/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server;
import java.util.HashMap;
import java.util.Hashtable;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class IpListHash extends Hashtable<Integer, HashMap<String, String>> {
//~ Constructors -----------------------------------------------------------
/**
* -------------------------------------------------------------------------
*/
public IpListHash() {
super();
init();
}
/**
* Creates a new IpListHash object.
*
* @param capacity DOCUMENT ME!
*/
public IpListHash(final int capacity) {
super(capacity);
init();
}
/**
* Creates a new IpListHash object.
*
* @param capacity DOCUMENT ME!
* @param factor DOCUMENT ME!
*/
public IpListHash(final int capacity, final float factor) {
super(capacity, factor);
init();
}
//~ Methods ----------------------------------------------------------------
/**
* -------------------------------------------------------------------------
*/
private void init() {
// FIXME: very nasty workaround!!!
// debug make sure class is loaded xxx
new ServerType("", 1); // NOI18N
final int[] types = ServerType.getAllServerTypes();
for (int i = 0; i < types.length; i++) {
put(new Integer(types[i]), new HashMap(10));
}
}
// -------------------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param serverTyp DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public boolean addServerIP(final int serverTyp, final String name, final String ip, final String port)
throws Exception {
// vorsicht xxx ip port werden ueberschrieben
if (!contains(serverTyp, name, ip, port)) {
getServerIPs(serverTyp).put(name, ip + ":" + port); // NOI18N
return true;
} else {
return false;
}
}
/**
* ----------------------------------------------------------------------
*
* @param serverTyp DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public boolean contains(final int serverTyp, final String name, final String ip, final String port)
throws Exception {
final HashMap<String, String> sms = getServerIPs(serverTyp);
if (sms.containsKey(name)) {
if (sms.get(name).equals(ip + ":" + port)) { // NOI18N
return true;
}
}
return false;
}
/**
* -------------------------------------------------------------------------
*
* @param server DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public boolean contains(final Server server) throws Exception {
return contains(server.getType(), server.getName(), server.getIP(), server.getServerPort());
}
/**
* Lievert zu einem definierten Servertyp alle Serverips in einer Datenstruktur StringMapsString.
*
* @param serverTyp DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public HashMap<String, String> getServerIPs(final int serverTyp) throws Exception {
return get(serverTyp);
}
/**
* liefert die IP eines Servers.
*
* @param serverTyp spezifiziert, um welchen Server es sich handelt (Call-,Local-,ProtocolServer), es sollen die
* Konstanten {@link #CALLSERVER CALLSERVER}, {@link #LOCALSERVER LOCALSERVER} und
* {@link #PROTOCOLSERVER PROTOCOLSERVER} benutzt werden. *
* @param name DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public String getServerIP(final int serverTyp, final String name) throws Exception {
return ((HashMap<String, String>)get(serverTyp)).get(name);
}
/**
* DOCUMENT ME!
*
* @param serverTyp DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public boolean removeServerIP(final int serverTyp, final String name, final String ip, final String port)
throws Exception {
final HashMap<String, String> serverIPs = getServerIPs(serverTyp);
if (contains(serverTyp, name, ip, port)) {
serverIPs.remove(name);
return true;
} else {
return false;
}
}
/**
* DOCUMENT ME!
*
* @param serverTyp DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public boolean removeIPForServerType(final int serverTyp) throws Exception {
if (remove(getServerIPs(serverTyp)) != null) {
return true;
} else {
return false;
}
}
}