// ----------------------------------------------------------------------------------------------------
  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 parseHtmlText(final String baseURL, final String htmlText) {

    // Si es la primera tarea del trabajo, actualiza el contador
    if (m_numTasksForJob == 0) {
      m_numTasksForJob++;
    }

    ParserTask task = new ParserTask();
    task.jobID = getCurrentJobID();
    task.htmlText = htmlText;
    task.baseURL = baseURL;
    try {
      m_tasksQueue.add(task);
      this.notifyAll();
    } catch (Exception ex) {
      Tracer._error("Error putting a new ParserTask in the queue", ex);
    }
  }