package org.jboss.mobicents.seam.listeners;
import javax.servlet.sip.SipSession;
import org.apache.log4j.Logger;
import org.jboss.mobicents.seam.util.DTMFUtils;
import org.mobicents.mscontrol.MsLink;
import org.mobicents.mscontrol.MsNotificationListener;
import org.mobicents.mscontrol.MsNotifyEvent;
import org.mobicents.mscontrol.events.MsEventFactory;
import org.mobicents.mscontrol.events.MsEventIdentifier;
import org.mobicents.mscontrol.events.MsRequestedEvent;
import org.mobicents.mscontrol.events.MsRequestedSignal;
import org.mobicents.mscontrol.events.dtmf.MsDtmfNotifyEvent;
import org.mobicents.mscontrol.events.dtmf.MsDtmfRequestedEvent;
import org.mobicents.mscontrol.events.pkg.DTMF;
public class DTMFListener implements MsNotificationListener{
public static final int DTMF_SESSION_STARTED = 1;
public static final int DTMF_SESSION_STOPPED = 2;
private static Logger logger = Logger.getLogger(DTMFListener.class);
MsEventFactory eventFactory;
MsLink link;
SipSession session;
private String pathToAudioDirectory;
public DTMFListener(MsEventFactory eventFactory, MsLink link, SipSession session, String pathToAudioDirectory) {
this.eventFactory = eventFactory;
this.link = link;
this.pathToAudioDirectory = pathToAudioDirectory;
this.session = session;
}
public void update(MsNotifyEvent evt) {
logger.info("event FQN " + evt.getEventID().getFqn());
MsEventIdentifier identifier = evt.getEventID();
if (identifier.equals(DTMF.TONE)) {
MsDtmfNotifyEvent event = (MsDtmfNotifyEvent) evt;
String signal = event.getSequence();
if(session.getAttribute("orderApproval") != null) {
if(session.getAttribute("adminApproval") != null) {
logger.info("admin approval in progress.");
DTMFUtils.adminApproval(session, signal, pathToAudioDirectory);
} else {
logger.info("customer approval in progress.");
DTMFUtils.orderApproval(session, signal, pathToAudioDirectory);
}
} else if(session.getAttribute("deliveryDate") != null) {
logger.info("delivery date update in progress.");
if(!DTMFUtils.updateDeliveryDate(session, signal)) {
MsDtmfRequestedEvent dtmf = (MsDtmfRequestedEvent) eventFactory.createRequestedEvent(DTMF.TONE);
MsRequestedSignal[] signals = new MsRequestedSignal[] {};
MsRequestedEvent[] events = new MsRequestedEvent[] { dtmf };
link.getEndpoints()[0].execute(signals, events, link);
}
}
}
}
public void resourceCreated(MsNotifyEvent arg0) {
// TODO Auto-generated method stub
}
public void resourceInvalid(MsNotifyEvent arg0) {
// TODO Auto-generated method stub
}
}