/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.localserver.method;
import org.apache.log4j.Logger;
import java.util.Iterator;
import java.util.Map;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class MethodMap extends java.util.HashMap implements java.io.Serializable {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(MethodMap.class);
//~ Constructors -----------------------------------------------------------
/**
* Creates a new MethodMap object.
*/
public MethodMap() {
super();
}
/**
* constructor.
*
* @param capacity DOCUMENT ME!
* @param factor DOCUMENT ME!
*/
public MethodMap(final int capacity, final float factor) {
super(capacity, factor);
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
* @param method DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
* @throws java.lang.Exception DOCUMENT ME!
*/
public void add(final String key, final Method method) throws Exception {
if (!this.containsMethod(key)) {
super.put(method.getKey(), method);
} else {
final Method m = this.getMethod(key);
m.getPermissions().addPermissions(method.getPermissions()); // add only permissions
m.getClassKeys().addAll(method.getClassKeys());
if (m.isClassMultiple() != method.isClassMultiple()) { // wenn unterschiedliche Angaben wird alles auf
// false gesetzt
m.c_multiple = false;
}
if (m.isMultiple() != method.isMultiple()) {
m.o_multiple = false;
}
}
if (!containsMethod(method.getKey())) {
throw new java.lang.Exception("Couldn't add Method:" + method.getKey()); // NOI18N
}
}
/**
* /////////////////////////////////////////////////////////////
*
* @param key DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
* @throws NullPointerException DOCUMENT ME!
*/
public Method getMethod(final String key) throws Exception {
if (containsMethod(key)) {
final java.lang.Object candidate = super.get(key);
if (candidate instanceof Method) {
return (Method)candidate;
}
throw new NullPointerException("Entry is not a Method :" + key); // NOI18N
} // endif
throw new NullPointerException("No entry Method :" + key); // NOI18N // to be changed in further
// versions when exception concept is
// accomplished
} // end getMethod
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean containsMethod(final java.lang.Object key) {
return super.containsKey(key);
}
@Override
public void putAll(final Map t) {
if ((t == null) || t.isEmpty()) {
return;
}
final Iterator i = t.values().iterator();
while (i.hasNext()) {
final Method e = (Method)i.next();
try {
this.add((String)e.getKey(), e);
} catch (Exception ex) {
if (LOG != null) {
LOG.error("Error while adding method (putAll)", ex); // NOI18N
} else {
System.err.println("Error while adding method (putAll)/n" + ex.getMessage()); // NOI18N
}
}
}
}
}