001package com.hammurapi.common.concurrent; 002 003import java.lang.reflect.Method; 004import java.util.concurrent.ExecutorService; 005 006/** 007 * Adapts java.lang.reflect.Method to Invocable. 008 * @author Pavel Vlasov 009 * 010 * @param <C> 011 */ 012public class MethodInvocable<C> implements Invocable<C, Object, Object, InvocationException> { 013 014 Method method; 015 016 public MethodInvocable(Method method) { 017 super(); 018 this.method = method; 019 } 020 021 @Override 022 public Object invoke(C context, Invocation<Object> invocation, ExecutorService executorService) throws InvocationException { 023 try { 024 return method.invoke(context, invocation.getArguments()); 025 } catch (Exception e) { 026 throw new InvocationException(e); 027 } 028 }; 029 030 @Override 031 public Class<Object> getReturnType() { 032 return (Class<Object>) method.getReturnType(); 033 } 034 035 @Override 036 public Class<?>[] getParameterTypes() { 037 return method.getParameterTypes(); 038 } 039 040}