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 "DataStore.h"
63#include <memory>
64#include <vector>
65#include <string>
66#include <iosfwd>
67
68/**
69 * @brief The `BPMN` namespace contains linked classes representing a BPMN model.
70 *
71 * For each supported BPMN element a wrapper is used that contains an `element`
72 * attribute which is a pointer to the raw representation of the respective element
73 * in the BPMN file according to the XML-schema.
74 * @see XML::bpmn
75 */
76namespace BPMN {
77
78class Node;
79class SequenceFlow;
80class MessageFlow;
81
82
83/**
84 * @brief Represents a BPMN model with all its processes, message flows, and data stores.
85 *
86 * The Model class reads a BPMN model from a file and provides access to all processes
87 * with their content as well as to all message flows and data stores in a BPMN model.
88 * @see @ref Process, @ref MessageFlow, @ref DataStore, @ref DataObject
89 * @note The BPMN model is expected to conform with the BPMN specification, e.g.,
90 * it is expected that all boundary events and start events of event subprocesses have
91 * an event definition.
92 * @par
93 * @note All nodes in a process model are derived from an abstract class @ref Node. The
94 * class model uses multiple inheritance to provide type specific attributes. References
95 * are usually provided by pointers to a base class. Casting is required to gain access
96 * to type specific attributes.
97 * @par
98 * @note The BPMN extension mechanism can be used by providing a custom model class derived
99 * from @ref Model and a custom extension derived from the abstract base class
100 * @ref ExtensionElements. The following example shows how an object of the custom extension
101 * `MyExtensionElements` class can be bound to processes by overriding the method
102 * @ref Model::createProcess in the custom model `MyModel` class:
103 * ```
104 * std::unique_ptr<BPMN::Process> MyModel::createProcess(XML::bpmn::tProcess* process) {
105 * return bind<BPMN::Process>(
106 * BPMN::Model::createProcess(process),
107 * std::make_unique<MyExtensionElements>(process)
108 * );
109 * }
110 * ```
111 *
112 * @warning Multiple event definitions are not yet supported. A `std::runtime_error`
113 * will be thrown when parsing an event with multiple event definitions.
114 *
115 * References between different classes are automatically determined:
116 * - For each sequence flow and each message flow, pointers to the source and target
117 * are provided.
118 * @see @ref SequenceFlow, @ref MessageFlow, @ref FlowNode, @ref Process
119 *
120 * - For each node, pointers to receiving and sending message flows are provided.
121 * @see Node
122 * - For each BPMN element that may have child nodes within its scope, the child nodes
123 * and sequence flows between them are owned by the node. Pointers to each flow node,
124 * event subprocess, start events, compensation activities, and compensation event
125 * subprocess are given.
126 * @see @ref Scope
127 * - For each node within a scope, a pointer to the parent scope is provided.
128 * @see @ref ChildNode
129 * - For each node that may receive a flow token, pointers to all incoming and outgoing
130 * sequence flows are given.
131 * @see @ref FlowNode, @ref SequenceFlow
132 * - For each subprocess, a pointer to the start event is provided.
133 * @attention It is expected that each subprocess has a unique @ref UntypedStartEvent.
134 * @see @ref SubProcess
135 * - For each event subprocess, a pointer to the start event is provided.
136 * @attention It is expected that each event subprocess has a unique @ref TypedStartEvent.
137 * @see @ref EventSubProcess
138 * - For each activity, pointers to each boundary event (excluding the compensation
139 * boundary event) are provided.
140 * @see @ref Activity, @ref BoundaryEvent
141 * - For each activity that can be compensated, a pointer to the compensation activity
142 * or compensation event subprocess is provided.
143 * @attention Activities must not have both compensation activity and compensation event
144 * subprocess.
145 * @see @ref Activity, @ref CompensateBoundaryEvent, @ref CompensateStartEvent
146 * - For each event attached to the boundary of an activity, a pointer to the activity
147 * is provided.
148 * @see @ref Activity, @ref BoundaryEvent
149 * - For each link event, a pointer to the respective target or source(s) is provided.
150 * @note Target and sources are matched based on the
151 * @ref XML::bpmn::tLinkEventDefinition::name attribute in the link event
152 * definition. If no such name is given, the @ref FlowNode::name attribute of the link
153 * event is used as fallback.
154 * @attention For each link source exactly one link target must be found, otherwise a
155 * `std::runtime_error` will be thrown.
156 * @see @ref LinkSourceEvent, @ref LinkTargetEvent, @ref XML::bpmn::tLinkEventDefinition,
157 * @ref FlowNode
158 * - For each throwing compensation event, a pointer to the activity to be compensated is
159 * provided.
160 * @note The respective activity is determined based on the
161 * @ref XML::bpmn::tCompensateEventDefinition::activityRef attribute of the
162 * compensation event definition and the @ref Node::id attribute of the activity. If
163 * no such attribute reference is given, respective activity is determined based on the
164 * @ref FlowNode::name attribute of the compensate throw event and the @ref FlowNode::name
165 * of the activity.
166 * @attention Compensation throw events in compensation event subprocesses can only trigger
167 * compensation of activities within parent scope. All other compensation throw events can
168 * only trigger compensation of activities within the same scope.
169 * @see @ref CompensateThrowEvent, @ref XML::bpmn::tCompensateEventDefinition, @ref Activity,
170 * @ref FlowNode
171 **/
172class Model {
173protected:
174 Model() {};
175public:
176 Model(const std::string& filename);
177 Model(std::unique_ptr<XML::XMLObject> root);
178 virtual ~Model() = default;
179 std::unique_ptr<XML::XMLObject> root;
180 std::vector< std::unique_ptr<DataStore> > dataStores;
181 std::vector< std::unique_ptr<Process> > processes;
182 std::vector< std::unique_ptr<MessageFlow> > messageFlows;
183protected:
184 /// @brief Parses @p filename into the model root and returns it.
185 /// Virtual hook: derived classes may override it to perform post-parse setup before the children
186 /// are built. Overrides should call this base version to obtain the parsed root.
187 virtual std::unique_ptr<XML::XMLObject> createRoot(const std::string& filename);
188 /// @brief Builds processes, nodes, sequence flows, message flows, links, and data stores from @ref root.
189 /// Must be called once @ref root is installed; invoked from the constructor body.
190 virtual void build();
191
192 virtual std::unique_ptr<DataStore> createDataStore(XML::bpmn::tDataStore* dataStore);
193 virtual std::unique_ptr<Process> createProcess(XML::bpmn::tProcess* process);
194 virtual std::unique_ptr<EventSubProcess> createEventSubProcess(XML::bpmn::tSubProcess* subProcess, Scope* parent);
195 virtual std::unique_ptr<FlowNode> createFlowNode(XML::bpmn::tFlowNode* flowNode, Scope* parent);
196
197 virtual std::unique_ptr<FlowNode> createActivity(XML::bpmn::tActivity* activity, Scope* parent);
198
199 virtual std::unique_ptr<FlowNode> createSubProcess(XML::bpmn::tSubProcess* subProcess, Scope* parent);
200 virtual std::unique_ptr<FlowNode> createCallActivity(XML::bpmn::tCallActivity* callActivity, Scope* parent);
201 virtual std::unique_ptr<FlowNode> createAdHocSubProcess(XML::bpmn::tAdHocSubProcess* adHocSubProcess, Scope* parent);
202 virtual std::unique_ptr<FlowNode> createTransaction(XML::bpmn::tTransaction* transaction, Scope* parent);
203 virtual std::unique_ptr<FlowNode> createTask(XML::bpmn::tTask* task, Scope* parent);
204
205 virtual std::unique_ptr<FlowNode> createAbstractTask(XML::bpmn::tTask* task, Scope* parent);
206 virtual std::unique_ptr<FlowNode> createSendTask(XML::bpmn::tSendTask* sendTask, Scope* parent);
207 virtual std::unique_ptr<FlowNode> createReceiveTask(XML::bpmn::tReceiveTask* receiveTask, Scope* parent);
208 virtual std::unique_ptr<FlowNode> createUserTask(XML::bpmn::tUserTask* userTask, Scope* parent);
209 virtual std::unique_ptr<FlowNode> createManualTask(XML::bpmn::tManualTask* manualTask, Scope* parent);
210 virtual std::unique_ptr<FlowNode> createScriptTask(XML::bpmn::tScriptTask* scriptTask, Scope* parent);
211 virtual std::unique_ptr<FlowNode> createBusinessRuleTask(XML::bpmn::tBusinessRuleTask* businessRuleTask, Scope* parent);
212
213 virtual std::unique_ptr<FlowNode> createEvent(XML::bpmn::tEvent* event, Scope* parent);
214
215 virtual std::unique_ptr<FlowNode> createBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
216 virtual std::unique_ptr<FlowNode> createCancelBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
217 virtual std::unique_ptr<FlowNode> createCompensateBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
218 virtual std::unique_ptr<FlowNode> createConditionalBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
219 virtual std::unique_ptr<FlowNode> createErrorBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
220 virtual std::unique_ptr<FlowNode> createEscalationBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
221 virtual std::unique_ptr<FlowNode> createMessageBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
222 virtual std::unique_ptr<FlowNode> createSignalBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
223 virtual std::unique_ptr<FlowNode> createTimerBoundaryEvent(XML::bpmn::tBoundaryEvent* boundaryEvent, Scope* parent);
224
225 virtual std::unique_ptr<FlowNode> createCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
226
227 virtual std::unique_ptr<FlowNode> createConditionalCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
228 virtual std::unique_ptr<FlowNode> createMessageCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
229 virtual std::unique_ptr<FlowNode> createSignalCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
230 virtual std::unique_ptr<FlowNode> createTimerCatchEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
231 virtual std::unique_ptr<FlowNode> createLinkTargetEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
232
233 virtual std::unique_ptr<FlowNode> createTypedStartEvent(XML::bpmn::tStartEvent* startEvent, XML::bpmn::tEventDefinition& eventDefinition, Scope* parent);
234
235 virtual std::unique_ptr<FlowNode> createCompensateStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
236 virtual std::unique_ptr<FlowNode> createErrorStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
237 virtual std::unique_ptr<FlowNode> createEscalationStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
238 virtual std::unique_ptr<FlowNode> createConditionalStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
239 virtual std::unique_ptr<FlowNode> createMessageStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
240 virtual std::unique_ptr<FlowNode> createSignalStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
241 virtual std::unique_ptr<FlowNode> createTimerStartEvent(XML::bpmn::tStartEvent* startEvent, Scope* parent);
242
243 virtual std::unique_ptr<FlowNode> createUntypedStartEvent(XML::bpmn::tCatchEvent* catchEvent, Scope* parent);
244
245 virtual std::unique_ptr<FlowNode> createThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
246 virtual std::unique_ptr<FlowNode> createCancelEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
247 virtual std::unique_ptr<FlowNode> createCompensateThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
248 virtual std::unique_ptr<FlowNode> createErrorEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
249 virtual std::unique_ptr<FlowNode> createEscalationThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
250 virtual std::unique_ptr<FlowNode> createMessageThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
251 virtual std::unique_ptr<FlowNode> createSignalThrowEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
252 virtual std::unique_ptr<FlowNode> createTerminateEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
253 virtual std::unique_ptr<FlowNode> createLinkSourceEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
254 virtual std::unique_ptr<FlowNode> createUntypedEndEvent(XML::bpmn::tThrowEvent* throwEvent, Scope* parent);
255 virtual std::unique_ptr<FlowNode> createGateway(XML::bpmn::tGateway* gateway, Scope* parent);
256
257 virtual std::unique_ptr<FlowNode> createParallelGateway(XML::bpmn::tParallelGateway* parallelGateway, Scope* parent);
258 virtual std::unique_ptr<FlowNode> createExclusiveGateway(XML::bpmn::tExclusiveGateway* exclusiveGateway, Scope* parent);
259 virtual std::unique_ptr<FlowNode> createInclusiveGateway(XML::bpmn::tInclusiveGateway* inclusiveGateway, Scope* parent);
260 virtual std::unique_ptr<FlowNode> createEventBasedGateway(XML::bpmn::tEventBasedGateway* eventBasedGateway, Scope* parent);
261 virtual std::unique_ptr<FlowNode> createComplexGateway(XML::bpmn::tComplexGateway* complexGateway, Scope* parent);
262
263 virtual std::unique_ptr<SequenceFlow> createSequenceFlow(XML::bpmn::tSequenceFlow* sequenceFlow, Scope* scope);
264 virtual std::unique_ptr<DataObject> createDataObject(XML::bpmn::tDataObject* dataObject, BPMN::Scope* scope);
265 virtual std::unique_ptr<MessageFlow> createMessageFlow(XML::bpmn::tMessageFlow* messageFlow);
266
267 virtual void createChildNodes(Scope* scope);
268 virtual void createSequenceFlows(Scope* scope);
269 virtual void createNestedReferences(Scope* scope);
270 virtual void createFlowReferences(FlowNode* flowNode);
271 virtual void createCompensations(Scope* scope);
272 virtual void createCompensationReferences(Scope* scope);
273 virtual void createLinks(Scope* scope);
274 virtual void createDataStores();
275 virtual void createProcesses();
276 virtual void createMessageFlows();
277
278 /// Binds the extension elements to the given baseElement
279 template< typename T>
280 static std::unique_ptr<T> bind(std::unique_ptr<T>&& baseElement, std::unique_ptr<ExtensionElements>&& extensionElements) {
281 baseElement->extensionElements = std::move(extensionElements);
282 baseElement->extensionElements->baseElement = baseElement.get();
283 return std::move(baseElement);
284 }
285
286 /// Binds the extension elements to the given baseElement
287 template< typename T>
288 static std::unique_ptr<T> bind(std::unique_ptr<T>& baseElement, std::unique_ptr<ExtensionElements>& extensionElements) {
289 baseElement->extensionElements = std::move(extensionElements);
290 baseElement->extensionElements->baseElement = baseElement.get();
291 return std::move(baseElement);
292 }
293
294 /// Binds the extension elements to the given baseElement
295 template< typename T>
296 static std::unique_ptr<T> bind(std::unique_ptr<T>& baseElement, std::unique_ptr<ExtensionElements>&& extensionElements) {
297 baseElement->extensionElements = std::move(extensionElements);
298 baseElement->extensionElements->baseElement = baseElement.get();
299 return std::move(baseElement);
300 }
301
302 /// Binds the extension elements to the given baseElement
303 template< typename T>
304 static std::unique_ptr<T> bind(std::unique_ptr<T>&& baseElement, std::unique_ptr<ExtensionElements>& extensionElements) {
305 baseElement->extensionElements = std::move(extensionElements);
306 baseElement->extensionElements->baseElement = baseElement.get();
307 return std::move(baseElement);
308 }
309
310
311
312};
313
314} // namespace BPMN
315
316#endif // BPMN_Model_H
Base class for BPMN elements that may contain incoming and outgoing sequence flows.
Definition FlowNode.h:20
The MessageFlow class encapsulates the information and relationships associated with a message flow i...
Definition MessageFlow.h:21
virtual std::unique_ptr< FlowNode > createEscalationStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:367
virtual std::unique_ptr< FlowNode > createInclusiveGateway(XML::bpmn::tInclusiveGateway *inclusiveGateway, Scope *parent)
Definition Model.cpp:497
virtual void createSequenceFlows(Scope *scope)
Definition Model.cpp:558
virtual std::unique_ptr< FlowNode > createUntypedStartEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:387
virtual std::unique_ptr< FlowNode > createAdHocSubProcess(XML::bpmn::tAdHocSubProcess *adHocSubProcess, Scope *parent)
Definition Model.cpp:125
virtual std::unique_ptr< FlowNode > createTimerStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:383
std::vector< std::unique_ptr< Process > > processes
Definition Model.h:181
virtual std::unique_ptr< EventSubProcess > createEventSubProcess(XML::bpmn::tSubProcess *subProcess, Scope *parent)
Definition Model.cpp:78
virtual std::unique_ptr< FlowNode > createParallelGateway(XML::bpmn::tParallelGateway *parallelGateway, Scope *parent)
Definition Model.cpp:489
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:304
virtual std::unique_ptr< FlowNode > createLinkSourceEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:458
virtual std::unique_ptr< FlowNode > createTerminateEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:454
virtual void createLinks(Scope *scope)
Definition Model.cpp:804
virtual std::unique_ptr< MessageFlow > createMessageFlow(XML::bpmn::tMessageFlow *messageFlow)
Definition Model.cpp:517
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:288
virtual std::unique_ptr< FlowNode > createTimerCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:323
virtual std::unique_ptr< FlowNode > createEscalationBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:260
virtual void createFlowReferences(FlowNode *flowNode)
Definition Model.cpp:595
virtual std::unique_ptr< FlowNode > createUntypedEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:462
virtual std::unique_ptr< FlowNode > createFlowNode(XML::bpmn::tFlowNode *flowNode, Scope *parent)
Definition Model.cpp:82
virtual void createCompensations(Scope *scope)
Definition Model.cpp:688
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:296
virtual std::unique_ptr< FlowNode > createSignalThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:450
virtual std::unique_ptr< FlowNode > createEventBasedGateway(XML::bpmn::tEventBasedGateway *eventBasedGateway, Scope *parent)
Definition Model.cpp:501
virtual std::unique_ptr< FlowNode > createCompensateStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:359
virtual std::unique_ptr< FlowNode > createTransaction(XML::bpmn::tTransaction *transaction, Scope *parent)
Definition Model.cpp:129
virtual void createNestedReferences(Scope *scope)
Definition Model.cpp:565
virtual std::unique_ptr< FlowNode > createManualTask(XML::bpmn::tManualTask *manualTask, Scope *parent)
Definition Model.cpp:176
virtual void build()
Builds processes, nodes, sequence flows, message flows, links, and data stores from root....
Definition Model.cpp:38
virtual void createChildNodes(Scope *scope)
Definition Model.cpp:522
virtual std::unique_ptr< DataStore > createDataStore(XML::bpmn::tDataStore *dataStore)
Definition Model.cpp:70
virtual std::unique_ptr< FlowNode > createCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:276
virtual std::unique_ptr< Process > createProcess(XML::bpmn::tProcess *process)
Definition Model.cpp:74
virtual std::unique_ptr< FlowNode > createMessageBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:264
virtual void createProcesses()
Definition Model.cpp:57
std::vector< std::unique_ptr< MessageFlow > > messageFlows
Definition Model.h:182
virtual std::unique_ptr< FlowNode > createGateway(XML::bpmn::tGateway *gateway, Scope *parent)
Definition Model.cpp:467
virtual std::unique_ptr< FlowNode > createCallActivity(XML::bpmn::tCallActivity *callActivity, Scope *parent)
Definition Model.cpp:133
virtual std::unique_ptr< FlowNode > createUserTask(XML::bpmn::tUserTask *userTask, Scope *parent)
Definition Model.cpp:172
virtual std::unique_ptr< FlowNode > createTypedStartEvent(XML::bpmn::tStartEvent *startEvent, XML::bpmn::tEventDefinition &eventDefinition, Scope *parent)
Definition Model.cpp:331
virtual std::unique_ptr< DataObject > createDataObject(XML::bpmn::tDataObject *dataObject, BPMN::Scope *scope)
Definition Model.cpp:513
virtual std::unique_ptr< FlowNode > createErrorEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:438
virtual std::unique_ptr< FlowNode > createConditionalBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:252
virtual std::unique_ptr< FlowNode > createMessageStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:375
virtual std::unique_ptr< FlowNode > createSignalBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:268
virtual std::unique_ptr< FlowNode > createErrorBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:256
virtual std::unique_ptr< FlowNode > createMessageCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:315
virtual std::unique_ptr< FlowNode > createMessageThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:446
virtual std::unique_ptr< FlowNode > createActivity(XML::bpmn::tActivity *activity, Scope *parent)
Definition Model.cpp:98
virtual ~Model()=default
virtual void createDataStores()
Definition Model.cpp:51
virtual std::unique_ptr< FlowNode > createSubProcess(XML::bpmn::tSubProcess *subProcess, Scope *parent)
Definition Model.cpp:115
virtual std::unique_ptr< FlowNode > createExclusiveGateway(XML::bpmn::tExclusiveGateway *exclusiveGateway, Scope *parent)
Definition Model.cpp:493
virtual std::unique_ptr< FlowNode > createThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:391
virtual std::unique_ptr< FlowNode > createErrorStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:363
virtual std::unique_ptr< XML::XMLObject > createRoot(const std::string &filename)
Parses filename into the model root and returns it. Virtual hook: derived classes may override it to ...
Definition Model.cpp:33
virtual std::unique_ptr< FlowNode > createSendTask(XML::bpmn::tSendTask *sendTask, Scope *parent)
Definition Model.cpp:164
virtual std::unique_ptr< FlowNode > createCompensateBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:248
virtual std::unique_ptr< FlowNode > createAbstractTask(XML::bpmn::tTask *task, Scope *parent)
Definition Model.cpp:160
virtual std::unique_ptr< FlowNode > createCompensateThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:434
virtual void createMessageFlows()
Definition Model.cpp:839
virtual std::unique_ptr< FlowNode > createLinkTargetEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:327
virtual std::unique_ptr< FlowNode > createScriptTask(XML::bpmn::tScriptTask *scriptTask, Scope *parent)
Definition Model.cpp:180
virtual std::unique_ptr< FlowNode > createSignalCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:319
virtual std::unique_ptr< FlowNode > createEvent(XML::bpmn::tEvent *event, Scope *parent)
Definition Model.cpp:188
virtual std::unique_ptr< FlowNode > createCancelEndEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:430
virtual std::unique_ptr< SequenceFlow > createSequenceFlow(XML::bpmn::tSequenceFlow *sequenceFlow, Scope *scope)
Definition Model.cpp:509
virtual std::unique_ptr< FlowNode > createReceiveTask(XML::bpmn::tReceiveTask *receiveTask, Scope *parent)
Definition Model.cpp:168
virtual std::unique_ptr< FlowNode > createComplexGateway(XML::bpmn::tComplexGateway *complexGateway, Scope *parent)
Definition Model.cpp:505
virtual void createCompensationReferences(Scope *scope)
Definition Model.cpp:722
virtual std::unique_ptr< FlowNode > createBusinessRuleTask(XML::bpmn::tBusinessRuleTask *businessRuleTask, Scope *parent)
Definition Model.cpp:184
virtual std::unique_ptr< FlowNode > createBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:205
virtual std::unique_ptr< FlowNode > createSignalStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:379
virtual std::unique_ptr< FlowNode > createConditionalCatchEvent(XML::bpmn::tCatchEvent *catchEvent, Scope *parent)
Definition Model.cpp:310
std::unique_ptr< XML::XMLObject > root
Definition Model.h:179
virtual std::unique_ptr< FlowNode > createEscalationThrowEvent(XML::bpmn::tThrowEvent *throwEvent, Scope *parent)
Definition Model.cpp:442
virtual std::unique_ptr< FlowNode > createTimerBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:272
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:280
virtual std::unique_ptr< FlowNode > createCancelBoundaryEvent(XML::bpmn::tBoundaryEvent *boundaryEvent, Scope *parent)
Definition Model.cpp:244
std::vector< std::unique_ptr< DataStore > > dataStores
Definition Model.h:180
virtual std::unique_ptr< FlowNode > createTask(XML::bpmn::tTask *task, Scope *parent)
Definition Model.cpp:137
virtual std::unique_ptr< FlowNode > createConditionalStartEvent(XML::bpmn::tStartEvent *startEvent, Scope *parent)
Definition Model.cpp:371
Base class for all nodes in a BPMN model.
Definition Node.h:24
Base class for BPMN elements that may contain a ChildNode elements.
Definition Scope.h:24
The SequenceFlow class encapsulates the information and relationships associated with a sequence flow...
The BPMN namespace contains linked classes representing a BPMN model.