Class UML 2.4.1::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/right-arrow.png)
endData :
LinkEndData (2 *); -- source
LinkActionData identifying one end of a link by the objects on its ends and qualifiers.
{
composite}
Subsets: Element.ownedElement
![](/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/down-arrow.png)
inInterruptibleRegion :
InterruptibleActivityRegion (0 *); -- source
ActivityNode![](/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/down-arrow.png)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement![](/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/right-arrow.png)
visibility :
VisibilityKind (0 1); -- source
NamedElementDetermines where the NamedElement appears within different Namespaces within
the overall model, and its accessibility.
![](/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 : Property = 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].