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, null)); 035 } 036 037 038 }