package org.apereo.cas.web.flow; import org.springframework.binding.expression.Expression; import org.springframework.webflow.action.EvaluateAction; import org.springframework.webflow.engine.ActionState; import org.springframework.webflow.engine.DecisionState; import org.springframework.webflow.engine.EndState; import org.springframework.webflow.engine.Flow; import org.springframework.webflow.engine.SubflowState; import org.springframework.webflow.engine.Transition; import org.springframework.webflow.engine.TransitionableState; import org.springframework.webflow.engine.ViewState; import org.springframework.webflow.engine.builder.BinderConfiguration; import org.springframework.webflow.execution.Action; import org.springframework.webflow.execution.ViewFactory; /** * This is {@link CasWebflowConfigurer}. * * @author Misagh Moayyed * @since 5.0.0 */ public interface CasWebflowConfigurer { /** * Main login flow id. */ String FLOW_ID_LOGIN = "login"; /** * Main logout flow id. */ String FLOW_ID_LOGOUT = "logout"; /** * Initialize. */ void initialize(); /** * Gets login flow. * * @return the login flow */ Flow getLoginFlow(); /** * Gets logout flow. * * @return the logout flow */ Flow getLogoutFlow(); /** * Gets start state. * * @param flow the flow * @return the start state */ TransitionableState getStartState(Flow flow); /** * Create transition transition. * * @param criteriaOutcome the criteria outcome * @param targetState the target state * @return the transition */ Transition createTransition(String criteriaOutcome, String targetState); /** * Create transition transition. * * @param criteriaOutcome the criteria outcome * @param targetState the target state * @return the transition */ Transition createTransition(String criteriaOutcome, TransitionableState targetState); /** * Create transition transition. * * @param criteriaOutcomeExpression the criteria outcome expression * @param targetState the target state * @return the transition */ Transition createTransition(Expression criteriaOutcomeExpression, String targetState); /** * Create evaluate action evaluate action. * * @param expression the expression * @return the evaluate action */ EvaluateAction createEvaluateAction(String expression); /** * Create action state action state. * * @param flow the flow * @param name the name * @param actions the actions * @return the action state */ ActionState createActionState(Flow flow, String name, Action... actions); /** * Create decision state decision state. * * @param flow the flow * @param id the id * @param testExpression the test expression * @param thenStateId the then state id * @param elseStateId the else state id * @return the decision state */ DecisionState createDecisionState(Flow flow, String id, String testExpression, String thenStateId, String elseStateId); /** * Sets start state. * * @param flow the flow * @param state the state */ void setStartState(Flow flow, String state); /** * Sets start state. * * @param flow the flow * @param state the state */ void setStartState(Flow flow, TransitionableState state); /** * Create transition transition. * * @param targetState the target state * @return the transition */ Transition createTransition(String targetState); /** * Create end state. * * @param flow the flow * @param id the id * @return the end state */ EndState createEndState(Flow flow, String id); /** * Create end state with option to handle an external redirect. * * @param flow the flow * @param id the id * @param viewId the view id * @param redirect the redirect * @return the end state */ EndState createEndState(Flow flow, String id, String viewId, boolean redirect); /** * Create end state. * * @param flow the flow * @param id the id * @param viewId the view id * @return the end state */ EndState createEndState(Flow flow, String id, String viewId); /** * Create end state. * * @param flow the flow * @param id the id * @param expression the expression * @return the end state */ EndState createEndState(Flow flow, String id, Expression expression); /** * Create end state. * * @param flow the flow * @param id the id * @param viewFactory the view factory * @return the end state */ EndState createEndState(Flow flow, String id, ViewFactory viewFactory); /** * Create view state view state. * * @param flow the flow * @param id the id * @param expression the expression * @param binder the binder * @return the view state */ ViewState createViewState(Flow flow, String id, Expression expression, BinderConfiguration binder); /** * Create view state view state. * * @param flow the flow * @param id the id * @param viewId the view id * @return the view state */ ViewState createViewState(Flow flow, String id, String viewId); /** * Create view state view state. * * @param flow the flow * @param id the id * @param viewId the view id * @param binder the binder * @return the view state */ ViewState createViewState(Flow flow, String id, String viewId, BinderConfiguration binder); /** * Create subflow state subflow state. * * @param flow the flow * @param id the id * @param subflow the subflow * @param entryAction the entry action * @return the subflow state */ SubflowState createSubflowState(Flow flow, String id, String subflow, Action entryAction); /** * Create subflow state subflow state. * * @param flow the flow * @param id the id * @param subflow the subflow * @return the subflow state */ SubflowState createSubflowState(Flow flow, String id, String subflow); /** * Build flow. * * @param location the location * @param id the id * @return the flow */ Flow buildFlow(String location, String id); }