001 package biz.hammurapi.remoting;
002
003 import java.lang.reflect.Method;
004 import java.util.HashMap;
005 import java.util.Map;
006
007 public class MapLocalDelegate implements LocalDelegate {
008
009 private Map state = new HashMap();
010
011
012 public Object invoke(Object proxy, Method method, Object[] args, Remoter remoter) throws Throwable {
013 Class[] parameterTypes = method.getParameterTypes();
014 if (method.getName().length()>3) {
015 if (method.getName().startsWith("set") && parameterTypes.length==1 && void.class.equals(method.getReturnType())) {
016 state.put(method.getName().substring(3), args[0]);
017 return null;
018 }
019
020 if (method.getName().startsWith("get") && parameterTypes.length==0 && !void.class.equals(method.getReturnType())) {
021 return state.get(method.getName().substring(3));
022 }
023 }
024
025 if (Object.class.equals(method.getDeclaringClass())) {
026 return method.invoke(state, args);
027 }
028
029 String[] pt = new String[parameterTypes.length];
030 for (int i=0; i<pt.length; ++i) {
031 pt[i] = parameterTypes[i].getName();
032 }
033
034 return remoter.invoke(new Invocation(state, method.getDeclaringClass().getName(), method.getName(), pt, args));
035 }
036
037
038 }