use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.
the class TimerNodeHandler method handleNode.
public void handleNode(final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
TimerNode timerNode = (TimerNode) node;
String delay = element.getAttribute("delay");
String period = element.getAttribute("period");
if ((delay != null && delay.length() > 0) || (period != null && period.length() > 0)) {
Timer timer = timerNode.getTimer();
if (timer == null) {
timer = new Timer();
timerNode.setTimer(timer);
}
if (delay != null && delay.length() != 0) {
timer.setDelay(delay);
}
if (period != null && period.length() != 0) {
timer.setPeriod(period);
}
}
}
use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.
the class EventBasedNodeBuilder method build.
public void build(Process process, ProcessDescr processDescr, ProcessBuildContext context, Node node) {
super.build(process, processDescr, context, node);
Map<Timer, DroolsAction> timers = ((StateBasedNode) node).getTimers();
if (timers != null) {
for (DroolsAction action : timers.values()) {
buildAction(action, context, (NodeImpl) node);
}
}
}
use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.
the class TimerNodeInstance method createTimerInstance.
protected TimerInstance createTimerInstance(InternalKnowledgeRuntime kruntime) {
Timer timer = getTimerNode().getTimer();
TimerInstance timerInstance = new TimerInstance();
if (kruntime != null && kruntime.getEnvironment().get("jbpm.business.calendar") != null) {
BusinessCalendar businessCalendar = (BusinessCalendar) kruntime.getEnvironment().get("jbpm.business.calendar");
String delay = resolveVariable(timer.getDelay());
timerInstance.setDelay(businessCalendar.calculateBusinessTimeAsDuration(delay));
if (timer.getPeriod() == null) {
timerInstance.setPeriod(0);
} else {
String period = resolveVariable(timer.getPeriod());
timerInstance.setPeriod(businessCalendar.calculateBusinessTimeAsDuration(period));
}
} else {
configureTimerInstance(timer, timerInstance);
}
timerInstance.setTimerId(timer.getId());
return timerInstance;
}
use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.
the class StateBasedNodeInstance method internalTrigger.
public void internalTrigger(NodeInstance from, String type) {
super.internalTrigger(from, type);
// if node instance was cancelled, abort
if (getNodeInstanceContainer().getNodeInstance(getId()) == null) {
return;
}
// activate timers
Map<Timer, DroolsAction> timers = getEventBasedNode().getTimers();
if (timers != null) {
addTimerListener();
timerInstances = new ArrayList<Long>(timers.size());
TimerManager timerManager = ((InternalProcessRuntime) getProcessInstance().getKnowledgeRuntime().getProcessRuntime()).getTimerManager();
for (Timer timer : timers.keySet()) {
TimerInstance timerInstance = createTimerInstance(timer);
timerManager.registerTimer(timerInstance, (ProcessInstance) getProcessInstance());
timerInstances.add(timerInstance.getId());
}
}
if (getEventBasedNode().getBoundaryEvents() != null) {
for (String name : getEventBasedNode().getBoundaryEvents()) {
boolean isActive = ((InternalAgenda) getProcessInstance().getKnowledgeRuntime().getAgenda()).isRuleActiveInRuleFlowGroup("DROOLS_SYSTEM", name, getProcessInstance().getId());
if (isActive) {
getProcessInstance().getKnowledgeRuntime().signalEvent(name, null);
} else {
addActivationListener();
}
}
}
((WorkflowProcessInstanceImpl) getProcessInstance()).addActivatingNodeId((String) getNode().getMetaData().get("UniqueId"));
}
use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.
the class StateBasedNode method addTimer.
public void addTimer(Timer timer, DroolsAction action) {
if (timers == null) {
timers = new HashMap<Timer, DroolsAction>();
}
if (timer.getId() == 0) {
long id = 0;
for (Timer t : timers.keySet()) {
if (t.getId() > id) {
id = t.getId();
}
}
timer.setId(++id);
}
timers.put(timer, action);
}
Aggregations