class ClusterControllerImpl implements ClusterController {

  @Override
  public QueryResponse getResources(Type type, Request request, Predicate predicate)
      throws UnsupportedPropertyException, NoSuchResourceException,
             NoSuchParentResourceException, SystemException {
    QueryResponse queryResponse = null;

    ExtendedResourceProviderWrapper provider = ensureResourceProviderWrapper(type);
    ensurePropertyProviders(type);

    if (provider != null) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Using resource provider {} for request type {}", provider.getClass().getName(), type);
      }
      // make sure that the providers can satisfy the request
      checkProperties(type, request, predicate);

      // get the resources
      queryResponse = provider.queryForResources(request, predicate);
    }
    return queryResponse == null ? new QueryResponseImpl(Collections.emptySet()) : queryResponse;
  }

  public  ClusterControllerImpl(ProviderModule providerModule);

}