private MatchFilesResponse matchReceivedFileNames(
      List<ReceivedFile> receivedFilenames, List<String> fileNameInFileList) {
    MatchFilesResponse response = new MatchFilesResponse();
    List<String> fileNameList = new ArrayList<>();

    for (ReceivedFile receivedFilename : receivedFilenames) {
      fileNameList.add(receivedFilename.getFileIdentifier());

      boolean isMatched =
          findReceivedInFile(receivedFilename.getFileIdentifier(), fileNameInFileList);
      if (!isMatched) {
        log.info(
            "MatchReceivedFilesRoute || not matched || getUnmatchedFilesReceiveds --"
                + receivedFilename);
        response.getUnmatchedFilesReceiveds().add(receivedFilename.getFileIdentifier());
      }
    }

    for (String fileName : fileNameInFileList) {

      boolean isMatched = findReceivedInFile(fileName, fileNameList);
      if (!isMatched) {
        log.info(
            "MatchReceivedFilesRoute || not matched || getUnmatchedFilesFromDats --" + fileName);
        response.getUnmatchedFilesFromDats().add(fileName);
      }
    }

    return response;
  }
  /**
   * Determine if this inbound file for voucher processing has been presented before. 1. Check if a
   * camunda process is in flight 2.
   *
   * @param processBusinessKey
   * @return
   */
  public boolean matchFile(String processBusinessKey) {
    boolean isMatched = true;
    Job job = jobStore.findJob(processBusinessKey);

    GetReceivedFilesResponse getReceivedFilesResponse = getReceivedFilesResponse(job);
    if (getReceivedFilesResponse == null) return false;

    File sourceFile = new File(lockerPath, processBusinessKey);
    log.info("MatchReceivedFilesRoute || sourceFile path - " + sourceFile.getAbsolutePath());

    if (!sourceFile.exists()) {
      log.error("SourceFile Does not  exist --" + sourceFile.getAbsolutePath());
      return false;
    }

    File[] receivedFile =
        sourceFile.listFiles(
            new FilenameFilter() {
              public boolean accept(File dir, String filename) {
                return filename.endsWith(".DAT");
              }
            });

    File receivedFileName = receivedFile[0];
    log.info("MatchReceivedFilesRoute || receivedDatFile name - " + receivedFileName.getName());

    List<String> fileNameInFileList = getFileNamesInFile(receivedFileName);
    log.info("MatchReceivedFilesRoute || fileNameInDATFile - Size - " + fileNameInFileList.size());

    MatchFilesResponse matchFilesResponse =
        matchReceivedFileNames(getReceivedFilesResponse.getReceivedFiles(), fileNameInFileList);

    Activity parameterActivity = new Activity();
    parameterActivity.setPredicate("match");
    parameterActivity.setSubject("receivedfiles");
    parameterActivity.setJobIdentifier(processBusinessKey);
    parameterActivity.setResponse(matchFilesResponse);
    parameterActivity.setRequestDateTime(new Date());
    job.getActivities().add(parameterActivity);

    if ((matchFilesResponse.getUnmatchedFilesFromDats().size() != 0)
        || (matchFilesResponse.getUnmatchedFilesReceiveds().size() != 0)) {
      isMatched = false;
    }

    log.info("MatchReceivedFilesRoute || isMatched - " + isMatched);

    return isMatched;
  }