private static JoinRunTime getJoinRunTime(XpdlInstance instance, NodeImpl node) { JoinType joinType = ((AbstractActivity) node.getBehaviour()).getJoinType(); JoinRunTime joinRunTime = instance.getJoinRunTime(node.getName()); if (joinRunTime == null) { int joinIncomingTransitionNbRequired = 1; if (joinType.equals(JoinType.AND)) { joinIncomingTransitionNbRequired = node.getIncomingTransitions().size(); } Map<String, JoinRunTime.WaitingTransition> ins = new HashMap<String, JoinRunTime.WaitingTransition>(); for (Transition t : node.getIncomingTransitions()) { String name = t.getSource().getName(); ins.put(name, new JoinRunTime.WaitingTransition(name, null)); } joinRunTime = new JoinRunTime(node.getName(), ins, joinIncomingTransitionNbRequired); instance.pushJoinRuntime(joinRunTime); } return joinRunTime; }
joinType = ((AbstractActivity)sourceNode.getBehaviour()).getJoinType(); if (JoinType.XOR.equals(joinType)) { hasEntryPointXor = true;
if (!destNodeActivity.getJoinType().equals(org.ow2.bonita.definition.activity.AbstractActivity.JoinType.XOR)) { throw new DeploymentRuntimeException("iteration points to a node with a join " + destNodeActivity.getJoinType() + ", but only XOR are supported.");
private static boolean isJoinOk(final XpdlInstance instance, final NodeImpl node) { if (!node.hasIncomingTransitions()) { return true; } if (((AbstractActivity) node.getBehaviour()).getJoinType().equals(JoinType.XOR)) { // join XOR for (final Transition transition : node.getIncomingTransitions()) { final TransitionStatus ts = instance.getTransitionStatus(transition); if (ts.getState().equals(TransitionState.ARRIVED)) { return true; } } return false; } else { // join AND for (final Transition transition : node.getIncomingTransitions()) { final TransitionStatus ts = instance.getTransitionStatus(transition); if (!ts.getState().equals(TransitionState.ARRIVED)) { return false; } } return true; } }