package org.mobicents.sip.phone.views;
import java.util.Hashtable;
import net.java.sip.communicator.impl.audionotifier.AudioNotifierActivator;
import net.java.sip.communicator.impl.configuration.ConfigurationActivator;
import net.java.sip.communicator.impl.fileaccess.FileAccessActivator;
import net.java.sip.communicator.impl.media.MediaActivator;
import net.java.sip.communicator.impl.netaddr.NetaddrActivator;
import net.java.sip.communicator.impl.protocol.ProtocolProviderActivator;
import net.java.sip.communicator.impl.protocol.sip.ProtocolProviderFactorySipImpl;
import net.java.sip.communicator.impl.protocol.sip.SipAccountID;
import net.java.sip.communicator.impl.protocol.sip.SipActivator;
import net.java.sip.communicator.impl.resources.ResourceManagementActivator;
import net.java.sip.communicator.service.audionotifier.AudioNotifierService;
import net.java.sip.communicator.service.protocol.AccountID;
import net.java.sip.communicator.service.protocol.Call;
import net.java.sip.communicator.service.protocol.OperationSetBasicTelephony;
import net.java.sip.communicator.service.protocol.ProtocolNames;
import net.java.sip.communicator.service.protocol.ProtocolProviderFactory;
import net.java.sip.communicator.service.protocol.ProtocolProviderService;
import net.java.sip.communicator.util.Logger;
import org.mobicents.sip.phone.SipPhoneActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
public class SipCommunicatorOSGIBootstrap {
private static final Logger logger = Logger.getLogger(SipCommunicatorOSGIBootstrap.class);
private ProtocolProviderFactorySipImpl protocolProviderFactorySipImpl;
private ProtocolProviderService protocolProviderService;
private BundleContext context;
public SipCommunicatorOSGIBootstrap(BundleContext context) {
this.context = context;
try {
initSipCommunicator(context);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void initSipCommunicator(BundleContext context) throws Exception {
this.context = context;
SipActivator sipActivator = new SipActivator();
ResourceManagementActivator resourceManagementActivator = new ResourceManagementActivator();
ProtocolProviderActivator protocolProviderActivator = new ProtocolProviderActivator();
MediaActivator mediaActivator = new MediaActivator();
FileAccessActivator fileAccessActivator = new FileAccessActivator();
ConfigurationActivator confActivator = new ConfigurationActivator();
NetaddrActivator netaddrActivator = new NetaddrActivator();
AudioNotifierActivator audioNotifierActivator = new AudioNotifierActivator();
sipActivator.start(context);
fileAccessActivator.start(context);
confActivator.start(context);
mediaActivator.start(context);
resourceManagementActivator.start(context);
protocolProviderActivator.start(context);
netaddrActivator.start(context);
audioNotifierActivator.start(context);
protocolProviderFactorySipImpl = sipActivator.getProtocolProviderFactory();
}
public void setUp(Hashtable props) {
try{
protocolProviderFactorySipImpl.uninstallAccount(protocolProviderService.getAccountID());
} catch (Exception e) {}
protocolProviderFactorySipImpl.installAccount("test", props);
//find the protocol providers exported for the two accounts
ServiceReference[] sipProviderRefs;
try {
sipProviderRefs = context.getServiceReferences(
ProtocolProviderService.class.getName(),
"(&"
+"("+ProtocolProviderFactory.PROTOCOL+"="+ProtocolNames.SIP+")"
+"("+ProtocolProviderFactory.USER_ID+"="
+ "test" +")"
+")");
protocolProviderService = (ProtocolProviderService)context.getService(sipProviderRefs[0]);
} catch (InvalidSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Hashtable createSipAccountProperties(String userId, String displayName, String password,
String serverAddress, String serverPort, String proxyAddress, String proxyPort)
{
Hashtable table = new Hashtable();
table.put(ProtocolProviderFactory.USER_ID, userId);
table.put(ProtocolProviderFactory.DISPLAY_NAME, displayName);
table.put(ProtocolProviderFactory.PASSWORD, password);
table.put(ProtocolProviderFactory.SERVER_ADDRESS, serverAddress);
if(serverPort != null)
{
table.put(ProtocolProviderFactory.SERVER_PORT, serverPort);
}
table.put(ProtocolProviderFactory.PROXY_ADDRESS, proxyAddress);
if(proxyPort != null)
{
table.put(ProtocolProviderFactory.PROXY_PORT, proxyPort);
}
return table;
}
public ProtocolProviderFactorySipImpl getProtocolProviderFactorySipImpl() {
return protocolProviderFactorySipImpl;
}
public ProtocolProviderService getProtocolProviderService() {
return protocolProviderService;
}
public BundleContext getContext() {
return context;
}
private static AudioNotifierService audioNotifierService;
public static AudioNotifierService getAudioNotifier() {
if (audioNotifierService == null) {
ServiceReference serviceReference = SipPhoneActivator.getDefault().getBundle().getBundleContext()
.getServiceReference(AudioNotifierService.class.getName());
audioNotifierService = (AudioNotifierService) SipPhoneActivator.getDefault().getBundle().getBundleContext()
.getService(serviceReference);
}
return audioNotifierService;
}
}