Fixes provider searching and registration handling in global display service.

fix-message-formatting
Damian Minkov 12 years ago
parent 35ef27e5c8
commit 1936f5fb74

@ -68,21 +68,52 @@ public void start(BundleContext bc)
bundleContext = bc;
displayDetailsImpl = new GlobalDisplayDetailsImpl();
globalStatusService = new GlobalStatusServiceImpl();
bundleContext.addServiceListener(this);
handleAlreadyRegisteredProviders();
bundleContext.registerService(
GlobalDisplayDetailsService.class.getName(),
displayDetailsImpl,
null);
globalStatusService = new GlobalStatusServiceImpl();
bundleContext.registerService(
GlobalStatusService.class.getName(),
globalStatusService,
null);
}
/**
* Searches and processes already registered providers.
*/
private void handleAlreadyRegisteredProviders()
{
for (ServiceReference protocolProviderRef :
ServiceUtils.getServiceReferences(
bundleContext, ProtocolProviderService.class))
{
ProtocolProviderService provider
= (ProtocolProviderService)
bundleContext.getService(protocolProviderRef);
this.handleProviderAdded(provider);
}
}
/**
* Used to attach the listeners to existing or
* just registered protocol provider.
*
* @param pps ProtocolProviderService
*/
private void handleProviderAdded(ProtocolProviderService pps)
{
pps.addRegistrationStateChangeListener(displayDetailsImpl);
globalStatusService.handleProviderAdded(pps);
}
/**
* Stops this bundle.
*
@ -199,12 +230,11 @@ public void serviceChanged(ServiceEvent event)
switch (event.getType())
{
case ServiceEvent.REGISTERED:
pps.addRegistrationStateChangeListener(displayDetailsImpl);
pps.addRegistrationStateChangeListener(globalStatusService);
this.handleProviderAdded(pps);
break;
case ServiceEvent.UNREGISTERING:
pps.removeRegistrationStateChangeListener(displayDetailsImpl);
pps.removeRegistrationStateChangeListener(globalStatusService);
globalStatusService.handleProviderRemoved(pps);
break;
}
}

@ -32,6 +32,29 @@ public class GlobalStatusServiceImpl
private final Logger logger
= Logger.getLogger(GlobalStatusServiceImpl.class);
/**
* Handles newly added providers.
* @param pps
*/
void handleProviderAdded(ProtocolProviderService pps)
{
pps.addRegistrationStateChangeListener(this);
if(pps.isRegistered())
{
handleProviderRegistered(pps);
}
}
/**
* Handles removed providers.
* @param pps the provider.
*/
void handleProviderRemoved(ProtocolProviderService pps)
{
pps.removeRegistrationStateChangeListener(this);
}
/**
* Returns the global presence status.
*
@ -513,9 +536,9 @@ private void publishStatus(
if (!protocolProvider.isRegistered())
return;
PresenceStatus status = getPresenceStatus( protocolProvider,
floorStatusValue,
ceilStatusValue);
PresenceStatus status = getPresenceStatus(protocolProvider,
floorStatusValue,
ceilStatusValue);
if (status != null)
{
@ -639,8 +662,17 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
if(!evt.getNewState().equals(RegistrationState.REGISTERED))
return;
ProtocolProviderService pps = evt.getProvider();
handleProviderRegistered(evt.getProvider());
}
/**
* Handles registered providers. If provider has a stored last status
* publish that status, otherwise we just publish that they
* are Online/Available/
* @param pps the provider
*/
private void handleProviderRegistered(ProtocolProviderService pps)
{
PresenceStatus status = getLastPresenceStatus(pps);
if(status == null)

Loading…
Cancel
Save