/*
* Created at 16.04.2004 20:22:28
* Copyright (c) 2004 by Norman Fomferra
*/
package com.bc.util.prop;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BeanMethodRegistry {
private static final BeanMethodRegistry settersInstance = new BeanMethodRegistry();
private static final BeanMethodRegistry gettersInstance = new BeanMethodRegistry();
private Map typeMap;
private BeanMethodRegistry() {
typeMap = new HashMap();
}
public static BeanMethodRegistry getSettersInstance() {
return settersInstance;
}
public static BeanMethodRegistry getGettersInstance() {
return gettersInstance;
}
public synchronized Method get(Class beanClass, String propertyName) {
checkArgs(beanClass, propertyName);
final Map map = (Map) typeMap.get(beanClass);
if (map == null) {
return null;
}
return (Method) map.get(propertyName);
}
public synchronized void put(Class beanClass, String propertyName, Method method) {
checkArgs(beanClass, propertyName);
if (get(beanClass, propertyName) != null) {
throw new IllegalArgumentException("method is already registered");
}
Map map = (Map) typeMap.get(beanClass);
if (map == null) {
map = new HashMap();
typeMap.put(beanClass, map);
}
map.put(propertyName, method);
// System.out.println("BeanMethodRegistry.put:");
// System.out.println(" beanClass = " + beanClass.getName());
// System.out.println(" propertyName = " + propertyName);
// System.out.println(" method = " + method.getName());
}
public synchronized Method remove(Class beanClass, String propertyName) {
checkArgs(beanClass, propertyName);
Map map = (Map) typeMap.get(beanClass);
if (map != null) {
return (Method) map.remove(propertyName);
} else {
return null;
}
}
public void clear() {
typeMap.clear();
}
private void checkArgs(Class beanClass, String propertyName) {
if (beanClass == null) {
throw new IllegalArgumentException("beanClass is null");
}
if (propertyName == null) {
throw new IllegalArgumentException("propertyName is null");
}
}
}