in src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java [98:145]
public boolean checkPreconditions(final String unavailableName, final String unavailableServicePid) {
synchronized ( this ) {
final List<RequiredProvider> localRequiredProviders = this.requiredProviders;
final ResourceProviderTracker localTracker = this.tracker;
boolean canRegister = localTracker != null;
if (localRequiredProviders != null && localTracker != null ) {
for (final RequiredProvider rp : localRequiredProviders) {
canRegister = false;
for (final ResourceProviderHandler h : localTracker.getResourceProviderStorage().getAllHandlers()) {
final ResourceProviderInfo info = h.getInfo();
if ( info == null ) {
// provider has been deactivated in the meantime
// ignore and continue
continue;
}
@SuppressWarnings("rawtypes")
final ServiceReference ref = info.getServiceReference();
final Object servicePid = ref.getProperty(Constants.SERVICE_PID);
if ( unavailableServicePid != null && unavailableServicePid.equals(servicePid) ) {
// ignore this service
continue;
}
if ( unavailableName != null && unavailableName.equals(info.getName()) ) {
// ignore this service
continue;
}
if ( rp.name != null && rp.name.equals(info.getName()) ) {
canRegister = true;
break;
} else if (rp.filter != null && rp.filter.match(ref)) {
canRegister = true;
break;
} else if (rp.pid != null && rp.pid.equals(servicePid)){
canRegister = true;
break;
} else if (rp.pid != null && rp.pid.equals(ref.getProperty(LegacyResourceProviderWhiteboard.ORIGINAL_SERVICE_PID))) {
canRegister = true;
break;
}
}
if ( !canRegister ) {
break;
}
}
}
return canRegister;
}
}