Adding logic to remove related objects when a gateway is removed for BpmnWorkflow Adapter

- Now when a gateway is removed all its related flows are removed too
- When a gateway is removed all Composed Workflow Routes are removed too
This commit is contained in:
Erik Amaru Ortiz
2014-02-24 19:58:32 -04:00
parent 7962d40a0f
commit 75cf6e3eea
4 changed files with 50 additions and 4 deletions

View File

@@ -16,6 +16,24 @@ require_once 'classes/model/om/BaseBpmnFlow.php';
*/ */
class BpmnFlow extends BaseBpmnFlow class BpmnFlow extends BaseBpmnFlow
{ {
public static function removeAllRelated($elementUid)
{
$c = new Criteria('workflow');
$c1 = $c->getNewCriterion(BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $elementUid);
$c2 = $c->getNewCriterion(BpmnFlowPeer::FLO_ELEMENT_DEST, $elementUid);
$c1->addOr($c2);
$c->add($c1);
$flows = BpmnFlowPeer::doSelect($c);
foreach ($flows as $flow) {
$flow->delete();
}
}
/** /**
* @param $field string coming from \BpmnFlowPeer::<FIELD_NAME> * @param $field string coming from \BpmnFlowPeer::<FIELD_NAME>
* @param $value string * @param $value string

View File

@@ -3,7 +3,6 @@ namespace ProcessMaker\Project\Adapter;
use ProcessMaker\Project; use ProcessMaker\Project;
use ProcessMaker\Util\Hash; use ProcessMaker\Util\Hash;
use Symfony\Component\DependencyInjection\Exception\LogicException;
/** /**
* Class BpmnWorkflow * Class BpmnWorkflow
@@ -149,6 +148,32 @@ class BpmnWorkflow extends Project\Bpmn
$this->wp->removeTask($actUid); $this->wp->removeTask($actUid);
} }
public function removeGateway($gatUid)
{
$gatewayData = $this->getGateway($gatUid);
$flowsDest = \BpmnFlow::findAllBy(\BpmnFlowPeer::FLO_ELEMENT_DEST, $gatUid);
foreach ($flowsDest as $flowDest) {
switch ($flowDest->getFloElementOriginType()) {
case "bpmnActivity":
$actUid = $flowDest->getFloElementOrigin();
$flowsOrigin = \BpmnFlow::findAllBy(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $gatUid);
foreach ($flowsOrigin as $flowOrigin) {
switch ($flowOrigin->getFloElementDestType()) {
case "bpmnActivity":
$toActUid = $flowOrigin->getFloElementDest();
$this->wp->removeRouteFromTo($actUid, $toActUid);
break;
}
}
break;
}
}
parent::removeGateway($gatUid);
}
// public function addFlow($data) // public function addFlow($data)
// { // {
// parent::addFlow($data); // parent::addFlow($data);

View File

@@ -500,6 +500,9 @@ class Bpmn extends Handler
$gateway = GatewayPeer::retrieveByPK($gatUid); $gateway = GatewayPeer::retrieveByPK($gatUid);
$gateway->delete(); $gateway->delete();
// remove related object (flows)
Flow::removeAllRelated($gatUid);
self::log("Remove Gateway Success!"); self::log("Remove Gateway Success!");
} catch (\Exception $e) { } catch (\Exception $e) {
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());

View File

@@ -21,7 +21,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
public static function tearDownAfterClass() public static function tearDownAfterClass()
{ {
return false; //return false;
//cleaning DB //cleaning DB
foreach (self::$uids as $prjUid) { foreach (self::$uids as $prjUid) {
$bwap = Project\Adapter\BpmnWorkflow::load($prjUid); $bwap = Project\Adapter\BpmnWorkflow::load($prjUid);
@@ -328,10 +328,10 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
// cleaning // cleaning
$bwap->removeActivity($actUid1); $bwap->removeActivity($actUid1);
$bwap->removeActivity($actUid2); $bwap->removeActivity($actUid2);
$bwap->removeFlow($flowUid1); $bwap->removeGateway($gatUid);
$bwap->removeFlow($flowUid2);
$this->assertCount(0, $bwap->getActivities()); $this->assertCount(0, $bwap->getActivities());
$this->assertCount(0, $bwap->getGateways());
$this->assertCount(0, $bwap->getFlows()); $this->assertCount(0, $bwap->getFlows());
$wp = Project\Workflow::load($bwap->getUid()); $wp = Project\Workflow::load($bwap->getUid());