package pctelelog.ui.notify; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.swt.widgets.Display; import pctelelog.EventListener; import pctelelog.events.AbstractCallEvent; import pctelelog.events.AbstractEvent; import pctelelog.events.ClientConnectEvent; import pctelelog.events.IncomingCallEvent; import pctelelog.events.MissedCallEvent; public class EventHandler implements EventListener { private final Logger logger = LogManager.getLogger(EventHandler.class); private final Display m_display; public EventHandler(Display display) { if(display == null) { throw new NullPointerException("Display cannot be null"); } m_display = display; } public void onEvent(final AbstractEvent event) { getMainDisplay().asyncExec(new Runnable() { public void run() { handleEvent(event); } }); } private void handleEvent(AbstractEvent event) { logger.entry(event); if(event instanceof ClientConnectEvent) { connect(event); } else if(event instanceof IncomingCallEvent) { AbstractCallEvent cast = (AbstractCallEvent)event; incomingCall(cast); } else if(event instanceof MissedCallEvent) { AbstractCallEvent cast = (AbstractCallEvent)event; missedCall(cast); } logger.exit(); } private void incomingCall(AbstractCallEvent event) { EventWindow eventWindow = EventWindow.call(getMainDisplay(), event); EventWindowEffect effect = eventWindow.getEffect(); show(effect); } private void missedCall(AbstractCallEvent event) { EventWindow eventWindow = EventWindow.call(getMainDisplay(), event); EventWindowEffect effect = eventWindow.getEffect(); show(effect); } private void connect(AbstractEvent event) { EventWindow eventWindow = EventWindow.connect(getMainDisplay()); EventWindowEffect effect = eventWindow.getEffect(); show(effect); } private void show(final EventWindowEffect effect) { getMainDisplay().syncExec(effect); } private Display getMainDisplay() { return m_display; } }