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.Channel;
import com.esri.geoevent.solutions.transport.irc.jerklib.EventToken;
import com.esri.geoevent.solutions.transport.irc.jerklib.events.IRCEvent;
import com.esri.geoevent.solutions.transport.irc.jerklib.events.TopicEvent;
import com.esri.geoevent.solutions.transport.irc.jerklib.events.impl.TopicEventImpl;
/*
:sterling.freenode.net 332 scrip #test :Welcome to #test - This channel is
:sterling.freenode.net 333 scrip #test LuX 1159267246
*/
public class TopicParser implements CommandParser
{
private Map<Channel, TopicEvent> topicMap = new HashMap<Channel, TopicEvent>();
public IRCEvent createEvent(EventToken token, IRCEvent event)
{
if(token.numeric() == 332)
{
TopicEvent tEvent = new TopicEventImpl
(
token.data(),
event.getSession(),
event.getSession().getChannel(token.arg(1)),
token.arg(2)
);
if (topicMap.containsValue(tEvent.getChannel()))
{
((TopicEventImpl) topicMap.get(tEvent.getChannel())).appendToTopic(tEvent.getTopic());
}
else
{
topicMap.put(tEvent.getChannel(), tEvent);
}
}
else
{
Channel chan = event.getSession().getChannel(token.arg(1));
if (topicMap.containsKey(chan))
{
TopicEventImpl tEvent = (TopicEventImpl) topicMap.get(chan);
topicMap.remove(chan);
tEvent.setSetBy(token.arg(2));
tEvent.setSetWhen(token.arg(3));
chan.setTopicEvent(tEvent);
return tEvent;
}
}
return event;
}
}