package com.github.masahitojp.botan.handler; import com.github.masahitojp.botan.Botan; import com.github.masahitojp.botan.message.BotanMessage; import java.util.function.Consumer; import java.util.regex.Pattern; public final class BotanMessageHandler implements Comparable { private final Botan botan; private String description; private String patternString; private Pattern pattern; private Consumer<BotanMessage> handle; private boolean hidden = false; private boolean allReceived = false; public BotanMessageHandler(final Botan botan) { this.botan = botan; } public final Pattern getPattern() { return this.pattern; } public final String getDescription() {return this.description;} public final void setPattern(final String str) { this.patternString = str; final String replyPattern; if (allReceived) { replyPattern = String.format("^(?!@?%s:?\\s+)%s", botan.getName(), str); } else { replyPattern = String.format("^@?%s:?\\s+%s", botan.getName(), str); } this.pattern = Pattern.compile(replyPattern, Pattern.DOTALL); } public final void setHandle(final Consumer<BotanMessage> handle) { this.handle = handle; } public final void apply(final BotanMessage message) { this.handle.accept(message); } public final void setDescription(final String description) { this.description = description; } public final void setAllReceived(final boolean allReceived) { this.allReceived = allReceived; } public final void setHidden (final boolean hidden) {this.hidden = hidden;} @Override public String toString() { if (hidden) { return ""; } else { final String prefix = this.allReceived ? "" : botan.getName() + " "; return String.format("> %s%s - %s", prefix, this.patternString, this.description); } } @Override public int compareTo(Object o) { BotanMessageHandler other = (BotanMessageHandler) o; if (other.allReceived) return 1; else return -1; } }