diff options
Diffstat (limited to 'extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl')
-rw-r--r-- | extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl b/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl index 3cfe740f28d..5b26fad3114 100644 --- a/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl +++ b/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.modellibs.core/src/org/eclipse/papyrus/qompass/modellibs/core/acceleo/acceptableEvents.mtl @@ -2,16 +2,26 @@ [import org::eclipse::papyrus::qompass::modellibs::core::acceleo::TransitionService /] [import org::eclipse::papyrus::qompass::modellibs::core::acceleo::StateMachineUtil /] [import org::eclipse::papyrus::qompass::designer::core::acceleo::UMLTool /] +[import org::eclipse::papyrus::qompass::designer::core::acceleo::EnumService /] [import org::eclipse::papyrus::qompass::designer::vsl::ParseVSL /] [comment produce a call event trigger label (TODO) /] +[comment +Pass the actual to which the port is bound. In case of a CallEvent, pass the implemented interface +(Not the class to which the state machine is bound) +/] [template public cetrigger(operation: Operation) post(trim())] [boundPackageRef(operation.implementsInterface()).qualifiedName/]::ID_[name/] [comment declare dependency to OperationIDs enumeration /] [boundPackageRef(operation.implementsInterface()).declareDependencyToOperationIDs() /] [/template] +[comment +Use service for global enumerations/] +[template public setrigger(trigger: Trigger) post(trim())] + [literal('SignalEvents', 'SIG_' + trigger.event.oclAsType(SignalEvent).signal.name)/] +[/template] [template public acceptableEvents(state: State)] @@ -42,7 +52,8 @@ [for (transition : Transition | state.outgoing)] [comment big restriction: will only analyse first of possibly multiple triggers/] - [if (transition.trigger->asSequence()->first().event.oclIsKindOf(TimeEvent))] + [let trigger : Trigger = transition.trigger->asSequence()->first()] + [if (trigger.event.oclIsKindOf(TimeEvent))] // transition [transition.name/] - trigger: TimeEvent (there should be at most one outgoing timed transition per state). if (event.operationID == core::ContainerServices::EventPool::ID_TIMEOUT) { newState = STATE_[transition.target.name/]; @@ -50,23 +61,28 @@ [/if] } [/if] - [if (transition.trigger->asSequence()->first().event.oclIsKindOf(CallEvent))] - // transition [name/] - trigger: CallEvent, operation [transition.trigger.event.oclAsType(CallEvent).operation.name/] - if (event.operationID == [cetrigger(transition.trigger->asSequence()->first().event.oclAsType(CallEvent).operation)/]) { + [if (trigger.event.oclIsKindOf(CallEvent))] + // transition [name/] - trigger: CallEvent ([trigger.event.name/]), operation [trigger.event.oclAsType(CallEvent).operation.name/] + if (event.operationID == [cetrigger(trigger.event.oclAsType(CallEvent).operation)/]) { newState = STATE_[transition.target.name/]; [if not (transition.effect = null)] executor->[state.containingStateMachine().name/]_[transition.name/]_[transition.effect.name/](); [/if] } [/if] - [if (transition.trigger->asSequence()->first().event.oclIsKindOf(SignalEvent))] - // transition [name/] - trigger: SignalEvent, signal [transition.trigger.event.oclAsType(SignalEvent).signal.name/] - if (event.operationID == SIG_[transition.trigger.event.oclAsType(SignalEvent).signal.name/]) { - newState = STATE_[transition.target.name/]) ; -[if not (transition.effect = null)] executor->[state.containingStateMachine().name/]_[transition.name/]_[transition.effect.name/](); + [if (trigger.event.oclIsKindOf(SignalEvent))] + [let signalEvent : SignalEvent = trigger.event.oclAsType(SignalEvent)] + // transition [name/] - trigger: SignalEvent ([signalEvent.name/]), signal [signalEvent.signal.name/] + if (event.operationID == [setrigger(trigger)/]) { + newState = STATE_[transition.target.name/]; +[if not (transition.effect = null)] [if signalEvent.signal.attribute->size() > 0]void* data = &event.params;[/if] + executor->[state.containingStateMachine().name/]_[transition.name/]_[transition.effect.name/]([if signalEvent.signal.attribute->size() > 0]data[/if]); + [/if] // ok = EvQUEUE ; } + [/let] [/if] + [/let] [/for] if (newState != m_currentState) { m_currentState = newState; |