package miage.shell.command; import java.io.PrintStream; import java.lang.reflect.Method; import java.util.Map.Entry; import miage.shell.Option; /** * * @author Schwartz Michaƫl <m.schwartz@epokmedia.fr> */ public abstract class AbstractActionCommand extends AbstractCommand { private PrintStream out; private PrintStream err; @Override protected final void execute(PrintStream out, PrintStream err) { this.out = out; this.err = err; if (this.values.size() > 0) { Entry<Option, String> firstOptionEntry = this.values.entrySet().iterator().next(); String firstOptionValue = firstOptionEntry.getValue(); Option firstOption = firstOptionEntry.getKey(); String optionName = firstOption.getName(); String actionName = optionName + "Action"; dataArguments.addFirst(firstOptionValue); Method actionMethod = null; try { actionMethod = this.getClass().getMethod(actionName); } catch (Exception ex) { err.println("No Action named : '"+actionName+"'"); } if (actionMethod != null) { try { actionMethod.invoke(this); } catch (Exception ex) { err.println("Cannot execute action named : '" +actionName+ "'"); } } } else { defaultAction(); } } protected final PrintStream getErr() { return err; } protected final PrintStream getOut() { return out; } protected abstract void defaultAction(); }