@Override public <T> Specification<ServiceReference<?>> qualifier( Active active ) { return ServiceQualifier.whereActive(); } }
@Override public <T> Specification<ServiceReference<?>> qualifier( Available active ) { return ServiceQualifier.whereAvailable(); } }
@Override public <T> Specification<ServiceReference<?>> qualifier( IdentifiedBy identifiedBy ) { return ServiceQualifier.withId( identifiedBy.value() ); } }
@Override public Specification<ServiceReference<?>> qualifier( Tagged tagged ) { return ServiceQualifier.withTags( tagged.value() ); } }
@Override @SuppressWarnings( { "raw", "unchecked" } ) public T importService( ImportedServiceDescriptor serviceDescriptor ) throws ServiceImporterException { Specification<ServiceReference<?>> selector = serviceDescriptor.metaInfo( Specification.class ); Class serviceType = Iterables.first( serviceDescriptor.types() ); Iterable<ServiceReference<T>> services = locator.findServices( serviceType ); List<ServiceReference<T>> filteredServices = new ArrayList<>(); for( ServiceReference<T> service : services ) { Specification selector1 = service.metaInfo( Specification.class ); if( selector1 != null && selector1 == selector ) { continue; } filteredServices.add( service ); } T service = ServiceQualifier.firstService( selector, filteredServices ); if( service == null ) { throw new ServiceImporterException( "Could not find any service to import that matches the given specification for " + serviceDescriptor .identity() ); } return service; }