Class UML 2.3::ReadLinkAction
Description:
A read link action is a link action that navigates across associations
to retrieve objects on one end.
Direct Superclasses: LinkActionDirect Subclasses: Class Precedence List: ReadLinkAction,
LinkAction,
Action,
ExecutableNode,
ActivityNode,
RedefinableElement,
NamedElement,
ElementProperties:
![](/se-interop/image/down-arrow.png)
result :
OutputPin (1 1); -- source
ReadLinkAction![](/se-interop/image/down-arrow.png)
endData :
LinkEndData (2 *); -- source
LinkAction![](/se-interop/image/down-arrow.png)
inputValue :
InputPin (1 *); -- source
LinkAction![](/se-interop/image/down-arrow.png)
context :
Classifier (0 1); -- source
Action![](/se-interop/image/down-arrow.png)
input :
InputPin (0 *); -- source
Action![](/se-interop/image/down-arrow.png)
isLocallyReentrant : Boolean (1 1); -- source
Action![](/se-interop/image/down-arrow.png)
localPostcondition :
Constraint (0 *); -- source
Action![](/se-interop/image/down-arrow.png)
localPrecondition :
Constraint (0 *); -- source
Action![](/se-interop/image/down-arrow.png)
output :
OutputPin (0 *); -- source
Action![](/se-interop/image/down-arrow.png)
handler :
ExceptionHandler (0 *); -- source
ExecutableNode![](/se-interop/image/down-arrow.png)
activity :
Activity (0 1); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
inGroup :
ActivityGroup (0 *); -- source
ActivityNode![](/se-interop/image/right-arrow.png)
inInterruptibleRegion :
InterruptibleActivityRegion (0 *); -- source
ActivityNode Interruptible regions containing the node.
Subsets: ActivityNode.inGroup
Opposite: InterruptibleActivityRegion.node
![](/se-interop/image/down-arrow.png)
inPartition :
ActivityPartition (0 *); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
inStructuredNode :
StructuredActivityNode (0 1); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
incoming :
ActivityEdge (0 *); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
outgoing :
ActivityEdge (0 *); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
redefinedNode :
ActivityNode (0 *); -- source
ActivityNode![](/se-interop/image/down-arrow.png)
isLeaf : Boolean (1 1); -- source
RedefinableElement![](/se-interop/image/right-arrow.png)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement The redefinable element that is being redefined by this element.
{
readonly}
Derived union with sources: (redefinedNode)
![](/se-interop/image/down-arrow.png)
redefinitionContext :
Classifier (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png)
clientDependency :
Dependency (0 *); -- source
NamedElement![](/se-interop/image/down-arrow.png)
name : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
nameExpression :
StringExpression (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
namespace :
Namespace (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
qualifiedName : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
visibility :
VisibilityKind (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
ownedComment :
Comment (0 *); -- source
Element![](/se-interop/image/down-arrow.png)
ownedElement :
Element (0 *); -- source
Element![](/se-interop/image/down-arrow.png)
owner :
Element (0 1); -- source
ElementConstraints:
Signature: visibility() : Boolean;
Description: Visibility of the open end must allow access to the object performing the
action.
The OCL used here is not normative.Editor's notes: participant not defined.
Expression: true
Original: let host : Classifier = self.context in
let openend : Property = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in
openend.visibility = #public
or self.endData->exists(oed | not oed.end = openend
and (host = oed.end.participant
or (openend.visibility = #protected
and host.allSupertypes->includes(oed.end.participant))))
Signature: type_and_ordering() : Boolean;
Description: The type and ordering of the result output pin are same as the type and
ordering of the open association end.
Expression: let openend : Property = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in
self.result.type = openend.type
and self.result.ordering = openend.ordering
Signature: one_open_end() : Boolean;
Description: Exactly one link-end data specification (the 'open' end) must not have
an end object input pin.
Expression: self.endData->select(ed | ed.value->size() = 0)->size() = 1
Signature: navigable_open_end() : Boolean;
Description: The open end must be navigable.
Expression: let openend : Property = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in
openend.isNavigable()
Signature: compatible_multiplicity() : Boolean;
Description: The multiplicity of the open association end must be compatible with the
multiplicity of the result output pin.
The OCL used here is not normative.Editor's notes: No multiplicity. No more AssociationEnd. Needs further investigation. Use of Element is a hack.
Expression: let openend : Element = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in
openend.compatibleWith(self.result)
Original: let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in
openend.multiplicity.compatibleWith(self.result.multiplicity)
Operations:
No additional operations.
Send questions or comments to
[email protected].