package com.esri.geoevent.solutions.transport.irc.jerklib.parsers; import java.util.HashMap; import java.util.Map; import com.esri.geoevent.solutions.transport.irc.jerklib.EventToken; import com.esri.geoevent.solutions.transport.irc.jerklib.events.IRCEvent; /** * @author mohadib * */ public class DefaultInternalEventParser implements InternalEventParser { private final Map<String , CommandParser> parsers = new HashMap<String, CommandParser>(); private CommandParser defaultParser; public DefaultInternalEventParser() { initDefaultParsers(); } public IRCEvent receiveEvent(IRCEvent e) { EventToken eventToken = new EventToken(e.getRawEventData()); CommandParser parser = parsers.get(eventToken.command()); parser = parser == null? defaultParser : parser; return parser == null?e:parser.createEvent(eventToken, e); } public void removeAllParsers() { parsers.clear(); } public void addParser(String command , CommandParser parser) { parsers.put(command, parser); } public CommandParser getParser(String command) { return parsers.get(command); } public boolean removeParser(String command) { return parsers.remove(command) != null; } public void setDefaultParser(CommandParser parser) { defaultParser = parser; } public CommandParser getDefaultParser() { return defaultParser; } public void initDefaultParsers() { parsers.put("001" , new ConnectionCompleteParser()); parsers.put("002" , new ServerVersionParser()); parsers.put("005" , new ServerInformationParser()); CommandParser awayParser = new AwayParser(); parsers.put("301" , awayParser); parsers.put("305" , awayParser); parsers.put("306" , awayParser); parsers.put("314", new WhoWasParser()); WhoisParser whoisParser = new WhoisParser(); parsers.put("311", whoisParser); parsers.put("312", whoisParser); parsers.put("317", whoisParser); parsers.put("318", whoisParser); parsers.put("319", whoisParser); parsers.put("320", whoisParser); ChanListParser chanListParser = new ChanListParser(); parsers.put("321" , chanListParser); parsers.put("322" , chanListParser); parsers.put("324" , new ModeParser()); TopicParser topicParser = new TopicParser(); parsers.put("332", topicParser); parsers.put("333", topicParser); parsers.put("351" , new ServerVersionParser()); parsers.put("352", new WhoParser()); NamesParser namesParser = new NamesParser(); parsers.put("353" , namesParser); parsers.put("366" , namesParser); MotdParser motdParser = new MotdParser(); parsers.put("372", motdParser); parsers.put("375", motdParser); parsers.put("376", motdParser); parsers.put("PRIVMSG", new PrivMsgParser()); parsers.put("QUIT" , new QuitParser()); parsers.put("JOIN" , new JoinParser()); parsers.put("PART", new PartParser()); parsers.put("NOTICE", new NoticeParser()); parsers.put("TOPIC", new TopicUpdatedParser()); parsers.put("INVITE", new InviteParser()); parsers.put("NICK", new NickParser()); parsers.put("MODE", new ModeParser()); //numeric errors CommandParser errorParser = new NumericErrorParser(); for(int i = 401 ; i < 503 ; i++) { parsers.put(String.valueOf(i), errorParser); } parsers.put("433", new NickInUseParser()); } }