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:
result :
OutputPin (1 1); -- source
ReadLinkAction endData :
LinkEndData (2 *); -- source
LinkAction inputValue :
InputPin (1 *); -- source
LinkAction context :
Classifier (0 1); -- source
Action input :
InputPin (0 *); -- source
Action isLocallyReentrant : Boolean (1 1); -- source
Action localPostcondition :
Constraint (0 *); -- source
Action localPrecondition :
Constraint (0 *); -- source
Action output :
OutputPin (0 *); -- source
Action handler :
ExceptionHandler (0 *); -- source
ExecutableNode activity :
Activity (0 1); -- source
ActivityNode inGroup :
ActivityGroup (0 *); -- source
ActivityNode inInterruptibleRegion :
InterruptibleActivityRegion (0 *); -- source
ActivityNode inPartition :
ActivityPartition (0 *); -- source
ActivityNode inStructuredNode :
StructuredActivityNode (0 1); -- source
ActivityNode incoming :
ActivityEdge (0 *); -- source
ActivityNode outgoing :
ActivityEdge (0 *); -- source
ActivityNode redefinedNode :
ActivityNode (0 *); -- source
ActivityNode isLeaf : Boolean (1 1); -- source
RedefinableElement redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement redefinitionContext :
Classifier (0 *); -- source
RedefinableElement clientDependency :
Dependency (0 *); -- source
NamedElement name : String (0 1); -- source
NamedElement nameExpression :
StringExpression (0 1); -- source
NamedElement namespace :
Namespace (0 1); -- source
NamedElement qualifiedName : String (0 1); -- source
NamedElement A name which allows the NamedElement to be identified within a hierarchy
of nested Namespaces. It is constructed from the names of the containing
namespaces starting at the root of the hierarchy and ending with the name
of the NamedElement itself.
{
readonly,
derived}
visibility :
VisibilityKind (0 1); -- source
NamedElement ownedComment :
Comment (0 *); -- source
Element ownedElement :
Element (0 *); -- source
Element 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].