bpmn++
A BPMN parser library, written in C++
Loading...
Searching...
No Matches
Model.h
Go to the documentation of this file.
1#ifndef BPMN_Model_H
2#define BPMN_Model_H
3
4#include "Node.h"
5#include "FlowNode.h"
6#include "Process.h"
7#include "EventSubProcess.h"
8#include "SubProcess.h"
9#include "CallActivity.h"
10#include "AdHocSubProcess.h"
11#include "Transaction.h"
12#include "Task.h"
13#include "AbstractTask.h"
14#include "SendTask.h"
15#include "ReceiveTask.h"
16#include "UserTask.h"
17#include "ManualTask.h"
18#include "ScriptTask.h"
19#include "BusinessRuleTask.h"
20#include "ParallelGateway.h"
21#include "ExclusiveGateway.h"
22#include "InclusiveGateway.h"
23#include "EventBasedGateway.h"
24#include "ComplexGateway.h"
25#include "ThrowEvent.h"
26#include "CancelEndEvent.h"
28#include "ErrorEndEvent.h"
30#include "MessageThrowEvent.h"
31#include "SignalThrowEvent.h"
32#include "TerminateEvent.h"
33#include "LinkSourceEvent.h"
34#include "UntypedEndEvent.h"
35#include "CatchEvent.h"
37#include "MessageCatchEvent.h"
38#include "SignalCatchEvent.h"
39#include "TimerCatchEvent.h"
40#include "LinkTargetEvent.h"
41#include "UntypedStartEvent.h"
42#include "TypedStartEvent.h"
44#include "ErrorStartEvent.h"
47#include "MessageStartEvent.h"
48#include "SignalStartEvent.h"
49#include "TimerStartEvent.h"
50#include "BoundaryEvent.h"
51#include "CancelBoundaryEvent.h"
54#include "ErrorBoundaryEvent.h"
57#include "SignalBoundaryEvent.h"
58#include "TimerBoundaryEvent.h"
59#include "SequenceFlow.h"
60#include "MessageFlow.h"
61#include "DataObject.h"
62#include <memory>
63#include <vector>
64#include <string>
65
66/**
67 * @brief The `BPMN` namespace contains linked classes representing a BPMN model.
68 *
69 * For each supported BPMN element a wrapper is used that contains an `element`
70 * attribute which is a pointer to the raw representation of the respective element
71 * in the BPMN file according to the XML-schema.
72 * @see XML::bpmn
73 */
74namespace BPMN {
75
76class Node;
77class SequenceFlow;
78class MessageFlow;
79
80
81/**
82 * @brief Represents a BPMN model with all its processes and message flows.
83 *
84 * The Model class reads a BPMN model from a file and provides access to all processes
85 * with their content as well as to all message flows in a BPMN model.
86 * @see @ref Process, @ref MessageFlow
87 * @note The BPMN model is expected to conform with the BPMN specification, e.g.,
88 * it is expected that all boundary events and start events of event subprocesses have
89 * an event definition.
90 * @par
91 * @note All nodes in a process model are derived from an abstract class @ref Node. The
92 * class model uses multiple inheritance to provide type specific attributes. References
93 * are usually provided by pointers to a base class. Casting is required to gain access
94 * to type specific attributes.
95 * @par
96 * @note The BPMN extension mechanism can be used by providing a custom model class derived
97 * from @ref Model and a custom extension derived from the abstract base class
98 * @ref ExtensionElements. The following example shows how an object of the custom extension
99 * `MyExtensionElements` class can be bound to processes by overriding the method
100 * @ref Model::createProcess in the custom model `MyModel` class:
101 * ```
102 * std::unique_ptr<BPMN::Process> MyModel::createProcess(XML::bpmn::tProcess* process) {
103 * return bind<BPMN::Process>(
104 * BPMN::Model::createProcess(process),
105 * std::make_unique<MyExtensionElements>(process)
106 * );
107 * }
108 * ```
109 *
110 * @warning Multiple event definitions are not yet supported. A `std::runtime_error`
111 * will be thrown when parsing an event with multiple event definitions.
112 *
113 * References between different classes are automatically determined:
114 * - For each sequence flow and each message flow, pointers to the source and target
115 * are provided.
116 * @see @ref SequenceFlow, @ref MessageFlow, @ref FlowNode, @ref Process
117 *
118 * - For each node, pointers to receiving and sending message flows are provided.
119 * @see Node
120 * - For each BPMN element that may have child nodes within its scope, the child nodes
121 * and sequence flows between them are owned by the node. Pointers to each flow node,
122 * event subprocess, start events, compensation activities, and compensation event
123 * subprocess are given.
124 * @see @ref Scope
125 * - For each node within a scope, a pointer to the parent scope is provided.
126 * @see @ref ChildNode
127 * - For each node that may receive a flow token, pointers to all incoming and outgoing
128 * sequence flows are given.
129 * @see @ref FlowNode, @ref SequenceFlow
130 * - For each subprocess, a pointer to the start event is provided.
131 * @attention It is expected that each subprocess has a unique @ref UntypedStartEvent.
132 * @see @ref SubProcess
133 * - For each event subprocess, a pointer to the start event is provided.
134 * @attention It is expected that each event subprocess has a unique @ref TypedStartEvent.
135 * @see @ref EventSubProcess
136 * - For each activity, pointers to each boundary event (excluding the compensation
137 * boundary event) are provided.
138 * @see @ref Activity, @ref BoundaryEvent
139 * - For each activity that can be compensated, a pointer to the compensation activity
140 * or compensation event subprocess is provided.
141 * @attention Activities must not have both compensation activity and compensation event
142 * subprocess.
143 * @see @ref Activity, @ref CompensateBoundaryEvent, @ref CompensateStartEvent
144 * - For each event attached to the boundary of an activity, a pointer to the activity
145 * is provided.
146 * @see @ref Activity, @ref BoundaryEvent
147 * - For each link event, a pointer to the respective target or source(s) is provided.
148 * @note Target and sources are matched based on the
149 * @ref XML::bpmn::tLinkEventDefinition::name attribute in the link event
150 * definition. If no such name is given, the @ref FlowNode::name attribute of the link
151 * event is used as fallback.
152 * @attention For each link source exactly one link target must be found, otherwise a
153 * `std::runtime_error` will be thrown.
154 * @see @ref LinkSourceEvent, @ref LinkTargetEvent, @ref XML::bpmn::tLinkEventDefinition,
155 * @ref FlowNode
156 * - For each throwing compensation event, a pointer to the activity to be compensated is
157 * provided.
158 * @note The respective activity is determined based on the
159 * @ref XML::bpmn::tCompensateEventDefinition::activityRef attribute of the
160 * compensation event definition and the @ref Node::id attribute of the activity. If
161 * no such attribute reference is given, respective activity is determined based on the
162 * @ref FlowNode::name attribute of the compensate throw event and the @ref FlowNode::name
163 * of the activity.
164 * @attention Compensation throw events in compensation event subprocesses can only trigger
165 * compensation of activities within parent scope. All other compensation throw events can
166 * only trigger compensation of activities within the same scope.
167 * @see @ref CompensateThrowEvent, @ref XML::bpmn::tCompensateEventDefinition, @ref Activity,
168 * @ref FlowNode
169 **/
170class Model {
171protected:
172 Model() {};
173public:
174 Model(const std::string& filename);
175 virtual ~Model() = default;
176 std::unique_ptr<XML::XMLObject> root;
177 std::vector< std::unique_ptr<Process> > processes;
178 std::vector< std::unique_ptr<MessageFlow> > messageFlows;
179protected:
180 virtual void readBPMNFile(const std::string& filename);
181 virtual std::unique_ptr<XML::XMLObject> createRoot(const std::string& filename);
182
183 virtual std::unique_ptr<Process> createProcess(XML::bpmn::tProcess* process);
184 virtual std::unique_ptr<EventSubProcess> createEventSubProcess(XML::bpmn::tSubProcess* subProcess, Scope* parent);
185 virtual std::unique_ptr<FlowNode> createFlowNode(XML::bpmn::tFlowNode* flowNode, Scope* parent);
186
187 virtual std::unique_ptr<FlowNode> createActivity(XML::bpmn::tActivity* activity, Scope* parent);
188
189 virtual std::unique_ptr<FlowNode> createSubProcess(XML::bpmn::tSubProcess* subProcess, Scope* parent);
190 virtual std::unique_ptr<FlowNode> createCallActivity(XML::bpmn::tCallActivity* callActivity, Scope* parent);
191 virtual std::unique_ptr<FlowNode> createAdHocSubProcess(XML::bpmn::tAdHocSubProcess* adHocSubProcess, Scope* parent);
192 virtual std::unique_ptr<FlowNode> createTransaction(XML::bpmn::tTransaction* transaction, Scope* parent);
193 virtual std::unique_ptr<FlowNode> createTask(XML::bpmn::tTask* task, Scope* parent);
194
195 virtual std::unique_ptr<FlowNode> createAbstractTask(XML::bpmn::tTask* task, Scope* parent);
196 virtual std::unique_ptr<FlowNode> createSendTask(XML::bpmn::tSendTask* sendTask, Scope* parent);
197 virtual std::unique_ptr<FlowNode> createReceiveTask(XML::bpmn::tReceiveTask* receiveTask, Scope* parent);
198 virtual std::unique_ptr<FlowNode> createUserTask(XML::bpmn::tUserTask* userTask, Scope* parent);
199 virtual std::unique_ptr<FlowNode> createManualTask(XML::bpmn::tManualTask* manualTask, Scope* parent);
200 virtual std::unique_ptr<FlowNode> createScriptTask(XML::bpmn::tScriptTask* scriptTask, Scope* parent);
201 virtual std::unique_ptr<FlowNode> createBusinessRuleTask(XML::bpmn::tBusinessRuleTask* businessRuleTask, Scope* parent);
202
203 virtual std::unique_ptr<FlowNode> createEvent(XML::bpmn::tEvent* event, Scope* parent);
204
205 virtual std::unique_ptr<FlowNode> createBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
206 virtual std::unique_ptr<FlowNode> createCancelBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
207 virtual std::unique_ptr<FlowNode> createCompensateBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
208 virtual std::unique_ptr<FlowNode> createConditionalBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
209 virtual std::unique_ptr<FlowNode> createErrorBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
210 virtual std::unique_ptr<FlowNode> createEscalationBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
211 virtual std::unique_ptr<FlowNode> createMessageBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
212 virtual std::unique_ptr<FlowNode> createSignalBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
213 virtual std::unique_ptr<FlowNode> createTimerBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
214
215 virtual std::unique_ptr<FlowNode> createCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
216
217 virtual std::unique_ptr<FlowNode> createConditionalCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
218 virtual std::unique_ptr<FlowNode> createMessageCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
219 virtual std::unique_ptr<FlowNode> createSignalCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
220 virtual std::unique_ptr<FlowNode> createTimerCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
221 virtual std::unique_ptr<FlowNode> createLinkTargetEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
222
223 virtual std::unique_ptr<FlowNode> createTypedStartEvent(XML::bpmn::tStartEvent* startEvent, XML::bpmn::tEventDefinition& eventDefinition, Scope* parent);
224
225 virtual std::unique_ptr<FlowNode> createCompensateStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
226 virtual std::unique_ptr<FlowNode> createErrorStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
227 virtual std::unique_ptr<FlowNode> createEscalationStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
228 virtual std::unique_ptr<FlowNode> createConditionalStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
229 virtual std::unique_ptr<FlowNode> createMessageStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
230 virtual std::unique_ptr<FlowNode> createSignalStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
231 virtual std::unique_ptr<FlowNode> createTimerStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
232
233 virtual std::unique_ptr<FlowNode> createUntypedStartEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
234
235 virtual std::unique_ptr<FlowNode> createThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
236 virtual std::unique_ptr<FlowNode> createCancelEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
237 virtual std::unique_ptr<FlowNode> createCompensateThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
238 virtual std::unique_ptr<FlowNode> createErrorEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
239 virtual std::unique_ptr<FlowNode> createEscalationThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
240 virtual std::unique_ptr<FlowNode> createMessageThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
241 virtual std::unique_ptr<FlowNode> createSignalThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
242 virtual std::unique_ptr<FlowNode> createTerminateEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
243 virtual std::unique_ptr<FlowNode> createLinkSourceEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
244 virtual std::unique_ptr<FlowNode> createUntypedEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
245 virtual std::unique_ptr<FlowNode> createGateway(XML::bpmn::tGateway* gateway, Scope* parent);
246
247 virtual std::unique_ptr<FlowNode> createParallelGateway(XML::bpmn::tParallelGateway* parallelGateway, Scope* parent);
248 virtual std::unique_ptr<FlowNode> createExclusiveGateway(XML::bpmn::tExclusiveGateway* exclusiveGateway, Scope* parent);
249 virtual std::unique_ptr<FlowNode> createInclusiveGateway(XML::bpmn::tInclusiveGateway* inclusiveGateway, Scope* parent);
250 virtual std::unique_ptr<FlowNode> createEventBasedGateway(XML::bpmn::tEventBasedGateway* eventBasedGateway, Scope* parent);
251 virtual std::unique_ptr<FlowNode> createComplexGateway(XML::bpmn::tComplexGateway* complexGateway, Scope* parent);
252
253 virtual std::unique_ptr<SequenceFlow> createSequenceFlow(XML::bpmn::tSequenceFlow* sequenceFlow, Scope* scope);
254 virtual std::unique_ptr<DataObject> createDataObject(XML::bpmn::tDataObject* dataObject, BPMN::Scope* scope);
255 virtual std::unique_ptr<MessageFlow> createMessageFlow(XML::bpmn::tMessageFlow* messageFlow);
256
257 virtual void createChildNodes(Scope* scope);
258 virtual void createSequenceFlows(Scope* scope);
259 virtual void createNestedReferences(Scope* scope);
260 virtual void createFlowReferences(FlowNode* flowNode);
261 virtual void createCompensations(Scope* scope);
262 virtual void createCompensationReferences(Scope* scope);
263 virtual void createLinks(Scope* scope);
264 virtual void createMessageFlows();
265
266 /// Binds the extension elements to the given baseElement
267 template< typename T>
268 static std::unique_ptr<T> bind(std::unique_ptr<T>&& baseElement, std::unique_ptr<ExtensionElements>&& extensionElements) {
269 baseElement->extensionElements = std::move(extensionElements);
270 baseElement->extensionElements->baseElement = baseElement.get();
271 return std::move(baseElement);
272 }
273
274 /// Binds the extension elements to the given baseElement
275 template< typename T>
276 static std::unique_ptr<T> bind(std::unique_ptr<T>& baseElement, std::unique_ptr<ExtensionElements>& extensionElements) {
277 baseElement->extensionElements = std::move(extensionElements);
278 baseElement->extensionElements->baseElement = baseElement.get();
279 return std::move(baseElement);
280 }
281
282 /// Binds the extension elements to the given baseElement
283 template< typename T>
284 static std::unique_ptr<T> bind(std::unique_ptr<T>& baseElement, std::unique_ptr<ExtensionElements>&& extensionElements) {
285 baseElement->extensionElements = std::move(extensionElements);
286 baseElement->extensionElements->baseElement = baseElement.get();
287 return std::move(baseElement);
288 }
289
290 /// Binds the extension elements to the given baseElement
291 template< typename T>
292 static std::unique_ptr<T> bind(std::unique_ptr<T>&& baseElement, std::unique_ptr<ExtensionElements>& extensionElements) {
293 baseElement->extensionElements = std::move(extensionElements);
294 baseElement->extensionElements->baseElement = baseElement.get();
295 return std::move(baseElement);
296 }
297
298
299
300};
301
302} // namespace BPMN
303
304#endif // BPMN_Model_H
Base class for BPMN elements that may contain incoming and outgoing sequence flows.
Definition FlowNode.h:20
Represents a BPMN model with all its processes and message flows.
Definition Model.h:170
virtual std::unique_ptr< FlowNode > createEscalationStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:343
virtual std::unique_ptr< FlowNode > createInclusiveGateway(XML::bpmn::tInclusiveGateway *inclusiveGateway, Scope *parent)
Definition Model.cpp:473
virtual void createSequenceFlows(Scope *scope)
Definition Model.cpp:534
virtual std::unique_ptr< FlowNode > createUntypedStartEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:363
virtual std::unique_ptr< FlowNode > createAdHocSubProcess(XML::bpmn::tAdHocSubProcess *adHocSubProcess, Scope *parent)
Definition Model.cpp:101
virtual std::unique_ptr< FlowNode > createTimerStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:359
std::vector< std::unique_ptr< Process > > processes
Definition Model.h:177
virtual std::unique_ptr< EventSubProcess > createEventSubProcess(XML::bpmn::tSubProcess *subProcess, Scope *parent)
Definition Model.cpp:54
virtual std::unique_ptr< FlowNode > createParallelGateway(XML::bpmn::tParallelGateway *parallelGateway, Scope *parent)
Definition Model.cpp:465
static std::unique_ptr< T > bind(std::unique_ptr< T > &&baseElement, std::unique_ptr< ExtensionElements > &extensionElements)
Binds the extension elements to the given baseElement.
Definition Model.h:292
virtual std::unique_ptr< FlowNode > createLinkSourceEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:434
virtual std::unique_ptr< FlowNode > createTerminateEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:430
virtual void createLinks(Scope *scope)
Definition Model.cpp:780
virtual std::unique_ptr< MessageFlow > createMessageFlow(XML::bpmn::tMessageFlow *messageFlow)
Definition Model.cpp:493
static std::unique_ptr< T > bind(std::unique_ptr< T > &baseElement, std::unique_ptr< ExtensionElements > &extensionElements)
Binds the extension elements to the given baseElement.
Definition Model.h:276
virtual std::unique_ptr< FlowNode > createTimerCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:299
virtual std::unique_ptr< FlowNode > createEscalationBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:236
virtual void createFlowReferences(FlowNode *flowNode)
Definition Model.cpp:571
virtual std::unique_ptr< FlowNode > createUntypedEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:438
virtual std::unique_ptr< FlowNode > createFlowNode(XML::bpmn::tFlowNode *flowNode, Scope *parent)
Definition Model.cpp:58
virtual void createCompensations(Scope *scope)
Definition Model.cpp:664
static std::unique_ptr< T > bind(std::unique_ptr< T > &baseElement, std::unique_ptr< ExtensionElements > &&extensionElements)
Binds the extension elements to the given baseElement.
Definition Model.h:284
virtual std::unique_ptr< FlowNode > createSignalThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:426
virtual std::unique_ptr< FlowNode > createEventBasedGateway(XML::bpmn::tEventBasedGateway *eventBasedGateway, Scope *parent)
Definition Model.cpp:477
virtual std::unique_ptr< FlowNode > createCompensateStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:335
virtual std::unique_ptr< FlowNode > createTransaction(XML::bpmn::tTransaction *transaction, Scope *parent)
Definition Model.cpp:105
virtual void createNestedReferences(Scope *scope)
Definition Model.cpp:541
virtual std::unique_ptr< FlowNode > createManualTask(XML::bpmn::tManualTask *manualTask, Scope *parent)
Definition Model.cpp:152
virtual void createChildNodes(Scope *scope)
Definition Model.cpp:498
virtual std::unique_ptr< FlowNode > createCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:252
virtual std::unique_ptr< Process > createProcess(XML::bpmn::tProcess *process)
Definition Model.cpp:50
virtual std::unique_ptr< FlowNode > createMessageBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:240
std::vector< std::unique_ptr< MessageFlow > > messageFlows
Definition Model.h:178
virtual std::unique_ptr< FlowNode > createGateway(XML::bpmn::tGateway *gateway, Scope *parent)
Definition Model.cpp:443
virtual std::unique_ptr< FlowNode > createCallActivity(XML::bpmn::tCallActivity *callActivity, Scope *parent)
Definition Model.cpp:109
virtual std::unique_ptr< FlowNode > createUserTask(XML::bpmn::tUserTask *userTask, Scope *parent)
Definition Model.cpp:148
virtual std::unique_ptr< FlowNode > createTypedStartEvent(XML::bpmn::tStartEvent *startEvent, XML::bpmn::tEventDefinition &eventDefinition, Scope *parent)
Definition Model.cpp:307
virtual std::unique_ptr< DataObject > createDataObject(XML::bpmn::tDataObject *dataObject, BPMN::Scope *scope)
Definition Model.cpp:489
virtual std::unique_ptr< FlowNode > createErrorEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:414
virtual std::unique_ptr< FlowNode > createConditionalBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:228
virtual std::unique_ptr< FlowNode > createMessageStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:351
virtual std::unique_ptr< FlowNode > createSignalBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:244
virtual std::unique_ptr< FlowNode > createErrorBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:232
virtual void readBPMNFile(const std::string &filename)
Definition Model.cpp:25
virtual std::unique_ptr< FlowNode > createMessageCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:291
virtual std::unique_ptr< FlowNode > createMessageThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:422
virtual std::unique_ptr< FlowNode > createActivity(XML::bpmn::tActivity *activity, Scope *parent)
Definition Model.cpp:74
virtual ~Model()=default
virtual std::unique_ptr< FlowNode > createSubProcess(XML::bpmn::tSubProcess *subProcess, Scope *parent)
Definition Model.cpp:91
virtual std::unique_ptr< FlowNode > createExclusiveGateway(XML::bpmn::tExclusiveGateway *exclusiveGateway, Scope *parent)
Definition Model.cpp:469
virtual std::unique_ptr< FlowNode > createThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:367
virtual std::unique_ptr< FlowNode > createErrorStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:339
virtual std::unique_ptr< XML::XMLObject > createRoot(const std::string &filename)
Definition Model.cpp:46
virtual std::unique_ptr< FlowNode > createSendTask(XML::bpmn::tSendTask *sendTask, Scope *parent)
Definition Model.cpp:140
virtual std::unique_ptr< FlowNode > createCompensateBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:224
virtual std::unique_ptr< FlowNode > createAbstractTask(XML::bpmn::tTask *task, Scope *parent)
Definition Model.cpp:136
virtual std::unique_ptr< FlowNode > createCompensateThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:410
virtual void createMessageFlows()
Definition Model.cpp:815
virtual std::unique_ptr< FlowNode > createLinkTargetEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:303
virtual std::unique_ptr< FlowNode > createScriptTask(XML::bpmn::tScriptTask *scriptTask, Scope *parent)
Definition Model.cpp:156
virtual std::unique_ptr< FlowNode > createSignalCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:295
virtual std::unique_ptr< FlowNode > createEvent(XML::bpmn::tEvent *event, Scope *parent)
Definition Model.cpp:164
virtual std::unique_ptr< FlowNode > createCancelEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:406
virtual std::unique_ptr< SequenceFlow > createSequenceFlow(XML::bpmn::tSequenceFlow *sequenceFlow, Scope *scope)
Definition Model.cpp:485
virtual std::unique_ptr< FlowNode > createReceiveTask(XML::bpmn::tReceiveTask *receiveTask, Scope *parent)
Definition Model.cpp:144
virtual std::unique_ptr< FlowNode > createComplexGateway(XML::bpmn::tComplexGateway *complexGateway, Scope *parent)
Definition Model.cpp:481
virtual void createCompensationReferences(Scope *scope)
Definition Model.cpp:698
virtual std::unique_ptr< FlowNode > createBusinessRuleTask(XML::bpmn::tBusinessRuleTask *businessRuleTask, Scope *parent)
Definition Model.cpp:160
virtual std::unique_ptr< FlowNode > createBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:181
virtual std::unique_ptr< FlowNode > createSignalStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:355
virtual std::unique_ptr< FlowNode > createConditionalCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:286
std::unique_ptr< XML::XMLObject > root
Definition Model.h:176
virtual std::unique_ptr< FlowNode > createEscalationThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:418
virtual std::unique_ptr< FlowNode > createTimerBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:248
static std::unique_ptr< T > bind(std::unique_ptr< T > &&baseElement, std::unique_ptr< ExtensionElements > &&extensionElements)
Binds the extension elements to the given baseElement.
Definition Model.h:268
virtual std::unique_ptr< FlowNode > createCancelBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:220
virtual std::unique_ptr< FlowNode > createTask(XML::bpmn::tTask *task, Scope *parent)
Definition Model.cpp:113
virtual std::unique_ptr< FlowNode > createConditionalStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:347
Base class for BPMN elements that may contain a ChildNode elements.
Definition Scope.h:24
The BPMN namespace contains linked classes representing a BPMN model.