Package org.jbpm.db

Source Code of org.jbpm.db.GraphSessionDbTest

/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.db;

import java.util.Iterator;
import java.util.List;

import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;

public class GraphSessionDbTest extends AbstractDbTestCase {

  public void testProcessDefinitionSaveAndLoad() {
    // create a process definition
    ProcessDefinition processDefinition = new ProcessDefinition("auction");
    // save it in the database
    graphSession.saveProcessDefinition( processDefinition );
    // get the assigned id
    long processDefinitionId = processDefinition.getId();
    // start a new transaction
    newTransaction();
    // load the process definition by the id
    processDefinition = graphSession.loadProcessDefinition( processDefinitionId );
    // check the result
    assertEquals("auction", processDefinition.getName());
  }
 
  public void testFindProcessDefinitionByNameAndVersion() {
    // put 3 process definitions in the database with the same name, but different versions
    ProcessDefinition processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );
    // get the assigned id of the second verions
    long secondVersionProcessDefinitionId = processDefinition.getId();

    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(3);
    graphSession.saveProcessDefinition( processDefinition );
   
    // start a new transaction
    newTransaction();
   
    // load the process definition by the id
    processDefinition = graphSession.findProcessDefinition("auction", 2);
    assertEquals(secondVersionProcessDefinitionId, processDefinition.getId());
    assertEquals("auction", processDefinition.getName());
    assertEquals(2, processDefinition.getVersion());
  }

  public void testFindLatestProcessDefinition() throws Exception {
    // put 3 process definitions in the database with the same name, but different versions
    ProcessDefinition processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );

    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(3);
    graphSession.saveProcessDefinition( processDefinition );
    // get the assigned id of the last verions
    long lastVersionProcessDefinitionId = processDefinition.getId();
   
    newTransaction();
   
    processDefinition = graphSession.findLatestProcessDefinition( "auction" );
    assertEquals(lastVersionProcessDefinitionId, processDefinition.getId());
    assertEquals("auction", processDefinition.getName());
    assertEquals(3, processDefinition.getVersion());
  }

  public void testFindAllProcessDefinitions() throws Exception {
    // put 3 process definitions in the database with the same name, but different versions
    ProcessDefinition processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );

    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(3);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("bake cake");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("bake cake");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );
   
    newTransaction();
   
    List allProcessDefinitions = graphSession.findAllProcessDefinitions();
    assertEquals(5, allProcessDefinitions.size());
    assertEquals(3, ((ProcessDefinition)allProcessDefinitions.get(0)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(0)).getName());
    assertEquals(2, ((ProcessDefinition)allProcessDefinitions.get(1)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(1)).getName());
    assertEquals(1, ((ProcessDefinition)allProcessDefinitions.get(2)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(2)).getName());
    assertEquals(2, ((ProcessDefinition)allProcessDefinitions.get(3)).getVersion());
    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitions.get(3)).getName());
    assertEquals(1, ((ProcessDefinition)allProcessDefinitions.get(4)).getVersion());
    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitions.get(4)).getName());
  }

  public void testFindAllProcessDefinitionVersions() throws Exception {
    // put 3 process definitions in the database with the same name, but different versions
    ProcessDefinition processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );

    processDefinition = new ProcessDefinition("auction");
    processDefinition.setVersion(3);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("bake cake");
    processDefinition.setVersion(1);
    graphSession.saveProcessDefinition( processDefinition );
   
    processDefinition = new ProcessDefinition("bake cake");
    processDefinition.setVersion(2);
    graphSession.saveProcessDefinition( processDefinition );
   
    newTransaction();
   
    List allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("auction");
    assertEquals(3, allProcessDefinitionVersions.size());
    assertEquals(3, ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getName());
    assertEquals(2, ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getName());
    assertEquals(1, ((ProcessDefinition)allProcessDefinitionVersions.get(2)).getVersion());
    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(2)).getName());

    allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("bake cake");
    assertEquals(2, allProcessDefinitionVersions.size());
    assertEquals(2, ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getVersion());
    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getName());
    assertEquals(1, ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getVersion());
    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getName());
  }
 
  public void testSaveAndLoadProcessInstance() {
    assertNotNull(saveAndReload(new ProcessInstance()));
  }
 
  public void testUpdateProcessInstance() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition>" +
      "  <start-state name='s' />" +
      "  <node name='n' />" +
      "</process-definition>");

    processDefinition = saveAndReload(processDefinition);

    ProcessInstance processInstance = new ProcessInstance(processDefinition);

    processInstance = saveAndReload(processInstance);
    long pid = processInstance.getId();
   
    assertEquals("s", processInstance.getRootToken().getNode().getName());
    processInstance.getRootToken().setNode(processInstance.getProcessDefinition().getNode("n"));
   
    processInstance = saveAndReload(processInstance);
    assertEquals("n", processInstance.getRootToken().getNode().getName());
    assertEquals(pid, processInstance.getId());
  }
 
  public void testFindProcessInstancesByProcessDefinition() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition>" +
      "  <start-state name='s' />" +
      "  <node name='n' />" +
      "</process-definition>");

    graphSession.saveProcessDefinition(processDefinition);

    jbpmContext.save(new ProcessInstance(processDefinition));
    jbpmContext.save(new ProcessInstance(processDefinition));
    jbpmContext.save(new ProcessInstance(processDefinition));
   
    newTransaction();
   
    List processInstances = graphSession.findProcessInstances(processDefinition.getId());
    assertEquals(3, processInstances.size());
   
    // process instances should be ordered from recent to old
    long previousStart = System.currentTimeMillis();
    Iterator iter = processInstances.iterator();
    while (iter.hasNext()) {
      ProcessInstance processInstance = (ProcessInstance) iter.next();
      long processStart = processInstance.getStart().getTime();
      assertTrue(previousStart >= processStart);
      previousStart = processStart;
    }
  }
 
  public void testDeleteProcessInstance() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition>" +
      "  <start-state name='s' />" +
      "  <node name='n' />" +
      "</process-definition>");
    graphSession.saveProcessDefinition(processDefinition);
    ProcessInstance processInstance = new ProcessInstance(processDefinition);
    jbpmContext.save(processInstance);
   
    newTransaction();
   
    graphSession.deleteProcessInstance(processInstance.getId());
   
    newTransaction();

    assertEquals(0, graphSession.findProcessInstances(processDefinition.getId()).size());
  }

  public void testDeleteProcessInstanceWithVariables() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition>" +
      "  <start-state name='start'>" +
      "    <transition to='fork' />" +
      "  </start-state>" +
      "  <fork name='fork'>" +
      "    <transition name='a' to='a' />" +
      "    <transition name='b' to='b' />" +
      "  </fork>" +
      "  <state name='a' />" +
      "  <state name='b' />" +
      "</process-definition>");

    graphSession.saveProcessDefinition(processDefinition);
   
    ProcessInstance processInstance = new ProcessInstance(processDefinition);
    processInstance.signal();
    Token tokenA = processInstance.findToken("/a");
    Token tokenB = processInstance.findToken("/b");
   
    ContextInstance contextInstance = processInstance.getContextInstance();
    contextInstance.setVariable("r", "rrrrrr");
    contextInstance.createVariable("a", "aaaaaa", tokenA);
    contextInstance.createVariable("b", "bbbbbb", tokenB);
   
    processInstance = saveAndReload(processInstance);
   
    graphSession.deleteProcessInstance(processInstance);
   
    newTransaction();

    List processInstances = graphSession.findProcessInstances(processDefinition.getId());
    assertEquals(0, processInstances.size());
  }

  public void testDeleteProcessDefinition() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition>" +
      "  <start-state name='s' />" +
      "  <node name='n' />" +
      "</process-definition>");
    graphSession.saveProcessDefinition(processDefinition);
    jbpmContext.save(new ProcessInstance(processDefinition));
    jbpmContext.save(new ProcessInstance(processDefinition));
    jbpmContext.save(new ProcessInstance(processDefinition));
    jbpmContext.save(new ProcessInstance(processDefinition));
   
    newTransaction();
   
    graphSession.deleteProcessDefinition(processDefinition.getId());
   
    newTransaction();

    assertEquals(0, graphSession.findAllProcessDefinitions().size());
    assertEquals(0, graphSession.findProcessInstances(processDefinition.getId()).size());
  }

  public void testLatestProcessDefinitions() {
    ProcessDefinition websale = new ProcessDefinition("websale");
    jbpmContext.deployProcessDefinition(websale);
    jbpmContext.deployProcessDefinition(websale);
    jbpmContext.deployProcessDefinition(websale);

    ProcessDefinition changeNappy = new ProcessDefinition("change nappy");
    jbpmContext.deployProcessDefinition(changeNappy);
    jbpmContext.deployProcessDefinition(changeNappy);

    newTransaction();
   
    List latestProcessDefinitions = graphSession.findLatestProcessDefinitions();
    assertEquals(2, latestProcessDefinitions.size());
    assertEquals(3, getVersionOfProcess("websale", latestProcessDefinitions));
    assertEquals(2, getVersionOfProcess("change nappy", latestProcessDefinitions));
  }

  private int getVersionOfProcess(String name, List latestProcessDefinitions) {
    Iterator iter = latestProcessDefinitions.iterator();
    while (iter.hasNext()) {
      ProcessDefinition processDefinition = (ProcessDefinition) iter.next();
      if (name.equals(processDefinition.getName())) {
        return processDefinition.getVersion();
      }
    }
    return -2;
  }
}
TOP

Related Classes of org.jbpm.db.GraphSessionDbTest

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.