private void registerAdapterFactory()

in core/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java [253:313]


    private void registerAdapterFactory(
            final ComponentContext context, final ServiceReference<AdapterFactory> reference) {
        final String[] adaptables = PropertiesUtil.toStringArray(reference.getProperty(ADAPTABLE_CLASSES));
        final String[] adapters = PropertiesUtil.toStringArray(reference.getProperty(ADAPTER_CLASSES));

        if (adaptables == null || adaptables.length == 0 || adapters == null || adapters.length == 0) {
            return;
        }

        // DISABLED IN THIS COPY OF CLASS
        /*
        for (String clazz : adaptables) {
            if (!checkPackage(packageAdmin, clazz)) {
                log.warn("Adaptable class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
            }
        }

        for (String clazz : adapters) {
            if (!checkPackage(packageAdmin, clazz)) {
                log.warn("Adapter class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
            }
        }
        */

        final AdapterFactoryDescriptor factoryDesc = new AdapterFactoryDescriptor(context, reference, adapters);

        for (final String adaptable : adaptables) {
            AdapterFactoryDescriptorMap adfMap = null;
            synchronized (this.descriptors) {
                adfMap = descriptors.get(adaptable);
                if (adfMap == null) {
                    adfMap = new AdapterFactoryDescriptorMap();
                    descriptors.put(adaptable, adfMap);
                }
            }
            synchronized (adfMap) {
                adfMap.put(reference, factoryDesc);
            }
        }

        // clear the factory cache to force rebuild on next access
        this.factoryCache.clear();

        // register adaption
        final Dictionary<String, Object> props = new Hashtable<String, Object>();
        props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables);
        props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters);

        ServiceRegistration<Adaption> adaptionRegistration =
                this.context.getBundleContext().registerService(Adaption.class, AdaptionImpl.INSTANCE, props);
        if (log.isDebugEnabled()) {
            log.debug("Registered service {} with {} : {} and {} : {}", new Object[] {
                Adaption.class.getName(),
                SlingConstants.PROPERTY_ADAPTABLE_CLASSES,
                Arrays.toString(adaptables),
                SlingConstants.PROPERTY_ADAPTER_CLASSES,
                Arrays.toString(adapters)
            });
        }
        factoryDesc.setAdaption(adaptionRegistration);
    }