From aa399794f3eda8499eefb365e6837f9b957c1dc0 Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Wed, 5 Feb 2014 14:09:48 -0400 Subject: [PATCH] Adding Override Methods to Adapter Bpmn->Workflow Projects --- .../Project/Adapter/BpmnWorkflow.php | 61 ++++++++++++++++ .../engine/src/ProcessMaker/Project/Bpmn.php | 28 +++---- .../src/ProcessMaker/Project/Workflow.php | 12 ++- .../src/Services/Api/ProcessMaker/Project.php | 7 +- .../Project/Adapter/BpmnWorkflowTest.php | 73 +++++++++++++++++++ .../Tests/ProcessMaker/Project/BpmnTest.php | 4 +- .../ProcessMaker/Project/WorkflowTest.php | 4 +- 7 files changed, 168 insertions(+), 21 deletions(-) create mode 100644 workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index a26657f47..fb8dba522 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -7,5 +7,66 @@ use ProcessMaker\Util\Hash; class BpmnWorkflow extends Project\Bpmn { + /** + * OVERRIDES + */ + public function create($data) + { + try { + parent::create($data); + } catch (\Exception $e) { + throw new \RuntimeException(sprintf("Can't create Bpmn Project." . PHP_EOL . $e->getMessage())); + } + + try { + $wpData = array(); + $wpData["PRO_UID"] = $this->getUid(); + + if (array_key_exists("PRJ_NAME", $data)) { + $wpData["PRO_TITLE"] = $data["PRJ_NAME"]; + } + if (array_key_exists("PRJ_DESCRIPTION", $data)) { + $wpData["PRO_DESCRIPTION"] = $data["PRJ_DESCRIPTION"]; + } + if (array_key_exists("PRJ_AUTHOR", $data)) { + $wpData["PRO_CREATE_USER"] = $data["PRJ_AUTHOR"]; + } + + $wp = new Project\Workflow(); + $wp->create($wpData); + + } catch (\Exception $e) { + $prjUid = $this->getUid(); + $this->remove(); + + throw new \RuntimeException(sprintf( + "Can't create Bpmn Project with prj_uid: %s, workflow creation fails." . PHP_EOL . $e->getMessage() + , $prjUid + )); + } + } + + public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + $bpmnProjects = parent::getList($start, $limit, $filter, $changeCaseTo); + $workflowProjects = Project\Workflow::getList($start, $limit, "", ""); + + $workflowProjectsUids = array(); + + foreach ($workflowProjects as $workflowProject) { + $workflowProjectsUids[] = $workflowProject["PRO_UID"]; + } + + $prjUidKey = $changeCaseTo == CASE_UPPER ? "PRJ_UID" : "prj_uid"; + $list = array(); + + foreach ($bpmnProjects as $bpmnProject) { + if (in_array($bpmnProject[$prjUidKey], $workflowProjectsUids)) { + $list[] = $bpmnProject; + } + } + + return $list; + } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 8a342414e..ed226951e 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -88,6 +88,11 @@ class Bpmn extends Handler $this->prjUid = $this->project->getPrjUid(); } + public function update() + { + + } + public function remove() { /* @@ -100,20 +105,15 @@ class Bpmn extends Handler foreach ($activities as $activity) { $this->removeActivity($activity["ACT_UID"]); } - - $process = ProcessPeer::retrieveByPK($this->getProcess("object")->getProUid()); - $process->delete(); - - $diagram = DiagramPeer::retrieveByPK($this->getDiagram("object")->getDiaUid()); - $diagram->delete(); - - $project = ProjectPeer::retrieveByPK($this->getUid()); - $project->delete(); - } - - public function update() - { - + if ($process = $this->getProcess("object")) { + $process->delete(); + } + if ($diagram = $this->getDiagram("object")) { + $diagram->delete(); + } + if ($project = $this->getProject("object")) { + $project->delete(); + } } public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index 6bc33544c..0f9dba7da 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -73,9 +73,19 @@ class Workflow extends Handler $this->deleteProcess($this->proUid); } + public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + //return Project::getAll($start, $limit, $filter, $changeCaseTo); + $process = new Process(); + $processes = $process->getAllProcesses( $start, $limit, "", ""); + //$processes = $process->getAll(); + + return $processes; + } + public function getUid() { - if (empty($this->project)) { + if (empty($this->proUid)) { throw new \RuntimeException("Error: There is not an initialized project."); } diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project.php b/workflow/engine/src/Services/Api/ProcessMaker/Project.php index b9909aee1..5a2a9810e 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project.php @@ -22,7 +22,10 @@ class Project extends Api $limit = null; $filter = ""; - return \ProcessMaker\Project\Bpmn::getList($start, $limit, $filter, CASE_LOWER); + $projects = \ProcessMaker\Project\Adapter\BpmnWorkflow::getList($start, $limit, $filter, CASE_LOWER); + + return $projects; + } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } @@ -31,7 +34,7 @@ class Project extends Api public function get($prjUid) { try { - $projects = \ProcessMaker\Project\Bpmn::getList(); + $projects = new \StdClass(); //TODO return $projects; } catch (\Exception $e) { diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php new file mode 100644 index 000000000..a6619c44c --- /dev/null +++ b/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php @@ -0,0 +1,73 @@ + "Test BPMN Project #1", + "PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1", + "PRJ_AUTHOR" => "00000000000000000000000000000001" + ); + + $bwap = new Project\Adapter\BpmnWorkflow($data); + + try { + $bp = Project\Bpmn::load($bwap->getUid()); + } catch (\Exception $e){} + + try { + $wp = Project\Workflow::load($bwap->getUid()); + } catch (\Exception $e){} + + $this->assertNotEmpty($bp); + $this->assertNotEmpty($wp); + $this->assertEquals($bp->getUid(), $wp->getUid()); + + $project = $bp->getProject(); + $process = $wp->getProcess(); + + $this->assertEquals($project["PRJ_NAME"], $process["PRO_TITLE"]); + $this->assertEquals($project["PRJ_DESCRIPTION"], $process["PRO_DESCRIPTION"]); + $this->assertEquals($project["PRJ_AUTHOR"], $process["PRO_CREATE_USER"]); + } + + function testCreate() + { + $data = array( + "PRJ_NAME" => "Test BPMN Project #2", + "PRJ_DESCRIPTION" => "Description for - Test BPMN Project #2", + "PRJ_AUTHOR" => "00000000000000000000000000000001" + ); + + $bwap = new Project\Adapter\BpmnWorkflow(); + $bwap->create($data); + + try { + $bp = Project\Bpmn::load($bwap->getUid()); + } catch (\Exception $e){} + + try { + $wp = Project\Workflow::load($bwap->getUid()); + } catch (\Exception $e){} + + $this->assertNotEmpty($bp); + $this->assertNotEmpty($wp); + $this->assertEquals($bp->getUid(), $wp->getUid()); + + $project = $bp->getProject(); + $process = $wp->getProcess(); + + $this->assertEquals($project["PRJ_NAME"], $process["PRO_TITLE"]); + $this->assertEquals($project["PRJ_DESCRIPTION"], $process["PRO_DESCRIPTION"]); + $this->assertEquals($project["PRJ_AUTHOR"], $process["PRO_CREATE_USER"]); + } +} \ No newline at end of file diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php index 73c45b3c3..e6bc64e67 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php @@ -4,7 +4,7 @@ namespace Tests\ProcessMaker\Project; use \ProcessMaker\Project; if (! class_exists("Propel")) { - include_once __DIR__ . "/../bootstrap.php"; + include_once __DIR__ . "/../../bootstrap.php"; } @@ -14,7 +14,7 @@ class BpmnTest extends \PHPUnit_Framework_TestCase public static function tearDownAfterClass() { - return; + //return; //cleaning DB foreach (self::$prjUids as $prjUid) { diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php index 4d144e229..cced3ac4d 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php @@ -4,10 +4,10 @@ namespace Tests\ProcessMaker\Project; use \ProcessMaker\Project; if (! class_exists("Propel")) { - include_once __DIR__ . "/../bootstrap.php"; + include_once __DIR__ . "/../../bootstrap.php"; } -class ProcessMakerProjectWorkflowTest extends \PHPUnit_Framework_TestCase +class WorkflowTest extends \PHPUnit_Framework_TestCase { protected static $proUids = array();