private boolean verifyRunningProccess(Task task) {

    int running = 0;

    for (GridProcess replica : task.getGridProcesses()) {
      GridProcessState replicaState = replica.getState();

      if (GridProcessState.RUNNING.equals(replicaState)
          || GridProcessState.UNSTARTED.equals(replicaState)) {
        running++;
      }
    }

    return running < maxReplicas
        && (GridProcessState.RUNNING.equals(task.getState())
            || GridProcessState.UNSTARTED.equals(task.getState()));
  }
  private TaskStatusInfo fillTask(Task task) {

    List<GridProcessStatusInfo> processesList = new ArrayList<GridProcessStatusInfo>();

    for (GridProcess process : task.getGridProcesses()) {
      processesList.add(fillProcess(process));
    }

    TaskStatusInfo taskInfo =
        new TaskStatusInfo(
            task.getTaskid(),
            task.getJobId(),
            task.getState().toString(),
            task.getActualFails(),
            task.getSpec(),
            processesList,
            task.getCreationTime(),
            task.getFinalizationTime());

    return taskInfo;
  }
  public JobWorkerStatus getCompleteStatus() {

    Map<Integer, Job> jobsMap = JobInfo.getInstance().getJobs();
    Map<Integer, Set<WorkerEntry>> workersByJob = CommonUtils.createMap();

    JobStatusInfo jobInfo = null;
    List<TaskStatusInfo> tasksList = null;
    Map<Integer, JobStatusInfo> jobs = CommonUtils.createSerializableMap();

    // Jobs
    for (Job job : jobsMap.values()) {
      Set<WorkerEntry> workers = new LinkedHashSet<WorkerEntry>();
      tasksList = new ArrayList<TaskStatusInfo>();

      for (Task task : job.getTasks()) {
        tasksList.add(fillTask(task));
        for (GridProcess gridProcess : task.getGridProcesses()) {
          if (gridProcess.getState() == GridProcessState.RUNNING)
            workers.add(gridProcess.getWorkerEntry());
        }
      }

      jobInfo =
          new JobStatusInfo(
              job.getJobId(),
              job.getSpec(),
              UtilConverter.getJobState(job.getState()),
              tasksList,
              job.getCreationTime(),
              job.getFinalizationTime());

      jobs.put(jobInfo.getJobId(), jobInfo);

      if (job.isRunning()) {
        workersByJob.put(job.getJobId(), workers);
      }
    }

    Map<Integer, WorkerStatusInfo[]> workers = CommonUtils.createSerializableMap();

    WorkerStatusInfo[] workerList = null;
    for (Entry<Integer, Set<WorkerEntry>> entry : workersByJob.entrySet()) {

      workerList = workers.get(entry.getKey());
      if (workerList == null) {
        workerList = new WorkerStatusInfo[entry.getValue().size()];
        workers.put(entry.getKey(), workerList);
      }

      int i = 0;
      for (WorkerEntry workerEntry : entry.getValue()) {

        GridProcessHandle handle = null;
        String state = null;

        if (workerEntry.getGridProcess() != null) {
          handle = workerEntry.getGridProcess().getHandle();
          state = workerEntry.getGridProcess().getState().toString();
        }

        workerList[i] =
            new WorkerStatusInfo(
                workerEntry.getWorkerSpecification(), handle, workerEntry.getWorkerID(), state);
        i++;
      }
    }

    JobWorkerStatus status = new JobWorkerStatus(jobs, workers);

    return status;
  }