// ----------------------------------------------------------------------------------------------------
  protected synchronized void taskDone(ParserTask task) {

    // Solo hace algo si la tarea finalizada era del trabajo en curso y no una antigua
    if (task.jobID.equals(getCurrentJobID())) {

      // Crea el status
      ParserWorkerStatus pws = new ParserWorkerStatus();
      pws.hotelDataList = task.hotelDataList;

      // Decrementa el numero de tareas en ejecucion
      m_numTasksForJob--;

      // Actua dependiendo de lo que quede
      if (m_numTasksForJob > 0) {

        // **** AVISAR DE QUE SE HA TERMINADO CON UNA DE LAS PAGINAS
        pws.type = PWStatusType.PageEnded;
        m_monitor.processingEnded(false, pws);

      } else if (m_numTasksForJob == 0) {

        // **** AVISAR DE QUE SE HA TERMINADO CON TODAS LAS PAGINAS
        Tracer._info("***** All parsing tasks have ended *********************************");
        pws.type = PWStatusType.AllPagesEnded;
        m_monitor.processingEnded(false, pws);

      } else {
        // No debería salir una cuenta negativa
        String MSG = "Task count for job decremented below zero";
        Tracer._error(MSG);
        m_monitor.processingEnded(true, MSG);
      }
    }
  }
 // ----------------------------------------------------------------------------------------------------
 public synchronized void reset() {
   Tracer._info("***** Reset parsing JOB ****************************************************");
   Tracer._info("");
   m_numTasksForJob = 0;
   createNewJobID();
 }