All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.ciechanowiec.sling.rocket.commons.impl.FullResourceAccess Maven / Gradle / Ivy

There is a newer version: 13.32.0
Show newest version
package eu.ciechanowiec.sling.rocket.commons.impl;

import eu.ciechanowiec.sling.rocket.commons.ResourceAccess;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.serviceusermapping.ServiceUserMapped;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.propertytypes.ServiceDescription;

import javax.jcr.Repository;
import java.util.Collections;
import java.util.Map;

/**
 * Provides full and unlimited access to Apache Sling resources, including the underlying {@link Repository}.
 */
@Component(
        service = ResourceAccess.class,
        immediate = true
)
@Slf4j
@ServiceDescription("Provides full and unlimited access to Apache Sling resources, "
                  + "including the underlying Repository")
public class FullResourceAccess implements ResourceAccess {

    static final String SUBSERVICE_NAME = "sling-rocket-subservice";

    private final ResourceResolverFactory resourceResolverFactory;

    /**
     * Constructs an instance of this class. Supposed to be used exclusively by the OSGi framework
     * during service construction and never directly by clients.
     * @param serviceUserMapped Apache Sling service user mapping used to provide access to the resources
     * @param resourceResolverFactory factory used to provide access to the resources
     */
    @Activate
    @SuppressWarnings("PMD.UnusedFormalParameter")
    public FullResourceAccess(
            @Reference(
                    cardinality = ReferenceCardinality.MANDATORY,
                    target = "(" + ServiceUserMapped.SUBSERVICENAME + "=" + SUBSERVICE_NAME + ")"
            )
            ServiceUserMapped serviceUserMapped, // used only to enforce sub-service binding
            @Reference(cardinality = ReferenceCardinality.MANDATORY)
            ResourceResolverFactory resourceResolverFactory
    ) {
        this.resourceResolverFactory = resourceResolverFactory;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @SneakyThrows
    public ResourceResolver acquireAccess() {
        log.trace("Resource resolver requested");
        Map authInfo = Collections.singletonMap(
                ResourceResolverFactory.SUBSERVICE, SUBSERVICE_NAME
        );
        return resourceResolverFactory.getServiceResourceResolver(authInfo);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy