class TaskAttemptResourceProvider extends
    AbstractJDBCResourceProvider<TaskAttemptResourceProvider.TaskAttemptFields> {

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

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

    Set<Map<String,Object>> predicatePropertieSet = getPropertyMaps(predicate);
    for (Map<String,Object> predicateProperties : predicatePropertieSet) {
      String clusterName = (String) predicateProperties
          .get(TASK_ATTEMPT_CLUSTER_NAME_PROPERTY_ID);
      String workflowId = (String) predicateProperties
          .get(TASK_ATTEMPT_WORKFLOW_ID_PROPERTY_ID);
      String jobId = (String) predicateProperties
          .get(TASK_ATTEMPT_JOB_ID_PROPERTY_ID);
      String taskAttemptId = (String) predicateProperties
          .get(TASK_ATTEMPT_ID_PROPERTY_ID);
      resourceSet.addAll(taskAttemptFetcher.fetchTaskAttemptDetails(
          requestedIds, clusterName, workflowId, jobId, taskAttemptId));
    }
    return resourceSet;
  }

  protected  TaskAttemptResourceProvider();
  protected  TaskAttemptResourceProvider(Set<String> propertyIds,
      Map<Type,String> keyPropertyIds, TaskAttemptFetcher taskAttemptFetcher);

}