BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
MessageDefinition.cpp
Go to the documentation of this file.
1#include "MessageDefinition.h"
2#include "Content.h"
3#include "ExtensionElements.h"
5
6using namespace BPMNOS::Model;
7
9 : element(message)
10 , name( BPMNOS::to_number(message->name.value.value,STRING) )
11{
12 header.resize(3);
13 header[ Index::Name ] = "name";
14 header[ Index::Sender ] = "sender";
15 header[ Index::Recipient ] = "recipient";
16
17 std::set< std::string > additionalHeader;
18 for ( XML::bpmnos::tParameter& parameter : element->parameter ) {
19 auto& key = parameter.name.value.value;
20 parameterMap.emplace(key,std::make_unique<Parameter>(&parameter,attributeRegistry));
21 if ( key != "name" && key != "sender" && key != "recipient" ) {
22 additionalHeader.insert(key);
23 }
24 }
25 for ( auto& key : additionalHeader ) {
26 header.push_back(key);
27 }
28
29 for ( XML::bpmnos::tContent& content : element->content ) {
30 contentMap.emplace(content.key.value.value,std::make_unique<Content>(&content,attributeRegistry));
31 }
32}
33
34template <typename DataType>
35BPMNOS::Values MessageDefinition::getSenderHeader(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const DataType& data, const BPMNOS::Values& globals) const {
36 BPMNOS::Values headerValues;
37
38 for ( auto& key : header ) {
39 if ( key == "name" ) {
40 headerValues.push_back( name );
41 }
42 else if ( key == "sender" ) {
43 headerValues.push_back( data[BPMNOS::Model::ExtensionElements::Index::Instance] );
44 }
45 else {
46 headerValues.push_back( getHeaderValue(key, attributeRegistry, status, data, globals) );
47 }
48 }
49
50 return headerValues;
51}
52
53template BPMNOS::Values MessageDefinition::getSenderHeader<BPMNOS::Values>(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::Values& data, const BPMNOS::Values& globals) const;
54template BPMNOS::Values MessageDefinition::getSenderHeader<BPMNOS::SharedValues>(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::SharedValues& data, const BPMNOS::Values& globals) const;
55
56template <typename DataType>
57BPMNOS::Values MessageDefinition::getRecipientHeader(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const DataType& data, const BPMNOS::Values& globals) const {
58 BPMNOS::Values headerValues;
59
60 for ( auto& key : header ) {
61 if ( key == "name" ) {
62 headerValues.push_back( name );
63 }
64 else if ( key == "recipient" ) {
65 headerValues.push_back( data[BPMNOS::Model::ExtensionElements::Index::Instance] );
66 }
67 else {
68 headerValues.push_back( getHeaderValue(key, attributeRegistry, status, data, globals) );
69 }
70 }
71
72 return headerValues;
73}
74
75template BPMNOS::Values MessageDefinition::getRecipientHeader<BPMNOS::Values>(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::Values& data, const BPMNOS::Values& globals) const;
76template BPMNOS::Values MessageDefinition::getRecipientHeader<BPMNOS::SharedValues>(const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::SharedValues& data, const BPMNOS::Values& globals) const;
77
78template <typename DataType>
79std::optional<BPMNOS::number> MessageDefinition::getHeaderValue(const std::string& key, const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const DataType& data, const BPMNOS::Values& globals) const {
80 std::optional<BPMNOS::number> value;
81 auto it = parameterMap.find(key);
82 if ( it != parameterMap.end() && it->second->expression ) {
83 value = it->second->expression->execute(status,data,globals);
84 }
85 return value;
86}
87
88template std::optional<BPMNOS::number> MessageDefinition::getHeaderValue<BPMNOS::Values>(const std::string& key, const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::Values& data, const BPMNOS::Values& globals) const;
89template std::optional<BPMNOS::number> MessageDefinition::getHeaderValue<BPMNOS::SharedValues>(const std::string& key, const AttributeRegistry& attributeRegistry, const BPMNOS::Values& status, const BPMNOS::SharedValues& data, const BPMNOS::Values& globals) const;
90
BPMNOS::Values getRecipientHeader(const AttributeRegistry &attributeRegistry, const BPMNOS::Values &status, const DataType &data, const BPMNOS::Values &globals) const
Returns a vector of values including message name, recipient, sender, and all other header parameters...
std::vector< std::string > header
Set of parameter names always beginning with "sender" and "recipient".
ParameterMap parameterMap
Map allowing to look up parameters by their names.
BPMNOS::Values getSenderHeader(const AttributeRegistry &attributeRegistry, const BPMNOS::Values &status, const DataType &data, const BPMNOS::Values &globals) const
XML::bpmnos::tMessage * element
MessageDefinition(XML::bpmnos::tMessage *message, const AttributeRegistry &attributeRegistry)
BPMNOS::number name
Message name.
std::vector< std::reference_wrapper< tParameter > > parameter
Definition tMessage.h:51
number to_number(const std::string &valueString, const ValueType &type)
Converts a string to a number.
Definition Number.cpp:57
@ STRING
Definition Value.h:9