20 public function parseBPMN2XML($bpmn2_xml, $workflow_name =
null)
22 $bpmn2_array = $this->convertXmlToArray( $bpmn2_xml );
23 $process = $this->getProcessNodeFromArray( $bpmn2_array );
24 $messages = $this->getMessageNodesFromArray( $bpmn2_array );
26 $workflow_name = $this->determineWorkflowClassName( $workflow_name, $bpmn2_array, $process );
28 require_once
'./Services/WorkflowEngine/classes/parser/class.ilWorkflowScaffold.php';
31 $constructor_method_content =
'';
33 $class_object->setWorkflowName($workflow_name);
35 if(count(@$process[
'children']))
37 $stashed_sequence_flows = array();
39 $stashed_associations = array();
41 $stashed_process_extensions = array();
43 require_once
'./Services/WorkflowEngine/classes/parser/elements/class.ilBPMN2ElementLoader.php';
47 foreach($process[
'children'] as $element)
49 if($element[
'name'] ==
'ioSpecification')
51 foreach($element[
'children'] as $iospec_element)
53 $element_object =
$loader->load($iospec_element[
'name']);
54 $constructor_method_content .= $element_object->getPHP($iospec_element, $class_object);
60 if($element[
'name'] ==
'sequenceFlow')
62 $stashed_sequence_flows[] = $element;
64 else if($element[
'name'] ==
'association')
66 $stashed_associations[] = $element;
68 else if($element[
'name'] ==
'extensionElements')
70 $stashed_process_extensions[] = $element;
74 $element_object =
$loader->load($element[
'name']);
75 $constructor_method_content .= $element_object->getPHP($element, $class_object);
79 foreach($stashed_sequence_flows as $element)
81 $element_object =
$loader->load($element[
'name']);
82 $constructor_method_content .= $element_object->getPHP($element, $class_object);
85 foreach($stashed_associations as $element)
87 $element_object =
$loader->load($element[
'name']);
88 $constructor_method_content .= $element_object->getPHP($element, $class_object);
94 $message_definitions = array();
97 $element_object =
$loader->load(
'messageDefinition');
98 $message_definitions[] = $element_object->getMessageDefinitionArray($message);
102 public static function getMessageDefinition($id)
104 $definitions = array('.implode(
',', $message_definitions).
'
106 return $definitions[$id];
109 $class_object->addAuxilliaryMethod(
$code);
112 $class_object->setConstructorMethodContent($constructor_method_content);
115 if (strlen($constructor_method_content))
117 $class_source .= $class_object->getPHP();
120 return "<?php\n" . $class_source .
"\n?>";
128 public function convertXmlToArray($xml)
130 require_once
'./Services/WorkflowEngine/classes/parser/class.ilBPMN2ParserUtils.php';
132 $bpmn2 = $xml_to_array_parser->load_string( $xml );
141 public function getProcessNodeFromArray($bpmn2)
144 foreach ((array)@$bpmn2[
'children'] as $bpmn2_part)
146 if ($bpmn2_part[
'name'] ==
'process')
148 $process = $bpmn2_part;
160 public function getMessageNodesFromArray($bpmn2)
163 foreach ((array)@$bpmn2[
'children'] as $bpmn2_part)
165 if ($bpmn2_part[
'name'] ==
'message')
181 public function determineWorkflowClassName($workflow_name, $bpmn2_array, $process)
183 if (!$workflow_name && !count( @$bpmn2_array[
'children'] ))
185 $workflow_name = $bpmn2_array[
'attributes'][
'id'];
190 $workflow_name = $process[
'attributes'][
'id'];
191 return $workflow_name;
196 $workflow_name = substr($workflow_name,0,strpos($workflow_name,
'.'));
198 return $workflow_name;
An exception for terminatinating execution or to throw for unit testing.
Class ilBPMN2ElementLoader.
Class ilBPMN2ParserUtils.
Class ilWorkflowScaffold.