Software Disclaimer

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: LinkAction

Direct Subclasses:

Class Precedence List: ReadLinkAction, LinkAction, Action, ExecutableNode, ActivityNode, RedefinableElement, NamedElement, Element

Properties:

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

The ordered set of input pins connected to the Action. These are among the total set of inputs.
{composite, readonly, ordered}
Derived union with sources: (inputValue)
Subsets: Element.ownedElement

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
visibility : VisibilityKind (0 1); -- source NamedElement
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element

Constraints:

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].