public function addFlow($data) { self::log("Add Flow with data: ", $data); // setting defaults $data['FLO_UID'] = array_key_exists('FLO_UID', $data) ? $data['FLO_UID'] : Common::generateUID(); if (array_key_exists('FLO_STATE', $data)) { $data['FLO_STATE'] = is_array($data['FLO_STATE']) ? json_encode($data['FLO_STATE']) : $data['FLO_STATE']; } try { switch ($data["FLO_ELEMENT_ORIGIN_TYPE"]) { case "bpmnActivity": $class = "BpmnActivity"; break; case "bpmnGateway": $class = "BpmnGateway"; break; case "bpmnEvent": $class = "BpmnEvent"; break; case "bpmnArtifact": $class = "BpmnArtifact"; break; case "bpmnData": $class = "BpmnData"; break; case "bpmnParticipant": $class = "BpmnParticipant"; break; case "bpmnLaneset": $class = "BpmnLaneset"; break; case "bpmnLane": $class = "BpmnLane"; break; default: throw new \RuntimeException(sprintf("Invalid Object type, accepted types: [%s|%s|%s|%s], given %s.", "BpmnActivity", "BpmnBpmnGateway", "BpmnEvent", "bpmnArtifact", $data["FLO_ELEMENT_ORIGIN_TYPE"] )); } // Validate origin object exists if (! $class::exists($data["FLO_ELEMENT_ORIGIN"])) { throw new \RuntimeException(sprintf("Reference not found, the %s with UID: %s, does not exist!", ucfirst($data["FLO_ELEMENT_ORIGIN_TYPE"]), $data["FLO_ELEMENT_ORIGIN"] )); } switch ($data["FLO_ELEMENT_DEST_TYPE"]) { case "bpmnActivity": $class = "BpmnActivity"; break; case "bpmnGateway": $class = "BpmnGateway"; break; case "bpmnEvent": $class = "BpmnEvent"; break; case "bpmnArtifact": $class = "BpmnArtifact"; break; case "bpmnData": $class = "BpmnData"; break; case "bpmnParticipant": $class = "BpmnParticipant"; break; case "bpmnLaneset": $class = "BpmnLaneset"; break; case "bpmnLane": $class = "BpmnLane"; break; default: throw new \RuntimeException(sprintf("Invalid Object type, accepted types: [%s|%s|%s|%s], given %s.", "BpmnActivity", "BpmnBpmnGateway", "BpmnEvent", "bpmnArtifact", $data["FLO_ELEMENT_DEST_TYPE"] )); } // Validate origin object exists if (! $class::exists($data["FLO_ELEMENT_DEST"])) { throw new \RuntimeException(sprintf("Reference not found, the %s with UID: %s, does not exist!", ucfirst($data["FLO_ELEMENT_DEST_TYPE"]), $data["FLO_ELEMENT_DEST"] )); } //Check and validate Message Flow $this->throwExceptionFlowIfIsAnInvalidMessageFlow($data); //Create $flow = new Flow(); $flow->fromArray($data, BasePeer::TYPE_FIELDNAME); $flow->setPrjUid($this->getUid()); $flow->setDiaUid($this->getDiagram("object")->getDiaUid()); $flow->setFloPosition($this->getFlowNextPosition($data["FLO_UID"], $data["FLO_TYPE"], $data["FLO_ELEMENT_ORIGIN"])); $flow->save(); self::log("Add Flow Success!"); return $flow->getFloUid(); } catch (\Exception $e) { self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); throw $e; } }