Move nick changes into simple command handler.
[xudocci.git] / src / main / java / net / pterodactylus / irc / connection / SimpleCommandHandler.java
1 package net.pterodactylus.irc.connection;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import net.pterodactylus.irc.Reply;
8 import net.pterodactylus.irc.Source;
9
10 import com.google.common.base.Optional;
11
12 /**
13  * Handler that can process any number of events.
14  *
15  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
16  */
17 public class SimpleCommandHandler implements Handler {
18
19         private final Map<String, EventProcessor> commandEventSenders =
20                         new HashMap<>();
21
22         public SimpleCommandHandler addCommand(String command,
23                         EventProcessor eventProcessor) {
24                 commandEventSenders.put(command.toLowerCase(), eventProcessor);
25                 return this;
26         }
27
28         @Override
29         public boolean willHandle(Reply reply) {
30                 return commandEventSenders.containsKey(reply.command().toLowerCase());
31         }
32
33         @Override
34         public void handleReply(Reply reply) {
35                 EventProcessor eventProcessor =
36                                 commandEventSenders.get(reply.command().toLowerCase());
37                 eventProcessor.processEvent(reply.source(), reply.parameters());
38         }
39
40         /**
41          * Interface for event processors.
42          *
43          * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
44          */
45         @FunctionalInterface
46         public static interface EventProcessor {
47
48                 void processEvent(Optional<Source> source, List<String> parameters);
49
50         }
51
52 }