The FWRegion Stereotype

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

EntryPointConstraint

Description: The region has no entry points.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::entryPoint)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator(); subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.ENTRY_POINT)

return false;

}

}

return true;

ExitPointConstraint

Description: The region has no exit points.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::exitPoint)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator();

subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.EXIT_POINT)

return false;

}

}

return true;

ForkConstraint

Description: The region has no fork elements.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::fork)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator();

subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.FORK)

return false;

}

}

return true;

JoinConstraint

Description: The region has no join elements.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::join)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator();

subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.JOIN)

return false;

}

}

return true;

JunctionConstraint

Description: The region has no junction point.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::junction)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator(); subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.JUNCTION)

return false;

}

}

return true;

SubmachineStateConstraint

Description: The region has no submachine state.

OCL:

self.subvertex->select(v|v.oclIsKindOf(State))->

select(p|p.isSubmachineState)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator();

subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof State){

State state = (State)vertex;

if (state.isSubmachineState())

return false;

}

}

return true;

TerminateConstraint

Description: The region has no terminate.

OCL:

self.subvertex->select(v|v.oclIsKindOf(Pseudostate))->

select(p|p.kind=PseudostateKind::terminate)->size()=0

UML2 API:

for (Iterator subvertices = object.getSubvertices().iterator();

subvertices.hasNext();) {

Vertex vertex = (Vertex)subvertices.next();

if (vertex instanceof Pseudostate){

Pseudostate pseudostate = (Pseudostate)vertex;

if (pseudostate.getKind().getValue() == PseudostateKind.TERMINATE)

return false;

}

}

return true;