aboutsummaryrefslogtreecommitdiff
path: root/juick-commands/src/main/java/com/juick/command/Processor.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-commands/src/main/java/com/juick/command/Processor.java')
-rw-r--r--juick-commands/src/main/java/com/juick/command/Processor.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/juick-commands/src/main/java/com/juick/command/Processor.java b/juick-commands/src/main/java/com/juick/command/Processor.java
index bf38a1b3..51ce2830 100644
--- a/juick-commands/src/main/java/com/juick/command/Processor.java
+++ b/juick-commands/src/main/java/com/juick/command/Processor.java
@@ -10,6 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import javax.annotation.PostConstruct;
/**
* @author ma1uta
@@ -23,26 +26,48 @@ public class Processor {
private final Set<Command> commands;
@Setter
private ProtocolListener protocolListener;
+ private String help;
@Autowired
public Processor(Set<Command> commands) {
this.commands = commands;
}
+ @PostConstruct
+ public void init() {
+ this.help =
+ "HELP - returns this help message.\n" + getCommands().stream().map(Command::help).sorted().collect(Collectors.joining("\n"));
+ }
+
public String execute(User sender, String command) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Execute command: {}", command);
}
+ command = command != null ? command.trim() : "";
+ if ("help".equalsIgnoreCase(command)) {
+ LOGGER.debug("Show help");
+ return getHelp();
+ }
+ Command defaultCommand = null;
for (Command commandItem : getCommands()) {
- if (commandItem.pattern().matcher(command).matches()) {
+ Pattern pattern = commandItem.pattern();
+ if (pattern != null && pattern.matcher(command).matches()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Found command processor: {}", commandItem.getClass().getName());
}
- return commandItem.execute(sender, command);
+ return commandItem.execute(sender, getProtocolListener(), command);
+ } else {
+ defaultCommand = commandItem;
}
}
+ if (defaultCommand != null) {
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("Found default command processor: {}", defaultCommand.getClass().getName());
+ }
+ return defaultCommand.execute(sender, getProtocolListener(), command);
+ }
LOGGER.debug("Command processor not found, return help");
- return "";
+ return getHelp();
}
}