Java源码示例:org.apache.sling.api.resource.ResourceResolverFactory

示例1
@GET
public Response sling(@PathParam("resourcePath") String resourcePath) throws IOException, LoginException {
    final SlingRequestProcessor p = SlingContext.get().getService(SlingRequestProcessor.class);
    assert (p != null);

    final ResourceResolverFactory fac = SlingContext.get().getService(ResourceResolverFactory.class);
    assertNotNull("Expecting a ResourceResolverFactory", fac);
    final ResourceResolver resolver = fac.getResourceResolver(new HashMap<String, Object>());
    assertNotNull("Expecting a ResourceResolver", resolver);

    request.setAttribute(RequestProgressTracker.class.getName(), new SlingRequestProgressTracker(request));

    try {
        p.processRequest(request, new HttpResponse(), resolver);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    final Resource r = (Resource)request.getAttribute(MockServletResolver.RESOURCE_ATTR);
    return Response.ok(r).build();
}
 
示例2
@Override
public @Nullable RemoteResourceReference findResource(@NotNull String slingPath, @NotNull Map<String, Object> authenticationInfo) {
    String path = slingPath.startsWith("/") ? slingPath.substring(1) : slingPath;
    java.io.File file = new java.io.File(root, path);
    while (file.getAbsolutePath().startsWith(root.getAbsolutePath())) {
        if (file.exists()) {
            if (!whitelist.isEmpty()) {
                String user = (String) authenticationInfo.get(ResourceResolverFactory.USER);
                if (user == null || user.isEmpty()) {
                    return null;
                }
                Set<String> whitelistedUsers = whitelist.get(file.getPath());
                if (whitelistedUsers != null) {
                    if (whitelistedUsers.contains(user)) {
                        return new MockRemoteResourceReference(this, file);
                    }
                }
            } else {
                return new MockRemoteResourceReference(this, file);
            }
        }
        file = file.getParentFile();
    }
    return null;
}
 
示例3
/**
 * Retrieve values from repository with wrapped impersonated session (automatically opened and closed).
 */
@SuppressWarnings("unchecked")
public static <T> T resolve(ResourceResolverFactory factory, String userId, ResolveCallback callback)
    throws ResolveException {
  ResourceResolver resolver = null;
  try {
    resolver = getResourceResolverForUser(factory, userId);
    return (T) callback.resolve(resolver);
  } catch (Exception e) {
    throw new ResolveException(RESOLVE_ERROR_MESSAGE, e);
  } finally {
    if (resolver != null && resolver.isLive()) {
      resolver.close();
    }
  }
}
 
示例4
/**
 * Do some operation on repository (delete or update resource etc) with wrapped impersonated session
 * (automatically opened and closed).
 */
public static void operate(ResourceResolverFactory factory, String userId, OperateCallback callback)
    throws OperateException {
  ResourceResolver resolver = null;
  try {
    resolver = getResourceResolverForUser(factory, userId);
    callback.operate(resolver);
    resolver.commit();
  } catch (Exception e) {
    throw new OperateException(OPERATE_ERROR_MESSAGE, e);
  } finally {
    if (resolver != null && resolver.isLive()) {
      resolver.close();
    }
  }
}
 
示例5
/**
 * Create a new session for specified user (impersonating).
 */
public static ResourceResolver getResourceResolverForUser(ResourceResolverFactory factory, String userId)
    throws LoginException {
  ResourceResolver resolver;
  if (userId != null) {
    Map<String, Object> authenticationInfo = Maps.newHashMap();
    authenticationInfo.put(ResourceResolverFactory.USER_IMPERSONATION, userId);
    resolver = factory.getAdministrativeResourceResolver(authenticationInfo);
  } else {
    Map<String, Object> parameters = new HashMap<>();
    parameters.put(ResourceResolverFactory.SUBSERVICE, SUBSERVICE_NAME);
    resolver = factory.getServiceResourceResolver(parameters);
  }

  return resolver;
}
 
示例6
@Activate
protected synchronized void activate(final ComponentContext ctx) throws LoginException, RepositoryException {
    // check enabled state
    if (resolver == null) {
        bundleContext = ctx.getBundleContext();
        final Map<String, Object> map = new HashMap<>();
        map.put(ResourceResolverFactory.SUBSERVICE, VIRTUAL_PRODUCTS_SERVICE);
        resolver = resolverFactory.getServiceResourceResolver(map);

        // Watch for events on the root to register/deregister virtual catalogs data roots at runtime
        // For each observed path create an event listener object which redirects the event to the main class
        final Session session = resolver.adaptTo(Session.class);
        if (session != null) {
            this.observationEventListeners = new EventListener[this.observationPaths.length];
            for (int i = 0; i < this.observationPaths.length; i++) {
                this.observationEventListeners[i] = new EventListener() {
                    public void onEvent(EventIterator events) {
                        CatalogDataResourceProviderManagerImpl.this.onEvent(events);
                    }
                };
                session.getWorkspace()
                    .getObservationManager()
                    .addEventListener(this.observationEventListeners[i],
                        Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED | Event.PROPERTY_REMOVED,
                        this.observationPaths[i],
                        // absolute path
                        true,
                        // isDeep
                        null,
                        // uuids
                        null,
                        // node types
                        true); // noLocal
            }
        }

        // register all virtual catalog data definitions that already exist
        registerDataRoots();
    }
}
 
示例7
protected void activate(final ComponentContext context) throws LoginException {
    LOG.debug("Activating the component");
    final Map<String, Object> map = new HashMap<>();
    map.put(ResourceResolverFactory.SUBSERVICE, PRODUCT_BINDING_SERVICE);
    resolver = resolverFactory.getServiceResourceResolver(map);
    LOG.debug("Do we have a resolver? {}", resolver != null);
}
 
示例8
@Before
public void setup() {
    context.load().json("/context/jcr-conf.json", "/conf/testing");
    context.load().json("/context/jcr-content.json", "/content/my-site");
    ResourceResolverFactory resourceResolverFactory = Mockito.mock(ResourceResolverFactory.class);
    ServiceUserMapped serviceUserMapped = Mockito.mock(ServiceUserMapped.class);

    context.registerService(ServiceUserMapped.class, serviceUserMapped, ImmutableMap.of(ServiceUserMapped.SUBSERVICENAME,
        "cif-components-configuration"));

    ComponentsConfigurationAdapterFactory factory = new ComponentsConfigurationAdapterFactory();

    context.registerInjectActivateService(factory);
}
 
示例9
@BeforeAll
public static void setup() throws LoginException {
    final ResourceResolverFactory fac = SlingContext.get().getService(ResourceResolverFactory.class);
    assertNotNull("Expecting a ResourceResolverFactory", fac);
    resolver = fac.getResourceResolver(new HashMap<String, Object>());
    assertNotNull("Expecting a ResourceResolver", resolver);
}
 
示例10
@Override
public @Nullable Directory getDirectory(@NotNull RemoteResourceReference reference, @Nullable Map<String, Object> authenticationInfo) {
    java.io.File file = ((MockRemoteResourceReference) reference).file;
    if (!file.exists() || !file.isDirectory()) {
        return null;
    }
    List<RemoteResourceReference> children = new ArrayList<>();
    for (java.io.File f : file.listFiles()) {
        MockRemoteResourceReference child = null;
        if (!whitelist.isEmpty()) {
            String user = (String) authenticationInfo.get(ResourceResolverFactory.USER);
            if (user == null || user.isEmpty()) {
                return null;
            }
            Set<String> whitelistedUsers = whitelist.get(f.getPath());
            if (whitelistedUsers != null) {
                if (whitelistedUsers.contains(user)) {
                    child = new MockRemoteResourceReference(this, f);
                }
            }
        } else {
            child = new MockRemoteResourceReference(this, f);
        }
        if (child != null) {
            children.add(child);
        }
    }
    return new MockDirectory(this, file, children);
}
 
示例11
/**
 * Retrieve values from repository with wrapped session (automatically opened and closed).
 */
public static <T> T resolveDefault(ResourceResolverFactory factory, String userId, ResolveCallback callback,
    T defaultValue) {
  try {
    return resolve(factory, userId, callback);
  } catch (ResolveException e) {
    LOG.error(RESOLVE_ERROR_MESSAGE, e);
  }

  return defaultValue;
}
 
示例12
/**
 * Do some operation on repository (delete or update resource etc) with wrapped session (automatically
 * opened and closed).
 */
public static void operateTraced(ResourceResolverFactory factory, String userId, OperateCallback callback) {
  try {
    operate(factory, userId, callback);
  } catch (OperateException e) {
    LOG.error(OPERATE_ERROR_MESSAGE, e);
  }
}
 
示例13
/**
 * Create a new session for specified user (impersonating).
 */
public static ResourceResolver getResourceResolverForUser(ResourceResolverFactory factory, String userId)
    throws LoginException {
    ResourceResolver resolver;
    if (userId != null) {
        Map<String, Object> authenticationInfo = new HashMap<>();
        authenticationInfo.put(ResourceResolverFactory.USER_IMPERSONATION, userId);
        resolver = factory.getServiceResourceResolver(authenticationInfo);
    } else {
        resolver = factory.getServiceResourceResolver(null);
    }
    return resolver;
}
 
示例14
ResourceResolver getResourceResolver() throws LoginException {
    Map<String, Object> param = new HashMap<>();
    param.put(ResourceResolverFactory.SUBSERVICE, OMNI_SEARCH_SERVICE_USER);
    return resolverFactory.getServiceResourceResolver(param);
}
 
示例15
@Reference
protected void setResourceResolverFactory(ResourceResolverFactory resolverFactory) {
    this.resolverFactory = resolverFactory;
}
 
示例16
private String extractUser(@NotNull Map<String, Object> authenticationInfo) {
    if (requiresAuthentication) {
        return (String) authenticationInfo.get(ResourceResolverFactory.USER);
    }
    return ANY;
}
 
示例17
/**
 * Retrieve values from repository with wrapped session (automatically opened and closed).
 */
public static <T> T resolveDefault(ResourceResolverFactory factory, ResolveCallback callback,
    T defaultValue) {
  return resolveDefault(factory, null, callback, defaultValue);
}
 
示例18
public static ResourceResolver getResourceResolverForService(ResourceResolverFactory factory)
    throws LoginException {
  return getResourceResolverForUser(factory, null);
}
 
示例19
public static ResourceResolver getResourceResolverForUserNested(ResourceResolverFactory factory, String userId)
    throws LoginException {
    ResourceResolver resolver;
    resolver = getResourceResolverForUser(resourceResolverFactory, userId);
    return resolver;
}
 
示例20
public static ResourceResolver getResourceResolverForUserInit(ResourceResolverFactory factory)
    throws LoginException {
    ResourceResolver resolver = factory.getServiceResourceResolver(null);
    return resolver;
}
 
示例21
public static ResourceResolver getResourceResolverForUserNestedInit(ResourceResolverFactory factory)
    throws LoginException {
    ResourceResolver resolver = getResourceResolverForUserInit(resourceResolverFactory);
    return resolver;
}
 
示例22
/**
 * Do some operation on repository (delete or update resource etc) with wrapped session (automatically
 * opened and closed).
 */
public static void operateTraced(ResourceResolverFactory factory, OperateCallback callback) {
  operateTraced(factory, null, callback);
}