public function mapBpmnFlowsToWorkflowRoutes() { //Task dummies //Delete Task Routes foreach ($this->arrayElementTaskRelation as $value) { $this->wp->resetTaskRoutes($value); } //Activities foreach ($this->getActivities() as $value) { $activity = $value; //Delete Task Routes $this->wp->resetTaskRoutes($activity["ACT_UID"]); //Flows $arrayFlow = \BpmnFlow::findAllBy(array( \BpmnFlowPeer::FLO_TYPE => array("MESSAGE", \Criteria::NOT_EQUAL), \BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $activity["ACT_UID"], \BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnActivity" )); foreach ($arrayFlow as $value2) { $flow = $value2; switch ($flow->getFloElementDestType()) { case "bpmnActivity": //Activity -> Activity $this->wp->addRoute($activity["ACT_UID"], $flow->getFloElementDest(), "SEQUENTIAL"); break; case "bpmnGateway": //Activity -> Gateway //We must find the related flows: gateway -> <object> $this->mapBpmnGatewayToWorkflowRoutes($activity["ACT_UID"], $flow->getFloElementDest()); break; case "bpmnEvent": //Activity -> Event $event = \BpmnEventPeer::retrieveByPK($flow->getFloElementDest()); if (!is_null($event)) { switch ($event->getEvnType()) { case "START": throw new \LogicException("Incorrect design" . PHP_EOL . "Given: bpmnActivity -> " . $flow->getFloElementDestType()); break; case "END": //$event->getEvnMarker(): EMPTY or MESSAGETHROW switch ($event->getEvnMarker()) { case "MESSAGETHROW": $taskUid = $this->createTaskByElement( $event->getEvnUid(), "bpmnEvent", "end-message-event" ); $result = $this->wp->addRoute($activity["ACT_UID"], $taskUid, "SEQUENTIAL"); $result = $this->wp->addRoute($taskUid, -1, "SEQUENTIAL"); break; case "EMAIL": $taskUid = $this->createTaskByElement( $event->getEvnUid(), "bpmnEvent", "end-email-event" ); $result = $this->wp->addRoute($activity["ACT_UID"], $taskUid, "SEQUENTIAL"); $result = $this->wp->addRoute($taskUid, -1, "SEQUENTIAL"); break; default: //EMPTY //This it's already implemented //and others types $result = $this->wp->addRoute($activity["ACT_UID"], -1, "SEQUENTIAL"); break; } break; default: //INTERMEDIATE //and others types $this->mapBpmnEventToWorkflowRoutes($activity["ACT_UID"], $flow->getFloElementDest()); break; } } break; } } } //Events foreach ($this->getEvents() as $value) { $event = $value; switch ($event["EVN_TYPE"]) { case "START": switch ($event["EVN_MARKER"]) { case "MESSAGECATCH": $taskUid = $this->createTaskByElement( $event["EVN_UID"], "bpmnEvent", "start-message-event" ); $this->wp->setStartTask($taskUid); $this->mapBpmnEventToWorkflowRoutes($taskUid, $event["EVN_UID"]); break; case "TIMER": $taskUid = $this->createTaskByElement( $event["EVN_UID"], "bpmnEvent", "start-timer-event" ); $this->wp->setStartTask($taskUid); $this->mapBpmnEventToWorkflowRoutes($taskUid, $event["EVN_UID"]); break; case "EMPTY": $this->updateEventActivityDefinition(\BpmnEventPeer::retrieveByPK($event["EVN_UID"]), true); break; } break; //case "END": // break; //case "INTERMEDIATE": // break; } } }