BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
Conditions.cpp
Go to the documentation of this file.
1#include "Conditions.h"
2#include "ExtensionElements.h"
5
6using namespace BPMNOS::Model;
7
9 : BPMN::ExtensionElements( baseElement )
10 , parent(parent)
11{
14 try {
15 conditions.push_back(std::make_unique<Restriction>(&condition,attributeRegistry));
16 }
17 catch ( const std::exception& error ) {
18 throw std::runtime_error("Conditions: illegal parameters for condition '" + (std::string)condition.id.value + "'.\n" + error.what());
19 }
20
21 // add data dependencies
22 for ( auto input : conditions.back()->expression.inputs ) {
23 if ( input->category == Attribute::Category::STATUS && input->index == BPMNOS::Model::ExtensionElements::Index::Timestamp ) {
24 throw std::runtime_error("Conditions: condition '" + (std::string)condition.id.value + "' is time dependent");
25 }
26 dataDependencies.insert(input);
27 }
28 }
29}
30
31template <typename DataType>
32bool Conditions::conditionsSatisfied(const BPMNOS::Values& status, const DataType& data, const BPMNOS::Values& globals) const {
33 for ( auto& condition : conditions ) {
34 if ( !condition->isSatisfied(status,data,globals) ) {
35 return false;
36 }
37 }
38 return true;
39}
40
41template bool Conditions::conditionsSatisfied<BPMNOS::Values>(const BPMNOS::Values& status, const BPMNOS::Values& data, const BPMNOS::Values& globals) const;
42template bool Conditions::conditionsSatisfied<BPMNOS::SharedValues>(const BPMNOS::Values& status, const BPMNOS::SharedValues& data, const BPMNOS::Values& globals) const;
std::vector< std::unique_ptr< Restriction > > conditions
Definition Conditions.h:22
std::set< const Attribute * > dataDependencies
Set containing all attributes used in any of the conditions.
Definition Conditions.h:23
Conditions(XML::bpmn::tBaseElement *baseElement, BPMN::Scope *parent)
Definition Conditions.cpp:8
const BPMN::Scope * parent
Definition Conditions.h:21
bool conditionsSatisfied(const BPMNOS::Values &status, const DataType &data, const BPMNOS::Values &globals) const
Class holding extension elements representing execution data for nodes.
AttributeRegistry attributeRegistry
Registry allowing to look up all status and data attributes by their names.
std::unique_ptr< ExtensionElements > extensionElements
Definition bpmn++.h:16299
std::vector< std::reference_wrapper< T > > get()
Returns a vector of elements of type T embedded within a container of type T.
Definition bpmn++.h:16367
Base class for BPMN elements that may contain a ChildNode elements.
Definition bpmn++.h:16510
The BPMN namespace contains linked classes representing a BPMN model.
Definition bpmn++.h:16221