public boolean checkPreconditions()

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;
        }
    }