import java.util.*;
import javax.telephony.*;
import javax.telephony.events.*;
import com.cisco.cti.util.Condition;
public class CiscoExchange extends TraceWindow implements ProviderObserver {
Vector actors = new Vector ();
Condition conditionInService = new Condition ();
Provider provider;
String ctiUser = "app_cti";
String ctiPass = "cisco";
String ciscoCallManagerServer = "10.42.40.250";
public CiscoExchange (String cti_userName, String cti_userPassword, String CiscoCMServer) {
ctiUser = cti_userName;
ctiPass = cti_userPassword;
ciscoCallManagerServer = CiscoCMServer;
System.out.println ( "Cisco Exchange Initialized" );
}
public String CiscoCMProviderString(){
return ciscoCallManagerServer + ";login=" + ctiUser + ";passwd=" + ctiPass;
}
public void ConnectNewCall(String OriginExtension, String DestinationNumber){
try {
JtapiPeer peer = JtapiPeerFactory.getJtapiPeer ( null );
System.out.println ( "Opening " + CiscoCMProviderString() + "...\n" );
provider = peer.getProvider ( CiscoCMProviderString() );
System.out.println ("Adding Observer");
provider.addObserver ( this );
conditionInService.waitTrue ();
System.out.println ("Getting origin address");
Address originAddress = provider.getAddress ( OriginExtension );
conditionInService.waitTrue ();
System.out.println ("Creating Origin Provider...");
Provider OriginExtProvider = originAddress.getProvider();
System.out.println ("Creating call from Origin Provider...");
Call call = OriginExtProvider.createCall();
System.out.println ("Retreiving list of accociated devices/terminals");
Terminal[] terminals = originAddress.getTerminals();
if(terminals.length>0)
{
System.out.println ("Attempting to connect your call...");
call.connect ( terminals[0], originAddress, DestinationNumber );
}else{
System.out.println ("No terminals found on origin extension");
throw new Exception("No terminals are connected at the extension: "+OriginExtension);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void dispose () {
System.out.println ( "Stopping actors" );
Enumeration e = actors.elements ();
while ( e.hasMoreElements () ) {
Actor actor = (Actor) e.nextElement ();
actor.dispose ();
}
}
public void providerChangedEvent ( ProvEv [] eventList ) {
if ( eventList != null ) {
for ( int i = 0; i < eventList.length; i++ )
{
if ( eventList[i] instanceof ProvInServiceEv ) {
conditionInService.set ();
}
}
}
}
}