X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=rtl%2Fjava%2FLauncher.java;h=98aceb8f179708caf8aba0bac33f6059d35befe4;hb=c3c7b7920e8061bd5f2820ccca1153bd2174fe01;hp=5077fa884a1620022ba77acc0ca4f32b1d7467a2;hpb=0f382f6efef254a295e71dc82ddd0f87b95aaddd;p=dsw-obn.git diff --git a/rtl/java/Launcher.java b/rtl/java/Launcher.java index 5077fa8..98aceb8 100644 --- a/rtl/java/Launcher.java +++ b/rtl/java/Launcher.java @@ -3,15 +3,84 @@ import java.lang.reflect.*; class Launcher { public static void main(String[] args) - throws - ClassNotFoundException, - InstantiationException, - IllegalAccessException, - NoSuchMethodException, - InvocationTargetException + throws Throwable { - Class module = Class.forName(args[0]); - Method begin = module.getMethod("BEGIN"); - begin.invoke(null); + /* Этап 1: Сохраняем список параметров */ + Args.args = args; + + /* Этап 2: Получаем имена связки Модуль.Команда */ + if(args == null || args.length < 1) + { + System.err.println("uses: Launcher Module[.Command] {Argumets}"); + System.exit(1); + } + + String moduleName = args[0]; + String commandName = ""; + int i = args[0].indexOf('.'); + if(i >= 0) + { + moduleName = args[0].substring(0, i); + commandName = args[0].substring(i + 1); + if(commandName == "BEGIN") + { + commandName = ""; + } + } + + /* Этап 3: Выполнение тела модуля и команды */ + Class module = null; + Method begin = null; + Method command = null; + + try { + module = Class.forName(moduleName); + } catch(ClassNotFoundException e) { + System.err.println("Module " + moduleName + " not found"); + System.exit(1); + } + + try { + begin = module.getMethod("BEGIN"); + } catch(Exception e) { + System.err.println("Invalid module " + moduleName); + System.exit(1); + } + + try { + begin.invoke(null); + } catch(IllegalAccessException e) { + System.err.println("Invalid module " + moduleName); + System.exit(1); + } catch(IllegalArgumentException e) { + System.err.println("Invalid module " + moduleName); + System.exit(1); + } catch(InvocationTargetException e) { + throw e.getTargetException(); + } + + if(commandName == "") + { + return; + } + + try { + command = module.getMethod(commandName); + } catch(Exception e) { + System.err.println("Invalid command " + moduleName + "." + commandName); + System.exit(1); + } + + try { + command.invoke(null); + } catch(IllegalAccessException e) { + System.err.println("Invalid command " + moduleName + "." + commandName); + System.exit(1); + } catch(IllegalArgumentException e) { + System.err.println("Invalid command " + moduleName + "." + commandName); + System.exit(1); + } catch(InvocationTargetException e) { + throw e.getTargetException(); + } } }