Document: UML Profile and Interchange Models for EAI
Section: 6.2.5 (EAITerminal)
Description:
The representation/parameter association is marked as <<derived>> in Figure 6-6, however no clear description is given on how it is derived.
Recommendation:
I think the intent is that the terminal represents an FCMParameter of an operation associated with the FCMNode to which the terminal is attached. However, given the associations and navigabilities shown in Figure 6-2, this really cannot be done as a single constraint. Instead, it needs to be done as separate constraints on each kind of FCMNode:
FCMFunction:
An FCMFunction has FCMTerminals that represent each of the parameters of the FCMOperation invoked by the FCMFunction.
(self.interface->select(terminalKind = #in).parameter = self.invokes.inputs) and
(self.interface->select(terminalKind = #out).parameter = self.invokes.outputs) and
(self.interface->select(terminalKind = #fault).parameter = self.invokes.faults)
FCMSource:
An FCMSource has a output terminals that represents the input parameters of the operation implemented by the FCMSource. (Note that a source has OUTPUT terminals, but these terminals represent the INPUT parameters within the composition that implements the operation.)
(self.interface->forAll(terminalKind = #out)) and
(self.interface.parameter = self.implements.inputs)
FCMSink:
An FCMSink has a single input terminal that represents a single output (or fault) parameter of the operation implemented by the FCMSource associated with the FCMSink. (Note that a source has an INPUT terminal, but this terminal represents an OUTPUT parameter within the composition that implements the operation.)
(self.interface->size() = 1) and (self.interface.terminalKind = #in) and
self.source.implements.outputs->union(self.source.implements.faults)->includesAll(self.interface)