/*
* 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 org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti.engine.impl.pvm.ProcessDefinitionBuilder;
import org.activiti.engine.impl.pvm.delegate.ActivityBehavior;
import org.activiti.engine.impl.pvm.delegate.ActivityExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pl.nask.hsn2.bus.api.Bus;
public class PvmProcessFactory {
Bus bus = new Bus() {
@Override
public void start() {
}
@Override
public void stop() {
}
@Override
public boolean isRunning() {
return true;
}
};
BehaviorFactory behaviourFactory = new BehaviorFactoryImpl();
public PvmProcessFactory() {}
public PvmProcessFactory(Bus bus) {
this.bus = bus;
this.behaviourFactory = new BehaviorFactoryImpl();
}
public void addStart(ProcessDefinitionBuilder builder, String transition) {
builder
.createActivity("start")
.behavior(behaviourFactory.emptyBehaviorInstance())
.initial()
.transition(transition)
.endActivity();
}
public void addEnd(ProcessDefinitionBuilder builder) {
builder
.createActivity("end")
.behavior(behaviourFactory.emptyBehaviorInstance())
.endActivity();
}
public void addSignallable(ProcessDefinitionBuilder builder, String actName, String transition) {
builder
.createActivity(actName)
.behavior(signallable(actName, null))
.transition(transition)
.endActivity();
}
private ActivityBehavior signallable(String actName, Object object) {
return new AbstractBpmnActivityBehavior() {
private Logger logger = LoggerFactory.getLogger("TestSignallableBehavior");
@Override
public void execute(ActivityExecution execution) throws Exception {}
@Override
public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {
logger.debug("activity: {}", execution.getActivity().getId());
logger.debug("got signal: {} with data: {}", new Object[] {signalName, signalData});
leave(execution);
}
};
}
public void addFork(ProcessDefinitionBuilder builder, String actName, String... transitions) {
builder.createActivity(actName).behavior(behaviourFactory.forkBehaviorInstance());
for (String trans: transitions) {
builder.transition(trans);
}
builder.endActivity();
}
public void addJoin(ProcessDefinitionBuilder builder, String actName, String transition) {
builder
.createActivity(actName)
.behavior(behaviourFactory.joinBehaviorInstance())
.transition(transition)
.endActivity();
}
public ExtendedProcessDefinitionBuilder newProcessDefinitionBuilder(String processName) {
return new ExtendedProcessDefinitionBuilder(processName);
}
public ProcessDefinitionBuilder newProcessDefinitionBuilder() {
return new ExtendedProcessDefinitionBuilder();
}
public ExtendedProcessDefinitionImpl createSimpleProcess(String processName) {
ExtendedProcessDefinitionBuilder builder = newProcessDefinitionBuilder(processName);
addStart(builder, "service");
addSignallable(builder, "service", "end");
addEnd(builder);
return builder.buildProcessDefinition();
}
}