blob: 66ed8c5422462b81fc2c790a7f23d93f24a875a3 [file] [log] [blame]
Currently this project is under development. This document describes a general workflow and will
point out where the solution is currently incomplete and needs further work.
The following workflow has used to create the profile and generate EMF source code for the static profile:
1. The original OMG model BPMNProfile.xmi has to be copied to file BPMNProfile_modified.uml.
The copied model has to be modified to work correctly as input for EMF to be used as EMF meta model.
Also the derived properties have do be specified via OCL expressions according to the specification
in a way the Eclipse OCL project supports (via EAnnotations). Constraints that cannot be expressed
via OCL, code for derived properties has to be written in Java in the generated Java sources.
The modifications to the model are at the current state incomplete. The following chances have already been done:
The structureRef properties of the following classes have been modified.
The was typed with uml::Class and
EAnnotation(source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"){ derivation->self.base_Class }
was added to the property
* BPMNProfile::CoreStructure::Common::Events::Escalation
* BPMNProfile::CoreStructure::Common::Events::BPMNSignal
* BPMNProfile::CoreStructure::Common::Events::Error
The structureRef property of the following class were modified by adding
the EAnnotaion defined above above:
BPMNProfile::CoreStructure::Common::ItemDefinition
TODO define the following derived properties:
BPMNProfile-Collaboration-BPMNCollaboration-participants
BPMNProfile-Collaboration-BPMNCollaboration-conversationLinks
BPMNProfile-Collaboration-MessageFlow-sourceRef
BPMNProfile-Collaboration-MessageFlow-targetRef
BPMNProfile-Collaboration-MessageFlow-messageRef
BPMNProfile-Collaboration-Participant-processRef
BPMNProfile-Collaboration-Participant-participantMultiplicity_
BPMNProfile-Collaboration-Participant-partnerEntityRef
BPMNProfile-Collaboration-Participant-partnerRoleRef
BPMNProfile-Collaboration-Participant-partnerRoleRef
BPMNProfile-Collaboration-Participant-interfaceRefs
BPMNProfile-Collaboration-ParticipantAssociation-innerParticipantRef
BPMNProfile-Collaboration-ParticipantAssociation-outerParticipantRef
BPMNProfile-Collaboration-Conversation-CallConversation-calledCollaborationRef
BPMNProfile-Collaboration-Conversation-CallConversation-participantAssociations
BPMNProfile-Collaboration-Conversation-ConversationNode-participantRefs
BPMNProfile-Collaboration-Conversation-ConversationLink-collaboration
BPMNProfile-Collaboration-Conversation-ConversationLink-sourceRef
BPMNProfile-Collaboration-Conversation-ConversationLink-targetRef
BPMNProfile-Collaboration-InteractionNode-outgoingConversationLinks
BPMNProfile-Collaboration-InteractionNode-incomingConversationLinks
BPMNProfile-Collaboration-ParticipantMultiplicity-minimum
BPMNProfile-Collaboration-ParticipantMultiplicity-maximum
2. Define a file "BPMNProfile_merge.uml" containing a profile that merges all packages from the modified profile from the OMG standard.
Annotate the profile with the EPackage stereotype from the Ecore UML profile and set
* nsURI to http://www.omg.org/spec/BPMNProfile/20121112/BPMNProfile.xmi
* base package to "org.eclipse.upr"
* package name to "bpmn"
3. Copy that file and save under name "bpmn.profile.uml". In this file we actually replace the package merge declaration
by actual copies of the merged packages.
4. Unfortunately the UML2 Package Merge mechanism (Eclipse UML model tree editor, via main menu entry
UML Editor -> Package -> Merge ...) does not work with nested packages being merged. So instead we
use an own QVTO transformation for this. It can be found in "org.eclipse.upr.bpmn.mover\transforms\SimplePackageMerge.qvto".
So execute this transformation on file "bpmn.profile.uml".
5. Create a GenModel from file "bpmn.profile.uml", loading this model as a meta model.
Set copyright text on root element and add EAnnotation to root element, so that the OCL expressions get compiled to Java source code.
Currently there are no formalized OCL expressions and code generation does not work at the moment (it is throwing a NullPointerException)