/*
* 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.graph.def;
import org.jbpm.context.def.ContextDefinition;
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.file.def.FileDefinition;
import org.jbpm.graph.node.StartState;
import org.jbpm.taskmgmt.def.TaskMgmtDefinition;
public class ProcessDefinitionDbTest extends AbstractDbTestCase {
public void testProcessDefinitionVersion() {
ProcessDefinition processDefinition = new ProcessDefinition("name");
processDefinition.setVersion(3);
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition);
assertEquals(3, processDefinition.getVersion());
}
public void testProcessDefinitionIsTerminationImplicit() {
ProcessDefinition processDefinition = new ProcessDefinition("name");
processDefinition.setTerminationImplicit(false);
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition);
assertFalse(processDefinition.isTerminationImplicit());
}
public void testProcessDefinitionStartState() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.setStartState(new StartState());
processDefinition = saveAndReload(processDefinition);
// the start state of a process definition is mapped as a node.
// therefor the hibernate proxy will be a node
Node startState = processDefinition.getStartState();
assertTrue(Node.class.isAssignableFrom(startState.getClass()));
// reloading gives a better typed proxy
assertTrue(StartState.class.isAssignableFrom(session.load(StartState.class, new Long(
startState.getId())).getClass()));
}
public void testProcessDefinitionNodes() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.setStartState(new StartState("s"));
processDefinition.addNode(new Node("a"));
processDefinition.addNode(new Node("b"));
processDefinition.addNode(new Node("c"));
processDefinition.addNode(new Node("d"));
processDefinition = saveAndReload(processDefinition);
assertEquals("s", processDefinition.getStartState().getName());
assertEquals("s", ((Node) processDefinition.getNodes().get(0)).getName());
assertEquals("a", ((Node) processDefinition.getNodes().get(1)).getName());
assertEquals("b", ((Node) processDefinition.getNodes().get(2)).getName());
assertEquals("c", ((Node) processDefinition.getNodes().get(3)).getName());
assertEquals("d", ((Node) processDefinition.getNodes().get(4)).getName());
}
public void testActions() {
ProcessDefinition processDefinition = new ProcessDefinition();
Action action = new Action();
action.setName("a");
processDefinition.addAction(action);
action = new Action();
action.setName("b");
processDefinition.addAction(action);
processDefinition = saveAndReload(processDefinition);
assertEquals(2, processDefinition.getActions().size());
assertNotNull(processDefinition.getActions().get("a"));
assertNotNull(processDefinition.getActions().get("b"));
assertTrue(Action.class.isAssignableFrom(processDefinition.getAction("a").getClass()));
assertTrue(Action.class.isAssignableFrom(processDefinition.getAction("b").getClass()));
}
public void testEvents() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.addEvent(new Event("node-enter"));
processDefinition.addEvent(new Event("node-leave"));
processDefinition.addEvent(new Event("transition"));
processDefinition.addEvent(new Event("process-start"));
processDefinition.addEvent(new Event("process-end"));
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition.getEvent("node-enter"));
assertNotNull(processDefinition.getEvent("node-leave"));
assertNotNull(processDefinition.getEvent("transition"));
assertNotNull(processDefinition.getEvent("process-start"));
assertNotNull(processDefinition.getEvent("process-end"));
}
public void testExceptionHandlers() {
ProcessDefinition processDefinition = new ProcessDefinition();
ExceptionHandler exceptionHandler = new ExceptionHandler();
exceptionHandler.setExceptionClassName("org.disaster.FirstException");
processDefinition.addExceptionHandler(exceptionHandler);
exceptionHandler = new ExceptionHandler();
exceptionHandler.setExceptionClassName("org.disaster.SecondException");
processDefinition.addExceptionHandler(exceptionHandler);
exceptionHandler = new ExceptionHandler();
exceptionHandler.setExceptionClassName("org.disaster.ThirdException");
processDefinition.addExceptionHandler(exceptionHandler);
processDefinition = saveAndReload(processDefinition);
assertEquals("org.disaster.FirstException", ((ExceptionHandler) processDefinition.getExceptionHandlers()
.get(0)).getExceptionClassName());
assertEquals("org.disaster.SecondException", ((ExceptionHandler) processDefinition.getExceptionHandlers()
.get(1)).getExceptionClassName());
assertEquals("org.disaster.ThirdException", ((ExceptionHandler) processDefinition.getExceptionHandlers()
.get(2)).getExceptionClassName());
}
public void testContextModuleDefinition() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.addDefinition(new ContextDefinition());
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition.getContextDefinition());
assertSame(ContextDefinition.class, processDefinition.getContextDefinition().getClass());
}
public void testFileDefinition() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.addDefinition(new FileDefinition());
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition.getFileDefinition());
assertSame(FileDefinition.class, processDefinition.getFileDefinition().getClass());
}
public void testTaskMgmtDefinition() {
ProcessDefinition processDefinition = new ProcessDefinition();
processDefinition.addDefinition(new TaskMgmtDefinition());
processDefinition = saveAndReload(processDefinition);
assertNotNull(processDefinition.getTaskMgmtDefinition());
assertSame(TaskMgmtDefinition.class, processDefinition.getTaskMgmtDefinition().getClass());
}
}