private void addBundleResourceProvider()

in src/main/java/org/apache/sling/bundleresource/impl/Activator.java [111:152]


    private void addBundleResourceProvider(final Bundle bundle) {
        BundleResourceProvider[] providers = null;
        try {
            synchronized ( this ) {
                // on startup we might get here twice for a bundle (listener and activator)
                if ( bundleResourceProviderMap.get(bundle.getBundleId()) != null ) {
                    return;
                }
                final String prefixes = bundle.getHeaders().get(BUNDLE_RESOURCE_ROOTS);
                if (prefixes != null) {
                    log.debug(
                        "addBundleResourceProvider: Registering resources '{}' for bundle {}:{} ({}) as service ",
                        new Object[] { prefixes, bundle.getSymbolicName(), bundle.getVersion(),
                            bundle.getBundleId() });

                    final PathMapping[] roots = PathMapping.getRoots(prefixes);
                    providers = new BundleResourceProvider[roots.length];

                    int index = 0;
                    final BundleResourceCache cache = new BundleResourceCache(bundle);
                    for(final PathMapping path : roots) {
                        final BundleResourceProvider brp = new BundleResourceProvider(cache, path);
                        providers[index] = brp;

                        index++;
                    }
                    bundleResourceProviderMap.put(bundle.getBundleId(), providers);
                }
            }
            if ( providers != null ) {
                for(final BundleResourceProvider provider : providers) {
                    final long id = provider.registerService();
                    log.debug("addBundleResourceProvider: Service ID = {}", id);
                }
            }
        } catch (final Throwable t) {
            log.error(
                "activate: Problem while registering bundle resources for bundle "
                     + bundle.getSymbolicName() + ":" + bundle.getVersion() + " (" + bundle.getBundleId() + ")",
                t);
        }
    }