DEADSOFTWARE

Исправлена печать стактрейса при возникновении исключения в теле модуля/команде
[dsw-obn.git] / rtl / java / Launcher.java
1 import java.lang.reflect.*;
3 class Launcher
4 {
5 public static void main(String[] args)
6 throws Throwable
7 {
8 /* Этап 1: Сохраняем список параметров */
9 Args.args = args;
11 /* Этап 2: Получаем имена связки Модуль.Команда */
12 if(args == null || args.length < 1)
13 {
14 System.err.println("uses: Launcher Module[.Command] {Argumets}");
15 System.exit(1);
16 }
18 String moduleName = args[0];
19 String commandName = "";
20 int i = args[0].indexOf('.');
21 if(i >= 0)
22 {
23 moduleName = args[0].substring(0, i);
24 commandName = args[0].substring(i + 1);
25 if(commandName == "BEGIN")
26 {
27 commandName = "";
28 }
29 }
31 /* Этап 3: Выполнение тела модуля и команды */
32 Class<?> module = null;
33 Method begin = null;
34 Method command = null;
36 try {
37 module = Class.forName(moduleName);
38 } catch(ClassNotFoundException e) {
39 System.err.println("Module " + moduleName + " not found");
40 System.exit(1);
41 }
43 try {
44 begin = module.getMethod("BEGIN");
45 } catch(Exception e) {
46 System.err.println("Invalid module " + moduleName);
47 System.exit(1);
48 }
50 try {
51 begin.invoke(null);
52 } catch(IllegalAccessException e) {
53 System.err.println("Invalid module " + moduleName);
54 System.exit(1);
55 } catch(IllegalArgumentException e) {
56 System.err.println("Invalid module " + moduleName);
57 System.exit(1);
58 } catch(InvocationTargetException e) {
59 throw e.getTargetException();
60 }
62 if(commandName == "")
63 {
64 return;
65 }
67 try {
68 command = module.getMethod(commandName);
69 } catch(Exception e) {
70 System.err.println("Invalid command " + moduleName + "." + commandName);
71 System.exit(1);
72 }
74 try {
75 command.invoke(null);
76 } catch(IllegalAccessException e) {
77 System.err.println("Invalid command " + moduleName + "." + commandName);
78 System.exit(1);
79 } catch(IllegalArgumentException e) {
80 System.err.println("Invalid command " + moduleName + "." + commandName);
81 System.exit(1);
82 } catch(InvocationTargetException e) {
83 throw e.getTargetException();
84 }
85 }
86 }