/** * tests initialization */ public function setUp() { TaoPhpUnitTestRunner::initTest(); $processDefinitionClass = new core_kernel_classes_Class(CLASS_PROCESS); $processDefinition = $processDefinitionClass->createInstance('process of Cloning UnitTest', 'created for the unit test of process cloner'); if ($processDefinition instanceof core_kernel_classes_Resource) { $this->proc = $processDefinition; } $this->apiModel = core_kernel_impl_ApiModelOO::singleton(); $this->authoringService = wfAuthoring_models_classes_ProcessService::singleton(); $this->activityService = wfAuthoring_models_classes_ActivityService::singleton(); $this->connectorService = wfAuthoring_models_classes_ConnectorService::singleton(); $this->processCloner = new wfAuthoring_models_classes_ProcessCloner(); }
protected function flattenProcessActivity(core_kernel_classes_Resource $activity) { $this->initCloningVariables(); $services = wfEngine_models_classes_ActivityService::singleton()->getInteractiveServices($activity); // only replace single-service activities, with the service process runner if (count($services) == 1) { $serviceCall = current($services); $serviceDefinition = $serviceCall->getUniquePropertyValue(new core_kernel_classes_Property(PROPERTY_CALLOFSERVICES_SERVICEDEFINITION)); if ($serviceDefinition->getUri() == INSTANCE_SERVICE_PROCESSRUNNER) { // found a wfEngine call, extract processDefnition $subProcess = $this->getSubProcess($serviceCall); if (empty($subProcess)) { throw new common_exception_InconsistentData('Missing process uri in service call ' . $serviceCall->getUri()); } // @todo test the process first // @todo clone sub process common_Logger::w('Should have cloned subprocess ' . $subProcess); $segment = $this->cloneProcessSegment($subProcess); $inActivity = $segment['in']; $firstout = current($segment['out']); //allow first acitvity only if the parent is if (!wfAuthoring_models_classes_ActivityService::singleton()->isInitial($activity)) { $inActivity->editPropertyValues(new core_kernel_classes_Property(PROPERTY_ACTIVITIES_ISINITIAL), GENERIS_FALSE); } $this->addClonedActivity($inActivity, $activity, $firstout); $propProcessActivities = new core_kernel_classes_Property(PROPERTY_PROCESS_ACTIVITIES); foreach ($this->getClonedActivities() as $activityClone) { $this->processDefinition->setPropertyValue($propProcessActivities, $activityClone->getUri()); } //get the previous connector if exists and clone it $allConnectors = wfAuthoring_models_classes_ProcessService::singleton()->getConnectorsByActivity($activity); $connectors = array_merge($allConnectors['next'], $allConnectors['prev']); foreach ($connectors as $connector) { //trick to reference previous and following connector: connector_prev -> activity_subprocess[activity1, activity2, etc.] -> connector_follow $this->addClonedConnector($connector, $connector); } //glue segment: $glue = array_merge(array($activity), $allConnectors['prev']); foreach ($glue as $fragment) { $this->linkClonedStep($fragment); } //delete all activity: $activity->delete(true); //recursive call: foreach ($this->getClonedActivities() as $activityClone) { $this->flattenProcessActivity($activityClone); } } } }
protected function createLinearSuperProcess($processes) { $processDefinitionClass = new core_kernel_classes_Class(CLASS_PROCESS); $processDefinition = $processDefinitionClass->createInstance('process for ' . __CLASS__); $this->assertIsA($processDefinition, 'core_kernel_classes_Resource'); $activityService = wfAuthoring_models_classes_ActivityService::singleton(); $connectorService = wfAuthoring_models_classes_ConnectorService::singleton(); $processRunnerService = new core_kernel_classes_Resource(INSTANCE_SERVICE_PROCESSRUNNER); $processRunnerParam = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_PROCESSDEFINITION); $last = null; foreach ($processes as $subProcess) { $serviceCall = new tao_models_classes_service_ServiceCall($processRunnerService); $serviceCall->addInParameter(new tao_models_classes_service_ConstantParameter($processRunnerParam, $subProcess)); $current = $activityService->createActivity($processDefinition); $current->setPropertyValue(new core_kernel_classes_Property(PROPERTY_ACTIVITIES_INTERACTIVESERVICES), $serviceCall->toOntology()); if (is_null($last)) { $current->editPropertyValues(new core_kernel_classes_Property(PROPERTY_ACTIVITIES_ISINITIAL), GENERIS_TRUE); } else { $connectorService->createSequential($last, $current); } $last = $current; } return $processDefinition; }
/** * Short description of method deleteActivity * * @access public * @author Joel Bout, <*****@*****.**> * @param Resource activity * @return boolean */ public function deleteActivity(core_kernel_classes_Resource $activity) { $returnValue = (bool) false; $activityService = wfAuthoring_models_classes_ActivityService::singleton(); $returnValue = $activityService->delete($activity); return (bool) $returnValue; }
public function testSplitJoinVariable() { $process = wfAuthoring_models_classes_ProcessService::singleton()->createProcess('test process for ' . __FUNCTION__); $activityAuthoring = wfAuthoring_models_classes_ActivityService::singleton(); $webservice = new core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAODelivery.rdf#ServiceWebService'); $activity = array(); for ($i = 1; $i <= 3; $i++) { $activity[$i] = $activityAuthoring->createFromServiceDefinition($process, $webservice, array()); } wfAuthoring_models_classes_ProcessService::singleton()->setFirstActivity($process, $activity[1]); $c1 = $this->service->createSplit($activity[1], array($activity[2])); $c2 = $this->service->createJoin(array($activity[2]), $activity[3]); $this->service->setSplitCardinality($c1, array($activity[2]->getUri() => '3')); $this->service->setJoinCardinality($c2, array($activity[2]->getUri() => '3')); $this->runProcess($process, 5); wfAuthoring_models_classes_ProcessService::singleton()->deleteProcess($process); }