public static void delTaskDepLatest(JobPlan object, ObjectBroker Objbroker) {
   ArrayList<JobPlanTask> selectedTasks = GetMatchingTaskList(object, Objbroker);
   for (int i = 0; i < selectedTasks.size(); i++) {
     JobPlanTask jptask = selectedTasks.get(i);
     jptask.dependencies().setAtTheLatest(false);
     System.out.println(
         "\t ++ UPDATE: Remove Latest Option on Task Dependency: [ {"
             + jptask.getTaskName()
             + "("
             + jptask.getLnr()
             + ") | "
             + jptask.getType()
             + " | {"
             + jptask.getX()
             + ","
             + jptask.getY()
             + "} ]");
   }
 }
  public static ArrayList<JobPlanTask> GetMatchingTaskList(JobPlan object, ObjectBroker Objbroker) {
    // contains the list of tasks to modify in currently processing workflow
    ArrayList<JobPlanTask> selectedTasks = new ArrayList<JobPlanTask>();
    String TaskNameFilter = ProcessSpecificCLI.F_TASKNAME;
    String TaskNumberFilter = ProcessSpecificCLI.F_TASKNUMBER;

    if (ProcessSpecificCLI.F_TASKNAME == null || ProcessSpecificCLI.F_TASKNAME.equals("")) {
      TaskNameFilter = ".*";
    }
    if (ProcessSpecificCLI.F_TASKNUMBER == null || ProcessSpecificCLI.F_TASKNUMBER.equals("")) {
      TaskNumberFilter = ".*";
    }

    Iterator<JobPlanTask> iter = object.taskIterator();
    while (iter.hasNext()) {
      JobPlanTask jpt = iter.next();
      if (jpt.getTaskName().matches(TaskNameFilter)) {
        if (Integer.toString(jpt.getLnr()).matches(TaskNumberFilter)) {
          selectedTasks.add(jpt);
        }
      }
    }
    return selectedTasks;
  }
  public static void addDependency(JobPlan object, ObjectBroker Objbroker) throws IOException {

    // format can be ["TASKNAME","PREDECESSORNAME","STATUS"] or:
    // ["TASKNAME(4)","PREDECESSORNAME","STATUS"] or: ["TASKNAME","PREDECESSORNAME(5)","STATUS"]
    // => the task number isnt mandatory but is useful when the same job exists as several tasks
    // within one same WF

    // Getting the task Name and Task Number (if passed)
    String[] RawVals = ProcessSpecificCLI.U_ADDDEPENDENCY.split(",");
    String TaskName = RawVals[0].replace("[", "");
    String SanitizedTaskName = "";
    int TaskNameNumber = -1;
    String SanitizedPredecessorTaskName = "";
    int PredecessorTaskNameNumber = -1;
    if (TaskName.contains("(") && TaskName.contains(")")) {
      SanitizedTaskName = TaskName.split("\\(")[0];
      TaskNameNumber = Integer.parseInt(TaskName.split("\\(")[1].replace(")", ""));
    } else {
      SanitizedTaskName = TaskName;
    }

    // Getting the Predecessor task Name and Task Number (if passed)
    String TaskPredecessor = RawVals[1];
    String TaskStatus = RawVals[2].replace("]", "");

    if (TaskPredecessor.contains("(") && TaskPredecessor.contains(")")) {
      SanitizedPredecessorTaskName = TaskPredecessor.split("\\(")[0];
      PredecessorTaskNameNumber =
          Integer.parseInt(TaskPredecessor.split("\\(")[1].replace(")", ""));
    } else {
      SanitizedPredecessorTaskName = TaskPredecessor;
    }

    // Getting the task state.. no control here :(
    TaskState tState = new TaskState(TaskStatus);

    // handling the case where the Task Name is END (end of WF)
    ArrayList<JobPlanTask> TaskList = new ArrayList<JobPlanTask>();
    if (SanitizedTaskName.equalsIgnoreCase("END")) {
      TaskList.add(object.getEndTask());
    } else {
      TaskList = Objbroker.jobPlans.getTasksFromNameAndJobPlan(object, SanitizedTaskName);
    }

    // handling the case where the Predecessor Task Name is START (start of WF)
    ArrayList<JobPlanTask> PredecessorTaskList = new ArrayList<JobPlanTask>();
    if (SanitizedPredecessorTaskName.equalsIgnoreCase("START")) {
      PredecessorTaskList.add(object.getStartTask());
    } else {
      PredecessorTaskList =
          Objbroker.jobPlans.getTasksFromNameAndJobPlan(object, SanitizedPredecessorTaskName);
    }

    // For each task found
    for (int h = 0; h < TaskList.size(); h++) {
      JobPlanTask jptask = TaskList.get(h);
      // for each predecessor found
      for (int k = 0; k < PredecessorTaskList.size(); k++) {
        JobPlanTask jppredecessortask = PredecessorTaskList.get(k);
        // only create a dependency if: eithere there is no task number specified or.. if they
        // match.
        if ((TaskNameNumber == -1 || jptask.getLnr() == TaskNameNumber)
            && (PredecessorTaskNameNumber == -1
                || jppredecessortask.getLnr() == PredecessorTaskNameNumber)) {
          System.out.println(
              "\t ++ UPDATE: Adding Dependency to: "
                  + jptask.getTaskName()
                  + "("
                  + jptask.getLnr()
                  + ")"
                  + " on: "
                  + jppredecessortask.getTaskName()
                  + "("
                  + jppredecessortask.getLnr()
                  + ")"
                  + " in Status: "
                  + tState
                  + "");
          jptask.dependencies().addDependency(jppredecessortask, tState);
        }
      }
    }
  }