Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.mtl34
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;

Back to the top