The FWTransition Stereotype

This section defines the constraints applicable to the <<FWTransition>> stereotype. Each constraint is defined in a dedicated subsection.

ConnectionToSourceVertexConstraint

Description: The transition's source can be only a state within the same region as the transition self.

OCL:

self.source.container = self.container

UML2 API:

if (object.getContainer().getSubvertex(object.getSource().getName()) == null)

return false;

return true;

ConnectionToTargetVertexConstraint

Description: The transition's target can be only a state within the same region as the transition self.

OCL:

self.target.container = self.container

UML2 API:

if (object.getContainer().getSubvertex(object.getTarget().getName()) == null)

return false;

return true;

ChangeTriggerConstraint

Description: The transition has no change trigger.

OCL:

self.trigger->select(v|v.oclIsKindOf(ChangeTrigger))->size()=0

UML2 API:

for (Iterator triggers = object.getTriggers().iterator();triggers.hasNext();) {

Trigger trigger = (Trigger)triggers.next();

if (trigger instanceof ChangeTrigger)

return false;

}

return true;

SignalTriggerConstraint

Description: The transition has no signal trigger.

OCL:

self.trigger->select(v|v.oclIsKindOf(SignalTrigger))->size()=0

UML2 API:

for (Iterator triggers = object.getTriggers().iterator(); triggers.hasNext();) {

Trigger trigger = (Trigger)triggers.next();

if (trigger instanceof SignalTrigger)

return false;

}

return true;

TimeTriggerConstraint

Description: The transition has no time trigger.

OCL:

self.trigger->select(v|v.oclIsKindOf(TimeTrigger))->size()=0

UML2 API:

for (Iterator triggers = object.getTriggers().iterator(); triggers.hasNext();) {

Trigger trigger = (Trigger)triggers.next();

if (trigger instanceof TimeTrigger)

return false;

}

return true;

GuardConstraint

Description: The condition (guard) has to be syntactically correct.

OCL:

This guard constraint cannot be described by OCL.

UML2 API:

String guard = validatorHelper.getGuard(object);

if (guard != "")

if (validatorHelper.parseGuard(guard))

return true;

return false;

TriggerOperationStereotypeConstraint

Description: Operations triggering a state transition have to be denoted by the <<FWTriggerOperation>> stereotype.

OCL:

This constraint cannot be easily described by OCL.

UML2 API:

for (Iterator triggers = object.getTriggers().iterator(); triggers.hasNext();) {

Trigger trigger = (Trigger)triggers.next();

if (!(trigger instanceof CallTrigger)){

return false;

}

else {

Operation operation = ((CallTrigger)trigger).getOperation();

if(operation == null){

return false;

}

for(Iterator stereotypes = operation.getAppliedStereotypes().

iterator(); stereotypes.hasNext();){

Stereotype s = (Stereotype)stereotypes.next();

if (s == null)

return false;

if (s.getName().equals("FWTriggerOperation"))

return true;

else {

return false;

}

}

return false;

}

}

return false;

ClassLocationOfTriggerOperationConstraint

Description: State transitions in a state machine should be triggered by calls of operations defined by a class to which is the state machine associated.

OCL:

This constraint cannot be easily described by OCL.

UML2 API:

for (Iterator triggers = object.getTriggers().iterator(); triggers.hasNext();) {

Trigger trigger = (Trigger)triggers.next();

Operation operation = ((CallTrigger)trigger).getOperation();

if (operation.getClass_().equals(object.getContainer().getStateMachine

().eContainer())){

return true;

}

else

return false;

}

return false;