| package com.ibm.text.utility; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| |
| import com.ibm.icu.dev.test.util.BagFormatter; |
| |
| public class CallArgs { |
| static BagFormatter bf = new BagFormatter(); |
| |
| public static String getPrefix(Class c) { |
| String prefix = c.getName(); |
| int pos = prefix.lastIndexOf('.'); |
| if (pos < 0) return ""; |
| return prefix.substring(0,pos+1); |
| } |
| |
| public static void call(String[] args, String prefix) throws Exception { |
| |
| for (int i = 0; i < args.length; ++i) { |
| String arg = args[i]; |
| if (arg.startsWith("#")) break; // comments out rest of line |
| String[] methodArgs = null; |
| int par = arg.indexOf('('); |
| if (par >= 0) { |
| methodArgs = Utility.split(arg.substring(par+1, arg.length()-1),','); |
| arg = arg.substring(0,par); |
| } |
| int pos = arg.indexOf('.'); |
| Method method = null; |
| String className = "Main"; |
| String methodName = ""; |
| |
| if (pos >= 0) { |
| className = prefix + arg.substring(0,pos); |
| methodName = arg.substring(pos+1); |
| method = tryMethod(className, methodName, methodArgs); |
| } else { |
| method = tryMethod(className, arg, methodArgs); |
| if (method == null) { |
| className = arg; |
| methodName = "main"; |
| method = tryMethod(className, methodName, methodArgs); |
| } |
| } |
| if (method == null) throw new IllegalArgumentException("Bad parameter: " + className + ", " + methodName); |
| System.out.println(method.getName() + "\t" + bf.join(methodArgs)); |
| method.invoke(null,methodArgs); |
| } |
| } |
| private static Method tryMethod(String className, String methodName, String[] methodArgs) |
| throws IllegalAccessException, InvocationTargetException { |
| try { |
| Class foo = Class.forName(className); |
| Class[] parameterTypes = null; |
| if (methodArgs != null) { |
| parameterTypes = new Class[methodArgs.length]; |
| for (int i = 0; i < methodArgs.length; ++i) { |
| parameterTypes[i] = String.class; |
| } |
| } |
| return foo.getDeclaredMethod(methodName,parameterTypes); |
| } catch (Exception e) { |
| return null; |
| } |
| } |
| } |