package ilarkesto.cli; import ilarkesto.auth.LoginRequiredException; import ilarkesto.base.Str; import ilarkesto.di.Context; import java.util.ArrayList; import java.util.Collection; public abstract class ACommand<A extends Arguments> { public abstract A createArguments(); public abstract void assertPermissions() throws LoginRequiredException; public abstract Object execute(A arguments) throws BadSyntaxException, CommandExecutionFailedException; public String getName() { String name = getClass().getSimpleName(); name = Str.removeSuffix(name, "Command"); name = name.toLowerCase(); return name; } private String description; public ACommand(String description) { this.description = description; } public String getDescription() { return description; } public Collection getAliases() { return new ArrayList(1); } public String getUsage() { return getName() + createArguments().getUsage(); } protected final <T> T autowire(T target) { return Context.get().autowire(target); } }