public void handle(FlowExecutionException exception, RequestControlContext context) { if (logger.isDebugEnabled()) { logger.debug("Handling flow execution exception " + exception, exception); } exposeException(context, exception, findRootCause(exception)); actionList.execute(context); context.execute(new Transition(getTargetStateResolver(exception))); }
/** * Factory method that creates a new transition, a path from one step in a flow to another. This method is an atomic * operation that returns a fully initialized transition. It encapsulates the selection of the transition * implementation as well as the transition assembly. * @param targetStateResolver the resolver of the target state of the transition (required) * @param matchingCriteria the criteria that matches the transition; may be null * @param executionCriteria the criteria that governs execution of the transition after match; may be null * @param attributes attributes to assign to the transition, which may also be used to affect transition * construction; may be null * @return the fully initialized transition instance */ public Transition createTransition(TargetStateResolver targetStateResolver, TransitionCriteria matchingCriteria, TransitionCriteria executionCriteria, AttributeMap<?> attributes) { Transition transition = new Transition(targetStateResolver); if (matchingCriteria != null) { transition.setMatchingCriteria(matchingCriteria); } if (executionCriteria != null) { transition.setExecutionCriteria(executionCriteria); } transition.getAttributes().putAll(attributes); return transition; }
/** * Create transition without a criteria. * * @param targetState the target state * @return the transition */ protected static Transition createTransition(final String targetState) { final DefaultTargetStateResolver resolver = new DefaultTargetStateResolver(targetState); return new Transition(resolver); }
/** * Create transition without a criteria. * * @param targetState the target state * @return the transition */ protected Transition createTransition(final String targetState) { final DefaultTargetStateResolver resolver = new DefaultTargetStateResolver(targetState); return new Transition(resolver); }
@Override public Transition createTransition(final String targetState) { val resolver = new DefaultTargetStateResolver(targetState); return new Transition(resolver); }
@Override public Transition createTransition(final Expression criteriaOutcomeExpression, final String targetState) { val criteria = getTransitionCriteriaForExpression(criteriaOutcomeExpression); val resolver = new DefaultTargetStateResolver(targetState); return new Transition(criteria, resolver); }
public void handle(FlowExecutionException exception, RequestControlContext context) { if (logger.isDebugEnabled()) { logger.debug("Handling flow execution exception " + exception, exception); } exposeException(context, exception, findRootCause(exception)); actionList.execute(context); context.execute(new Transition(getTargetStateResolver(exception))); }
public void testResolveStateNull() { DefaultTargetStateResolver resolver = new DefaultTargetStateResolver((String) null); MockRequestContext context = new MockRequestContext(); Transition transition = new Transition(); assertEquals(null, resolver.resolveTargetState(transition, null, context)); }
protected void setUp() { flow = new Flow("myFlow"); state = new TransitionableState(flow, "state1") { protected void doEnter(RequestControlContext context) { throw new FlowExecutionException(getFlow().getId(), getId(), "Oops!", new TestException()); } }; state.getTransitionSet().add(new Transition(toState("end"))); }
public void testTransitionExecutingNoSecurity() { SecurityFlowExecutionListener listener = new SecurityFlowExecutionListener(); RequestContext context = new MockRequestContext(); Transition transition = new Transition(new DefaultTargetStateResolver("target")); listener.transitionExecuting(context, transition); }
public void testStatic() throws Exception { String expression = "mockState"; TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression, TargetStateResolver.class); MockRequestContext context = new MockRequestContext(); Transition transition = new Transition(); assertEquals("mockState", resolver.resolveTargetState(transition, null, context).getId()); }
public void testResolveState() { DefaultTargetStateResolver resolver = new DefaultTargetStateResolver("mockState"); MockRequestContext context = new MockRequestContext(); Transition transition = new Transition(); assertEquals("mockState", resolver.resolveTargetState(transition, null, context).getId()); }
public void testAddGlobalTransition() { Transition t = new Transition(to("myState2")); flow.getGlobalTransitionSet().add(t); assertSame(t, flow.getGlobalTransitionSet().toArray()[1]); }
private Flow createSimpleFlow() { flow = new Flow("myFlow"); ViewState state1 = new ViewState(flow, "myState1", new StubViewFactory()); state1.getTransitionSet().add(new Transition(on("submit"), to("myState2"))); new EndState(flow, "myState2"); flow.getGlobalTransitionSet().add(new Transition(on("globalEvent"), to("myState2"))); return flow; }
public void testResolveStateExpression() { DefaultTargetStateResolver resolver = new DefaultTargetStateResolver(new StaticExpression("mockState")); MockRequestContext context = new MockRequestContext(); Transition transition = new Transition(); assertEquals("mockState", resolver.resolveTargetState(transition, null, context).getId()); }
public void testDynamic() throws Exception { String expression = "#{flowScope.lastState}"; TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression, TargetStateResolver.class); MockRequestContext context = new MockRequestContext(); context.getFlowScope().put("lastState", "mockState"); Transition transition = new Transition(); assertEquals("mockState", resolver.resolveTargetState(transition, null, context).getId()); }
public void testElseDecision() { Flow flow = new Flow("flow"); DecisionState state = new DecisionState(flow, "decisionState"); state.getTransitionSet().add(new Transition(new MockTransitionCriteria("foo"), to("invalid"))); state.getTransitionSet().add(new Transition(to("target"))); new EndState(flow, "target"); MockRequestControlContext context = new MockRequestControlContext(flow); context.setCurrentEvent(new Event(this, "bogus")); state.enter(context); assertFalse(context.getFlowExecutionContext().isActive()); }
public void testExecuteSingleAction() { state.getActionList().add(new TestAction()); state.getTransitionSet().add(new Transition(on("success"), to("finish"))); state.enter(context); assertEquals(1, ((TestAction) state.getActionList().get(0)).getExecutionCount()); }
public void testGetFlowExecutorBasicConfig() throws Exception { factoryBean.setFlowDefinitionLocator(id -> { Flow flow = new Flow(id); ViewState view = new ViewState(flow, "view", new StubViewFactory()); view.getTransitionSet().add(new Transition(new DefaultTargetStateResolver("end"))); new EndState(flow, "end"); return flow; }); factoryBean.afterPropertiesSet(); factoryBean.getObject(); }
public void testIfDecision() { Flow flow = new Flow("flow"); DecisionState state = new DecisionState(flow, "decisionState"); state.getTransitionSet().add(new Transition(new MockTransitionCriteria("foo"), to("target"))); new EndState(flow, "target"); MockRequestControlContext context = new MockRequestControlContext(flow); context.setCurrentEvent(new Event(this, "foo")); state.enter(context); assertFalse(context.getFlowExecutionContext().isActive()); }