/*
* Copyright (c) NASK, NCSC
*
* This file is part of HoneySpider Network 2.1.
*
* This is a free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program 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 General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package pl.nask.hsn2.activiti;
import static org.testng.Assert.assertNotNull;
import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti.engine.impl.pvm.PvmActivity;
import org.activiti.engine.impl.pvm.PvmExecution;
import org.activiti.engine.impl.pvm.PvmProcessDefinition;
import org.activiti.engine.impl.pvm.PvmProcessInstance;
import org.activiti.engine.impl.pvm.delegate.ActivityExecution;
import org.activiti.engine.impl.pvm.delegate.SignallableActivityBehavior;
import org.testng.annotations.Test;
@Test
public class PvmApiExampleTest extends AbstractActivitiTest {
public void testExampleFromUserguide() {
PvmProcessDefinition processDefinition = createOnlineExample();
PvmProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
PvmExecution activityInstance = processInstance.findExecution("a");
assertNotNull(activityInstance);
activityInstance.signal(null, null);
activityInstance = processInstance.findExecution("b");
assertNotNull(activityInstance);
activityInstance.signal(null, null);
activityInstance = processInstance.findExecution("c");
assertNotNull(activityInstance);
}
public void testExampleFromUserguideModified() {
PvmProcessDefinition processDefinition = createOnlineExample();
PvmProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
PvmActivity act = processInstance.getActivity();
PvmExecution activityInstance = processInstance.findExecution("a");
assertNotNull(activityInstance);
processInstance.signal(null, null);
act = processInstance.getActivity();
activityInstance = processInstance.findExecution("b");
assertNotNull(activityInstance);
processInstance.signal(null, null);
act = processInstance.getActivity();
activityInstance = processInstance.findExecution("c");
assertNotNull(activityInstance);
}
public void testMultipleInstancesPerformance() {
printMemStats("init");
PvmProcessDefinition def = createOnlineExample();
printMemStats("definitionCreated");
super.testMultipleInstancesPerformance("PvmExample", def);
}
private PvmProcessDefinition createOnlineExample() {
PvmProcessDefinition processDefinition = pvmFactory.newProcessDefinitionBuilder("newProcess1")
.createActivity("a")
.initial()
.behavior(new EmptyActivitiBehavior())
.transition("b")
.endActivity()
.createActivity("b")
.behavior(new EmptyActivitiBehavior())
.transition("c")
.endActivity()
.createActivity("c")
.behavior(new EmptyActivitiBehavior())
.endActivity()
.buildProcessDefinition();
return processDefinition;
}
public static class EmptyActivitiBehavior extends AbstractBpmnActivityBehavior implements SignallableActivityBehavior{
@Override
public void execute(ActivityExecution execution) throws Exception {
}
@Override
public void signal(ActivityExecution execution, String signalEvent, Object signalData) throws Exception {
super.leave(execution);
}
}
}