@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { if (++count >= limit) { return new FlowExecutionStatus("COMPLETED"); } else { return new FlowExecutionStatus("CONTINUE"); } }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { if (count++ < 2) { return new FlowExecutionStatus("OK"); } return new FlowExecutionStatus("END"); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { if (count++<2) { return new FlowExecutionStatus("OK"); } return new FlowExecutionStatus("END"); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { count++; if(count > 2) { return new FlowExecutionStatus("END"); } else { return new FlowExecutionStatus("CONTINUE"); } } }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { count++; return count<2 ? new FlowExecutionStatus("ONGOING") : FlowExecutionStatus.COMPLETED; } };
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { return new FlowExecutionStatus("FOO"); } }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { return new FlowExecutionStatus("FOO"); } }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { /* * On starting a new step, possibly upgrade the last execution to make * sure it is abandoned on restart if it failed. */ executor.abandonStepExecution(); return new FlowExecutionStatus(executor.executeStep(step)); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { assertNotNull(stepExecution); return new FlowExecutionStatus("SWITCH"); } };
@Test public void testEnumStartsWithOrdering() throws Exception { FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.BAR")); FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("FAILED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); }
@Test public void testEnumAndAlpha() throws Exception { FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("ZZZZZ")); FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("FAILED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); }
@Test public void testAlphaOrdering() throws Exception { FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("BAR")); FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("SPAM")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); }
@Test public void testEnumStartsWithAlphaOrdering() throws Exception { FlowExecution first = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.BAR")); FlowExecution second = new FlowExecution("foo", new FlowExecutionStatus("COMPLETED.FOO")); assertTrue("Should be negative",first.compareTo(second)<0); assertTrue("Should be positive",second.compareTo(first)>0); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { if (!stepExecution.getExitStatus().getExitCode().equals( ExitStatus.FAILED.getExitCode()) && stepExecution.getSkipCount() > 0) { return new FlowExecutionStatus("COMPLETED WITH SKIPS"); } else { return new FlowExecutionStatus(ExitStatus.COMPLETED.getExitCode()); } } }
@Override protected State nextState(String stateName, FlowExecutionStatus status, StepExecution stepExecution) throws FlowExecutionException { State nextState = findState(stateName, status, stepExecution); if(stepExecution != null) { ExecutionContext executionContext = stepExecution.getJobExecution().getExecutionContext(); if(executionContext.containsKey("batch.stoppedStep")) { String stepName = executionContext.getString("batch.stoppedStep"); if(stateName.endsWith(stepName)) { if(nextState != null && executionContext.containsKey("batch.restartStep") && StringUtils.hasText(executionContext.getString("batch.restartStep"))) { nextState = findState(stateName, new FlowExecutionStatus(status.getName() + ".RESTART"), stepExecution); } } } } return nextState; }
@Test public void testBasicProperties() throws Exception { FlowExecution execution = new FlowExecution("foo", new FlowExecutionStatus("BAR")); assertEquals("foo",execution.getName()); assertEquals("BAR",execution.getStatus().getName()); }
@Test public void testNextBasedOnBatchStatus() throws Exception { StepExecution stepExecution = new StepExecution("step1", new JobExecution(5L)); stepExecution.setExitStatus(new ExitStatus("unmapped exit code")); stepExecution.setStatus(BatchStatus.FAILED); executor = new FlowExecutor(stepExecution); State startState = new StateSupport("step1", new FlowExecutionStatus("unmapped exit code")); State endState = new StateSupport("failed", FlowExecutionStatus.FAILED); StateTransition failureTransition = StateTransition.createStateTransition(startState, "FAILED", "failed"); StateTransition endTransition = StateTransition.createEndStateTransition(endState); flow.setStateTransitions(collect(failureTransition, endTransition)); flow.afterPropertiesSet(); FlowExecution execution = flow.start(executor); assertEquals(FlowExecutionStatus.FAILED, execution.getStatus()); assertEquals("failed", execution.getName()); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { count++; if(count % 2 == 0) { return new FlowExecutionStatus("EVEN"); } else { return new FlowExecutionStatus("ODD"); } } }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { /* * On starting a new step, possibly upgrade the last execution to make * sure it is abandoned on restart if it failed. */ executor.abandonStepExecution(); return new FlowExecutionStatus(executor.executeStep(step)); }
@Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { String currentDirectory = jobExecution.getExecutionContext().getString(BWMetaImporterConstants.DIRECTORY_TASKLET_CURRENT_TOKEN,null); if(currentDirectory == null) { return FlowExecutionStatus.COMPLETED; } createWorkDir(jobExecution); return new FlowExecutionStatus(CONTINUE); }