package osm.surveyor.matchtime.gui;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
public class Command extends Thread {
String[] args; // コマンドパラメータ
private String commandName = ""; // コマンド名
@SuppressWarnings({ "rawtypes" })
private final Class cmd; // 実行対象インスタンス
/**
* コンストラクタ:実行対象のインスタンスを得る
* @param cmd
*/
public Command(Class<?> cmd) {
super();
this.cmd = cmd;
this.commandName = cmd.getName();
this.args = new String[0];
}
/**
* コマンドパラメータの設定
* @param args
*/
public void setArgs(String[] args) {
this.args = args;
}
public void setCommandName(String name) {
this.commandName = name;
}
public String getCommandName() {
return this.commandName;
}
@SuppressWarnings("unchecked")
@Override
public void run() {
System.out.println("[START:"+ (new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss")).format(new java.util.Date()) +"]\t"+ this.commandName);
for (int i=0; i < args.length; i++) {
System.out.println(" args["+ i +"]: "+ this.args[i]);
}
System.out.println();
try {
try {
java.lang.reflect.Method method = this.cmd.getMethod("main", new Class[] {String[].class});
method.setAccessible(true);
method.invoke(null, new Object[]{this.args});
System.out.println();
System.out.println("[END:"+ (new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss")).format(new java.util.Date()) +"]\t"+ this.commandName);
}
catch (InvocationTargetException e) {
System.out.println("[ERR!:"+ (new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss")).format(new java.util.Date()) +"]\t"+ this.commandName);
throw e;
}
catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException e) {
System.out.println("[ERR!:"+ (new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss")).format(new java.util.Date()) +"]\t"+ this.commandName);
throw e;
}
}
catch(InvocationTargetException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException e) {
e.printStackTrace(System.out);
}
System.out.println();
}
}