001
014
015 package com.liferay.portal.kernel.util;
016
017 import java.io.Serializable;
018
019 import java.lang.reflect.Method;
020 import java.lang.reflect.Modifier;
021
022 import java.util.Arrays;
023
024
027 public class MethodHandler implements Serializable {
028
029 public MethodHandler(Method method, Object... arguments) {
030 this(new MethodKey(method), arguments);
031 }
032
033 public MethodHandler(MethodKey methodKey, Object... arguments) {
034 _methodKey = methodKey;
035 _arguments = arguments;
036 }
037
038 public Object[] getArguments() {
039 Object[] arguments = new Object[_arguments.length];
040
041 System.arraycopy(_arguments, 0, arguments, 0, _arguments.length);
042
043 return arguments;
044 }
045
046 public MethodKey getMethodKey() {
047 return _methodKey;
048 }
049
050 public Object invoke(boolean newInstance) throws Exception {
051 Method method = _methodKey.getMethod();
052
053 Object targetObject = null;
054
055 if (newInstance && !Modifier.isStatic(method.getModifiers())) {
056 Class<?> targetClass = _methodKey.getDeclaringClass();
057
058 targetObject = targetClass.newInstance();
059 }
060
061 return method.invoke(targetObject, _arguments);
062 }
063
064 public Object invoke(Object target) throws Exception {
065 Method method = _methodKey.getMethod();
066
067 return method.invoke(target, _arguments);
068 }
069
070 @Override
071 public String toString() {
072 StringBundler sb = new StringBundler(5);
073
074 sb.append("{arguments=");
075 sb.append(Arrays.toString(_arguments));
076 sb.append(", methodKey=");
077 sb.append(_methodKey);
078 sb.append("}");
079
080 return sb.toString();
081 }
082
083 private Object[] _arguments;
084 private MethodKey _methodKey;
085
086 }