code: public void processPredecessors(List<Row> rows)
     {
        for (Row row : rows)
        {
           Integer currentID = mapTaskID(row.getInteger("task_id"));
           Integer predecessorID = mapTaskID(row.getInteger("pred_task_id"));
           Task currentTask = m_project.getTaskByUniqueID(currentID);
           Task predecessorTask = m_project.getTaskByUniqueID(predecessorID);
           RelationType type = RELATION_TYPE_MAP.get(row.getString("pred_type"));
           Duration lag = row.getDuration("lag_hr_cnt");
           if (currentTask != null)
           {
              Integer uniqueID = row.getInteger("task_pred_id");
              if (predecessorTask != null)
              {
                 Relation relation = currentTask.addPredecessor(predecessorTask, type, lag);
                 relation.setUniqueID(uniqueID);
                 m_eventManager.fireRelationReadEvent(relation);
              }
              else
              {
                 // if we can't find the predecessor, it must lie outside the project
                 ExternalPredecessorRelation relation = new ExternalPredecessorRelation(predecessorID, currentTask, type, lag);
                 m_externalPredecessors.add(relation);
                 relation.setUniqueID(uniqueID);
              }
           }
        }
     }
docs: Processes predecessor data.
  
  @param rows predecessor data