private PooledStsJob saveJobPoolAndGetNextJob()

in src/main/java/com/google/gcs/sdrs/service/worker/rule/impl/StsRuleExecutor.java [734:776]


  private PooledStsJob saveJobPoolAndGetNextJob(
      List<TransferJob> transferJobList, String currentTime, RetentionRuleType retentionRuleType) {
    PooledStsJob nextAvailableJob = null;

    LocalTime targetStartTimeOfDay =
        LocalTime.parse(currentTime, DateTimeFormatter.ofPattern("HH:mm:ss"));

    if (transferJobList != null && !transferJobList.isEmpty()) {
      List<PooledStsJob> pooledStsJobList = new ArrayList<>();
      // the list is sorted by timeOfDay in asc order
      for (int i = 0; i < transferJobList.size(); i++) {
        TransferJob transferJob = transferJobList.get(i);
        TimeOfDay timeOfDay = transferJob.getSchedule().getStartTimeOfDay();
        PooledStsJob pooledStsJob = new PooledStsJob();
        pooledStsJob.setName(transferJob.getName());
        pooledStsJob.setProjectId(transferJob.getProjectId());
        pooledStsJob.setType(retentionRuleType.toDatabaseRepresentation());
        pooledStsJob.setSchedule(StsUtil.timeOfDayToString(timeOfDay));
        pooledStsJob.setSourceBucket(
            transferJob.getTransferSpec().getGcsDataSource().getBucketName());
        pooledStsJob.setSourceProject(transferJob.getProjectId());
        pooledStsJob.setStatus(transferJob.getStatus());
        pooledStsJob.setTargetBucket(
            transferJob.getTransferSpec().getGcsDataSink().getBucketName());
        pooledStsJob.setTargetProject(transferJob.getProjectId());

        if (StsUtil.convertToLocalTime(timeOfDay).isAfter(targetStartTimeOfDay)
            && nextAvailableJob == null) {
          // we found the job at the right scheduled time of day. it won't come here
          // after setting nextAvailableJob
          nextAvailableJob = pooledStsJob;
        }

        pooledStsJobList.add(pooledStsJob);
      }

      stsJobDao.saveOrUpdateBatch(pooledStsJobList);
      if (nextAvailableJob == null) {
        nextAvailableJob = pooledStsJobList.get(0);
      }
    }
    return nextAvailableJob;
  }