package com.neverwinterdp.vm.client.shell; import java.util.Map; import java.util.TreeMap; public abstract class Command { private Map<String, Class<? extends SubCommand>> subcommands = new TreeMap<>() ; public void add(String name, Class<? extends SubCommand> type) { subcommands.put(name, type) ; } public void execute(Shell shell, CommandInput cmdInput) throws Exception { Class<? extends SubCommand> type = subcommands.get(cmdInput.getSubCommand()) ; SubCommand subcommand = type.newInstance(); if(subcommand == null) { throw new Exception("Unkown sub command for: " + cmdInput.getCommandLine()) ; } cmdInput.mapRemainArgs(subcommand); subcommand.execute(shell, cmdInput); } public Map<String, Class<? extends SubCommand>> getSubcommands() { return subcommands; } public abstract String getDescription(); }