/**
   * add simple error to error container array
   *
   * @param errorContainer
   */
  private void addError(ErrorContainer errorContainer) {
    String errorMessage = errorContainer.getError().toString();
    String[] splitMessage = errorMessage.split("\n");

    errorMessage = errorMessage.replaceAll("\n", "<br>&nbsp;&nbsp;");

    errorContainer.setIndex(totalErrors);
    totalErrors = totalErrors + 1;
    errorContainer.setStatus(-1); // pending status

    errors.add(errorContainer);
    onAddError(errorContainer, splitMessage[0]);
    notifyObservers(new ImportEvent.ERRORS_PENDING());
  }
  /** Send existing errors in ErrorContainer array to server */
  protected void sendErrors() {

    // create an omero client.
    client sc = null;
    client client = null;
    ServiceFactoryPrx session = null;
    try {
      if (sendLogs || sendFiles) {
        sc = new client(config.hostname.get(), config.port.get());
        ServiceFactoryPrx entryEncrypted;
        if (!config.sessionKey.empty()) {
          entryEncrypted = sc.joinSession(config.sessionKey.get());
        } else {
          entryEncrypted = sc.createSession(config.username.get(), config.password.get());
        }
        client = sc.createClient(false);
        session = client.getSession();
      }
      for (int i = 0; i < errors.size(); i++) {

        if (!isSend(i)) {
          onSent(i);
          continue; // Don't send file if not selected
        }

        if (cancelUploads) {
          onCancel();
          break;
        }

        ErrorContainer errorContainer = errors.get(i);
        if (errorContainer.getStatus() != -1) // if file not pending, skip
          // it
          continue;

        Map<String, String> postList = new HashMap<String, String>();

        postList.put("java_version", errorContainer.getJavaVersion());
        postList.put("java_classpath", errorContainer.getJavaClasspath());
        postList.put("app_version", errorContainer.getAppVersion());
        postList.put("comment_type", errorContainer.getCommentType());
        postList.put("os_name", errorContainer.getOSName());
        postList.put("os_arch", errorContainer.getOSArch());
        postList.put("os_version", errorContainer.getOSVersion());
        postList.put("extra", errorContainer.getExtra());
        postList.put("error", getStackTrace(errorContainer.getError()));
        postList.put("comment", errorContainer.getComment());
        postList.put("email", errorContainer.getEmail());
        postList.put("app_name", "2");
        postList.put("import_session", "test");
        postList.put("absolute_path", errorContainer.getAbsolutePath() + "/");

        String sendUrl = config.getTokenUrl();

        if (isSend(i)) {
          if (!sendFiles) {
            errorContainer.clearFiles();
          }

          if (sendLogs || sendFiles) {
            File f = errorContainer.getSelectedFile();
            if (f != null) {
              Long id = logFiles.get(f.getAbsolutePath());
              // load the log
              File logFile = null;
              try {
                logFile = retrieveLogFile(id, session);
              } catch (Throwable e) {
                log.error("Cannot load log file", e);
              }

              if (logFile != null) {
                sendLogs = true;
                errorContainer.addFile(logFile.getAbsolutePath());
              } else sendLogs = false;
            } else sendLogs = false;
          }
        }
        messenger = new HtmlMessenger(sendUrl, postList);
        serverReply = messenger.executePost();
        if (sendFiles || sendLogs) {
          onSending(i);
          log.info("Sending File(s)...");
          errorContainer.setToken(serverReply);
          fileUploader = new FileUploader(messenger.getCommunicationLink(config.getUploaderUrl()));
          fileUploader.addObserver(this);
          fileUploader.uploadFiles(config.getUploaderUrl(), 2000, errorContainer);
          onSent(i);
        } else {
          onNotSending(i, serverReply);
        }
      }
    } catch (Exception e) {
      log.error("Error during upload", e);
    } finally {
      if (client != null) client.__del__();
      if (sc != null) sc.__del__();
    }
    if (cancelUploads) {
      finishCancelled();
    }

    if (fileUploadErrors) {
      finishWithErroredFiles();
      notifyObservers(new ImportEvent.ERRORS_COMPLETE());
    } else {
      finishComplete();
      notifyObservers(new ImportEvent.ERRORS_COMPLETE());
    }
  }