package org.atomnuke.service.introspection; import java.util.Collection; import org.atomnuke.service.ServiceManager; import org.atomnuke.service.ServiceUnavailableException; /** * * @author zinic */ public class ServicesInterrogatorImpl implements ServicesInterrogator { private final ServiceManager manager; public ServicesInterrogatorImpl(ServiceManager manager) { this.manager = manager; } @Override public <T> T firstAvailable(Class<T> serviceClass) throws ServiceUnavailableException { final Collection<String> registeredServiceNames = manager.servicesAdvertising(serviceClass); if (registeredServiceNames.isEmpty()) { throw new ServiceUnavailableException(serviceClass, "No service available for service interface: " + serviceClass.getName()); } return manager.get(registeredServiceNames.iterator().next(), serviceClass); } @Override public <T> T lookup(String serviceName, Class<T> serviceClass) throws ServiceUnavailableException { return manager.get(serviceName, serviceClass); } }