in jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowProcess.java [118:171]
public StartNode getStart(String trigger, Function<String, Object> varResolver) {
Node[] nodes = getNodes();
for (int i = 0; i < nodes.length; i++) {
if (nodes[i] instanceof StartNode) {
StartNode start = ((StartNode) nodes[i]);
// return start node that is not event based node
if (trigger == null && ((start.getTriggers() == null
|| start.getTriggers().isEmpty())
&& start.getTimer() == null)) {
return start;
} else {
if (start.getTriggers() != null) {
for (Trigger t : start.getTriggers()) {
if (t instanceof EventTrigger) {
EventTrigger eventTrigger = (EventTrigger) t;
Map<String, String> mappings = eventTrigger.getInMappings();
Object event = null;
if (varResolver != null) {
switch (mappings.size()) {
case 0:
event = null;
break;
case 1:
event = varResolver.apply(mappings.values().iterator().next());
break;
default:
event = varResolver.apply("event");
break;
}
}
for (EventFilter filter : eventTrigger.getEventFilters()) {
if (filter.acceptsEvent(trigger, event, varResolver)) {
return start;
}
}
} else if (t instanceof ConstraintTrigger && "conditional".equals(trigger)) {
return start;
}
}
} else if (start.getTimer() != null) {
if ("timer".equals(trigger)) {
return start;
}
}
}
}
}
return null;
}