test_class.declarator: jobLogArgumentCaptor
test_class.modifier: @Captor
      private
test_class.original_string: @Captor
      private ArgumentCaptor<ScheduledJobLog> jobLogArgumentCaptor;
test_class.type: ArgumentCaptor<ScheduledJobLog>
test_class.var_name: jobLogArgumentCaptor
test_class.declarator: jobLogRepoMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ScheduledJobLogRepository jobLogRepoMock;
test_class.type: ScheduledJobLogRepository
test_class.var_name: jobLogRepoMock
test_class.declarator: applicationContextMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ApplicationContext applicationContextMock;
test_class.type: ApplicationContext
test_class.var_name: applicationContextMock
test_class.declarator: jobMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ScheduledJob jobMock;
test_class.type: ScheduledJob
test_class.var_name: jobMock
test_class.declarator: otherJobMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ScheduledJob otherJobMock;
test_class.type: ScheduledJob
test_class.var_name: otherJobMock
test_class.declarator: clock
test_class.modifier: private
test_class.original_string: private Clock clock;
test_class.type: Clock
test_class.var_name: clock
test_class.declarator: scheduledJobExecutor
test_class.modifier: private
test_class.original_string: private ScheduledJobExecutor scheduledJobExecutor;
test_class.type: ScheduledJobExecutor
test_class.var_name: scheduledJobExecutor
test_class.file: backend/project-board/src/test/java/de/adesso/projectboard/base/scheduled/ScheduledJobExecutorTest.java
test_class.identifier: ScheduledJobExecutorTest
test_case.body: @Test
      public void registerScheduledJobThrowExceptionWhenIdentifierContainsOnlyWhitespace() {
          // given
          var jobIdOnlyWhitespace = "   ";
  
          given(jobMock.getJobIdentifier()).willReturn(jobIdOnlyWhitespace);
  
          // when / then
          assertThatThrownBy(() -> scheduledJobExecutor.registerScheduledJob(jobMock))
                  .isInstanceOf(IllegalArgumentException.class)
                  .hasMessage("A job's identifier can't contain only whitespace!");
      }
test_case.class_method_signature: ScheduledJobExecutorTest.registerScheduledJobThrowExceptionWhenIdentifierContainsOnlyWhitespace()
test_case.full_signature: @Test public void registerScheduledJobThrowExceptionWhenIdentifierContainsOnlyWhitespace()
test_case.identifier: registerScheduledJobThrowExceptionWhenIdentifierContainsOnlyWhitespace
test_case.invocations: willReturn given getJobIdentifier hasMessage isInstanceOf assertThatThrownBy registerScheduledJob
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void registerScheduledJobThrowExceptionWhenIdentifierContainsOnlyWhitespace()
focal_class.declarator: jobLogRepo
focal_class.modifier: private final
focal_class.original_string: private final ScheduledJobLogRepository jobLogRepo;
focal_class.type: ScheduledJobLogRepository
focal_class.var_name: jobLogRepo
focal_class.declarator: clock
focal_class.modifier: private final
focal_class.original_string: private final Clock clock;
focal_class.type: Clock
focal_class.var_name: clock
focal_class.declarator: scheduledJobIdMap
focal_class.modifier: final
focal_class.original_string: final HashMap<ScheduledJob, String> scheduledJobIdMap;
focal_class.type: HashMap<ScheduledJob, String>
focal_class.var_name: scheduledJobIdMap
focal_class.file: backend/project-board/src/main/java/de/adesso/projectboard/base/scheduled/ScheduledJobExecutor.java
focal_class.identifier: ScheduledJobExecutor
focal_class.interfaces: implements ApplicationContextAware
focal_class.class_method_signature: ScheduledJobExecutor.ScheduledJobExecutor(ScheduledJobLogRepository jobLogRepo, Clock clock)
focal_class.full_signature: @Autowired public  ScheduledJobExecutor(ScheduledJobLogRepository jobLogRepo, Clock clock)
focal_class.identifier: ScheduledJobExecutor
focal_class.modifiers: @Autowired public
focal_class.parameters: (ScheduledJobLogRepository jobLogRepo, Clock clock)
focal_class.signature:  ScheduledJobExecutor(ScheduledJobLogRepository jobLogRepo, Clock clock)
focal_class.class_method_signature: ScheduledJobExecutor.executeJobs()
focal_class.full_signature: @Scheduled( initialDelay = 0L, fixedDelay = 120_000L ) public void executeJobs()
focal_class.identifier: executeJobs
focal_class.modifiers: @Scheduled( initialDelay = 0L, fixedDelay = 120_000L ) public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void executeJobs()
focal_class.class_method_signature: ScheduledJobExecutor.execute(Callable<Void> callable, String jobIdentifier)
focal_class.full_signature:  void execute(Callable<Void> callable, String jobIdentifier)
focal_class.identifier: execute
focal_class.parameters: (Callable<Void> callable, String jobIdentifier)
focal_class.return: void
focal_class.signature: void execute(Callable<Void> callable, String jobIdentifier)
focal_class.class_method_signature: ScheduledJobExecutor.registerScheduledJob(@NonNull ScheduledJob scheduledJob)
focal_class.full_signature: public void registerScheduledJob(@NonNull ScheduledJob scheduledJob)
focal_class.identifier: registerScheduledJob
focal_class.modifiers: public
focal_class.parameters: (@NonNull ScheduledJob scheduledJob)
focal_class.return: void
focal_class.signature: void registerScheduledJob(@NonNull ScheduledJob scheduledJob)
focal_class.class_method_signature: ScheduledJobExecutor.setApplicationContext(ApplicationContext applicationContext)
focal_class.full_signature: @Override public void setApplicationContext(ApplicationContext applicationContext)
focal_class.identifier: setApplicationContext
focal_class.modifiers: @Override public
focal_class.parameters: (ApplicationContext applicationContext)
focal_class.return: void
focal_class.signature: void setApplicationContext(ApplicationContext applicationContext)
focal_class.class_method_signature: ScheduledJobExecutor.shouldAutoRegister(ScheduledJob scheduledJob)
focal_class.full_signature:  boolean shouldAutoRegister(ScheduledJob scheduledJob)
focal_class.identifier: shouldAutoRegister
focal_class.parameters: (ScheduledJob scheduledJob)
focal_class.return: boolean
focal_class.signature: boolean shouldAutoRegister(ScheduledJob scheduledJob)
focal_method.body: public void registerScheduledJob(@NonNull ScheduledJob scheduledJob) {
          if(!scheduledJobIdMap.containsKey(scheduledJob)) {
             var jobIdentifier = scheduledJob.getJobIdentifier();
             if(Objects.isNull(jobIdentifier)) {
                 throw new IllegalArgumentException("A job's identifier can't be null!");
             }
  
             var trimmedJobIdentifier = jobIdentifier.trim();
             if(trimmedJobIdentifier.isEmpty()) {
                 throw new IllegalArgumentException("A job's identifier can't contain only whitespace!");
             }
  
             if(scheduledJobIdMap.containsValue(trimmedJobIdentifier)) {
                 throw new IllegalStateException(String.format("Multiple scheduled jobs with the same job identifier '%s' found!",
                         trimmedJobIdentifier));
             }
  
             scheduledJobIdMap.put(scheduledJob, trimmedJobIdentifier);
  
             log.debug(String.format("Added scheduled job (%s) with job identifier '%s'!",
                     scheduledJob.getClass().getName(),
                     jobIdentifier));
          }
      }
focal_method.class_method_signature: ScheduledJobExecutor.registerScheduledJob(@NonNull ScheduledJob scheduledJob)
focal_method.full_signature: public void registerScheduledJob(@NonNull ScheduledJob scheduledJob)
focal_method.identifier: registerScheduledJob
focal_method.invocations: containsKey getJobIdentifier isNull trim isEmpty containsValue format put debug format getName getClass
focal_method.modifiers: public
focal_method.parameters: (@NonNull ScheduledJob scheduledJob)
focal_method.return: void
focal_method.signature: void registerScheduledJob(@NonNull ScheduledJob scheduledJob)