Inceptum/launcher-cli/src/main/java/io/gitlab/jfronny/inceptum/cli/Command.java

58 lines
1.8 KiB
Java
Raw Normal View History

2022-09-04 21:21:24 +02:00
package io.gitlab.jfronny.inceptum.cli;
2021-10-30 22:05:24 +02:00
import java.util.*;
2021-10-30 22:05:24 +02:00
public abstract class Command {
private final String help;
2022-01-04 20:49:57 +01:00
private final String usage;
2021-10-30 22:05:24 +02:00
private final List<String> aliases;
private final Collection<Command> subCommands;
2021-10-30 22:05:24 +02:00
2022-01-04 20:49:57 +01:00
public Command(String help, String usage, String... aliases) {
this(help, usage, Arrays.asList(aliases), List.of());
}
2022-01-04 20:49:57 +01:00
public Command(String help, String usage, List<String> aliases, List<Command> subCommands) {
2021-10-30 22:05:24 +02:00
this.help = help;
2022-01-04 20:49:57 +01:00
this.usage = usage;
this.aliases = List.copyOf(aliases);
this.subCommands = List.copyOf(subCommands);
2021-10-30 22:05:24 +02:00
}
public boolean isAlias(String text) {
return aliases.contains(text.replaceAll("^[-/]*", "").toLowerCase(Locale.ROOT));
}
public String getName() {
return aliases.get(0);
}
public boolean enableLog() {
return false;
}
protected abstract void invoke(CommandArgs args) throws Exception;
public CommandResolution resolve(CommandArgs args) {
if (args.length != 0) {
for (Command command : subCommands) {
if (command.isAlias(args.get(0))) {
CommandResolution resolution = command.resolve(args.subArgs());
2022-01-04 20:49:57 +01:00
if (!aliases.isEmpty()) resolution.resolvePath().add(0, aliases.get(0));
return resolution;
}
}
}
return new CommandResolution(this, args, aliases.isEmpty()
? new ArrayList<>()
: new ArrayList<>(List.of(aliases.get(0))));
}
public void buildHelp(HelpBuilder builder) {
2022-01-04 20:49:57 +01:00
builder.writeCommand(aliases, help, usage);
for (Command command : subCommands) {
2022-01-04 20:49:57 +01:00
command.buildHelp(aliases.isEmpty() ? builder : builder.beginSubcommand(aliases.get(0)));
}
}
2021-10-30 22:05:24 +02:00
}