class RequestScheduleResourceProvider extends AbstractControllerResourceProvider {

  @Override
  public Set<Resource> getResources(Request request, Predicate predicate) throws
      SystemException, UnsupportedPropertyException, NoSuchResourceException,
      NoSuchParentResourceException {

    final Set<RequestScheduleRequest> requests = new HashSet<>();
    for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
      requests.add(getRequestScheduleRequest(propertyMap));
    }

    Set<RequestScheduleResponse> responses =
      getResources(new Command<Set<RequestScheduleResponse>>() {
        @Override
        public Set<RequestScheduleResponse> invoke() throws AmbariException {
          return getRequestSchedules(requests);
        }
      });

    Set<String>   requestedIds = getRequestPropertyIds(request, predicate);
    Set<Resource> resources    = new HashSet<>();

    for (RequestScheduleResponse response : responses) {
      Resource resource = new ResourceImpl(Resource.Type.RequestSchedule);

      setResourceProperty(resource, ID,
        response.getId(), requestedIds);
      setResourceProperty(resource, CLUSTER_NAME,
        response.getClusterName(), requestedIds);
      setResourceProperty(resource, DESCRIPTION,
        response.getDescription(), requestedIds);
      setResourceProperty(resource, STATUS,
        response.getStatus(), requestedIds);
      setResourceProperty(resource, LAST_EXECUTION_STATUS,
        response.getLastExecutionStatus(), requestedIds);
      setResourceProperty(resource, BATCH,
        response.getBatch(), requestedIds);
      setResourceProperty(resource, SCHEDULE,
        response.getSchedule(), requestedIds);
      setResourceProperty(resource, CREATE_USER,
        response.getCreateUser(), requestedIds);
      setResourceProperty(resource, AUTHENTICATED_USER,
        response.getAuthenticatedUserId(), requestedIds);
      setResourceProperty(resource, CREATE_TIME,
        response.getCreateTime(), requestedIds);
      setResourceProperty(resource, UPDATE_USER,
        response.getUpdateUser(), requestedIds);
      setResourceProperty(resource, UPDATE_TIME,
        response.getUpdateTime(), requestedIds);

      resources.add(resource);
    }

    return resources;
  }

  protected  RequestScheduleResourceProvider(AmbariManagementController managementController);

}