@Override
 public void downloadAndValidate(BundleRequest request, BundleResponse response) {
   String gtfsDirectory =
       request.getBundleDirectory() + File.separator + _fileService.getGtfsPath();
   _log.info("gtfsDir=" + gtfsDirectory);
   List<String> files = _fileService.list(gtfsDirectory, -1);
   if (files == null || files.size() == 0) {
     response.addStatusMessage("no files found in " + gtfsDirectory);
     response.setComplete(true);
     return;
   }
   String tmpDir = request.getTmpDirectory();
   if (tmpDir == null) {
     tmpDir = new FileUtils().createTmpDirectory();
     request.setTmpDirectory(tmpDir);
   }
   response.setTmpDirectory(request.getTmpDirectory());
   for (String s3Key : files) {
     response.addStatusMessage("downloading " + s3Key);
     _log.info("downloading " + s3Key);
     String gtfsZipFileName = _fileService.get(s3Key, tmpDir);
     String outputFile = gtfsZipFileName + _gtfsValidationService.getOutputExtension();
     response.addStatusMessage("validating " + s3Key);
     _log.info("validating " + s3Key);
     if (installAndValidateGtfs(gtfsZipFileName, outputFile) != 0) {
       _log.error("Failed to successfully validate: " + gtfsZipFileName);
       response.addStatusMessage("validation failed for " + s3Key);
       continue;
     }
     _log.info("results of " + gtfsZipFileName + " at " + outputFile);
     response.addValidationFile(new FileUtils().parseFileName(outputFile));
     upload(request, response);
     response.addStatusMessage("complete");
   }
 }
  public void upload(BundleRequest request, BundleResponse response) {
    String destDirectory =
        request.getBundleDirectory()
            + File.separator
            + BUILD_DIR
            + File.separator
            + request.getBundleBuildName()
            + File.separator
            + OUTPUT_DIR;
    String outputsPath = request.getTmpDirectory();
    response.setRemoteOutputDirectory(destDirectory);

    for (String htmlFile : response.getValidationFiles()) {
      String msg = "uploading " + htmlFile + " to " + destDirectory;
      response.addStatusMessage(msg);
      _log.info(msg);
      _fileService.put(
          destDirectory + File.separator + htmlFile, outputsPath + File.separator + htmlFile);
    }

    response.addStatusMessage("upload complete");
  }