public void execute(Function[] functions, DefaultIssue issue, IssueChangeContext changeContext) { if (functions.length > 0) { FunctionContext functionContext = new FunctionContext(updater, issue, changeContext); for (Function function : functions) { function.execute(functionContext); } } }
@Override public void start() { StateMachine.Builder builder = StateMachine.builder() // order is important for UI .states(Issue.STATUS_OPEN, Issue.STATUS_CONFIRMED, Issue.STATUS_REOPENED, Issue.STATUS_RESOLVED, Issue.STATUS_CLOSED); buildManualTransitions(builder); buildAutomaticTransitions(builder); buildSecurityHotspotTransitions(builder); machine = builder.build(); }
public boolean supports(Issue issue) { for (Condition condition : conditions) { if (!condition.matches(issue)) { return false; } } return true; }
@Test public void stateKey() { StateMachine machine = StateMachine.builder() .states("OPEN", "RESOLVED", "CLOSED") .transition(Transition.builder("resolve").from("OPEN").to("RESOLVED").build()) .build(); assertThat(machine.state("OPEN")).isNotNull(); assertThat(machine.state("OPEN").transition("resolve")).isNotNull(); } }
public boolean doManualTransition(DefaultIssue issue, String transitionKey, IssueChangeContext issueChangeContext) { Transition transition = stateOf(issue).transition(transitionKey); if (!transition.automatic()) { functionExecutor.execute(transition.functions(), issue, issueChangeContext); updater.setStatus(issue, transition.to(), issueChangeContext); return true; } return false; }
public void doAutomaticTransition(DefaultIssue issue, IssueChangeContext issueChangeContext) { Transition transition = stateOf(issue).outAutomaticTransition(issue); if (transition != null) { functionExecutor.execute(transition.functions(), issue, issueChangeContext); updater.setStatus(issue, transition.to(), issueChangeContext); } }
public void doAutomaticTransition(DefaultIssue issue) { workflow.doAutomaticTransition(issue, changeContext); }
@Test public void should_set_close_date() { SetCloseDate function = SetCloseDate.INSTANCE; Function.Context context = mock(Function.Context.class); function.execute(context); verify(context, times(1)).setCloseDate(); } }
@Override public void execute(Context context) { context.setResolution(resolution); } }
@Override public void execute(Context context) { context.setCloseDate(); } }
@Override public void execute(Context context) { context.setAssignee(null); } }
public List<String> statusKeys() { return machine.stateKeys(); }
@Test public void should_unset_close_date() { UnsetCloseDate function = UnsetCloseDate.INSTANCE; Function.Context context = mock(Function.Context.class); function.execute(context); verify(context, times(1)).unsetCloseDate(); }
@Override public void execute(Context context) { context.unsetCloseDate(); } }
public static TransitionBuilder builder(String key) { return new TransitionBuilder(key); }
public static Builder builder() { return new Builder(); }
@Override public void execute(Context context) { context.setType(type); } }
public boolean supports(DefaultIssue issue) { for (Condition condition : conditions) { if (!condition.matches(issue)) { return false; } } return true; }
@Override public boolean matches(Issue issue) { return !condition.matches(issue); }