Package org.springframework.webflow.persistence

Source Code of org.springframework.webflow.persistence.AbstractFlowManagedPersistenceIntegrationTests

package org.springframework.webflow.persistence;

import javax.sql.DataSource;

import junit.framework.TestCase;

import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.webflow.engine.EndState;
import org.springframework.webflow.engine.Flow;
import org.springframework.webflow.engine.builder.FlowAssembler;
import org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder;
import org.springframework.webflow.engine.impl.FlowExecutionImplFactory;
import org.springframework.webflow.engine.model.builder.DefaultFlowModelHolder;
import org.springframework.webflow.engine.model.builder.xml.XmlFlowModelBuilder;
import org.springframework.webflow.execution.Action;
import org.springframework.webflow.execution.FlowExecution;
import org.springframework.webflow.execution.FlowExecutionListener;
import org.springframework.webflow.execution.factory.StaticFlowExecutionListenerLoader;
import org.springframework.webflow.test.MockExternalContext;
import org.springframework.webflow.test.MockFlowBuilderContext;

public abstract class AbstractFlowManagedPersistenceIntegrationTests extends TestCase {

  private FlowExecutionListener persistenceListener;

  private FlowExecution flowExecution;

  private DataSource dataSource;

  public DataSource getDataSource() {
    return dataSource;
  }

  protected void setUp() throws Exception {
    initDataSource();
    populateDataBase();
    persistenceListener = createFlowExecutionListener();

    ClassPathResource resource = new ClassPathResource("managed-root-flow.xml", getClass());
    DefaultFlowModelHolder holder = new DefaultFlowModelHolder(new XmlFlowModelBuilder(resource));
    FlowModelFlowBuilder builder = new FlowModelFlowBuilder(holder);
    MockFlowBuilderContext context = new MockFlowBuilderContext("managed-root-flow");
    FlowAssembler assembler = new FlowAssembler(builder, context);
    Flow rootFlow = assembler.assembleFlow();

    ClassPathResource childFlowResource = new ClassPathResource("managed-child-flow.xml", getClass());
    DefaultFlowModelHolder childFlowHolder = new DefaultFlowModelHolder(new XmlFlowModelBuilder(childFlowResource));
    FlowModelFlowBuilder childFlowBuilder = new FlowModelFlowBuilder(childFlowHolder);
    MockFlowBuilderContext childFlowContext = new MockFlowBuilderContext("managed-child-flow");
    FlowAssembler childFlowAssembler = new FlowAssembler(childFlowBuilder, childFlowContext);
    Flow childFlow = childFlowAssembler.assembleFlow();

    Flow notManaged = new Flow("notmanaged-child-flow");
    new EndState(notManaged, "finish");

    context.registerSubflow(childFlow);
    context.registerSubflow(notManaged);

    Action incrementCountAction = incrementCountAction();
    context.registerBean("incrementCountAction", incrementCountAction);
    childFlowContext.registerBean("incrementCountAction", incrementCountAction);

    Object assertCountAction = assertCountAction();
    context.registerBean("assertCountAction", assertCountAction);
    childFlowContext.registerBean("assertCountAction", assertCountAction);

    FlowExecutionImplFactory factory = new FlowExecutionImplFactory();
    factory.setExecutionListenerLoader(new StaticFlowExecutionListenerLoader(persistenceListener));
    flowExecution = factory.createFlowExecution(rootFlow);
  }

  public void testFlowWithSubflow() {
    MockExternalContext context = new MockExternalContext();
    flowExecution.start(null, context);
    context.setEventId("managed");
    flowExecution.resume(context);
    context.setEventId("finish");
    flowExecution.resume(context);
  }

  public void testManagedFlowWithUnmanagedSubflow() {
    MockExternalContext context = new MockExternalContext();
    flowExecution.start(null, context);
    context.setEventId("notmanaged");
    flowExecution.resume(context);
  }

  /* Methods for subclasses */

  protected abstract FlowExecutionListener createFlowExecutionListener() throws Exception;

  protected abstract Action incrementCountAction();

  protected abstract Object assertCountAction();

  protected abstract void assertSessionBound();

  /* private helper methods */

  private void initDataSource() {
    DriverManagerDataSource dmds = new DriverManagerDataSource();
    dmds.setDriverClassName("org.hsqldb.jdbcDriver");
    dmds.setUrl("jdbc:hsqldb:mem:jpa");
    dmds.setUsername("sa");
    dmds.setPassword("");
    dataSource = dmds;
  }

  private void populateDataBase() throws Exception {
    ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
    databasePopulator.addScript(new ClassPathResource("test-data.sql", this.getClass()));
    DataSourceInitializer initializer = new DataSourceInitializer();
    initializer.setDataSource(getDataSource());
    initializer.setDatabasePopulator(databasePopulator);
    initializer.afterPropertiesSet();
  }

}
TOP

Related Classes of org.springframework.webflow.persistence.AbstractFlowManagedPersistenceIntegrationTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.