Issue 6142: Update actions for isUnique (uml2-superstructure-ftf) Source: (, ) Nature: Revision Severity: Significant Summary: Update structural feature and associations actions for isUnique. For example, the semantics description of the class AddStructuralFeatureValueAction says: "Reinserting an existing value at a new position moves the value to that position (this works because structural feature values are sets)". Resolution: see above Revised Text: Actions taken: August 30, 2003: received issue March 8, 2005: closed issue Discussion: Update actions for nonunique structural features, association ends, and variables, as follows. In Figure 145: Add attribute to RemoveStructuralFeatureAction: isRemoveDuplicates : Boolean = false Add association removeAt between RemoveStructuralFeatureAction and InputPin. as shown below: In AddStructuralFeatureValueAction class: In Semantics: First paragraph, second sentence, after "If isReplaceAll is false" add "and the structural feature is nonordered and nonunique". Second paragraph: Replace "infinity" with "unlimited" (two occurrences). Next to last sentence, after "new position" insert "in an ordered, unique structural feature". In RemoveStructuralFeatureValueAction class: In Description, add new paragraph a t end: "Structural Features are potentially multi-valued and ordered, and may support duplicates, so the action supports specification of removal points for new values. It also supports the removal of all duplicate values." In Attributes add: isRemoveDuplicates : Boolean = false [1..1] Specifies whether to removes duplicates of the value in nonunique structural features. In Associations add: removeAt : InputPin [0..1] Specifies the position of an existing value to remove in ordered, nonunique structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. In Constraints add new constraint: “Actions removing a value from ordered, nonunique structural features must have a single removeAt inputPin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1. Otherwise the action has no removeAt input pin.” In Semantics, add new paragraph after first: "Values of a structural feature may be duplicate in nonunique structural features. The isRemoveDuplicates attribute indicates whether to remove all duplicates of the specified value. The removeAt input pin is required if isRemoveDuplicates is false in ordered, nonunique structural features. It indicates the position of an existing value to remove. It must be a positive integer less than or equal to the current number of values. The semantics is undefined for zero, an integer greater than the number of existing values, and unlimited." In Figure 148: Add LinkEndDestructionData as a kind of LinkEndData with attribute: isRemoveDuplicates : Boolean = false and with association removeAt to InputPin. Add association from DestroyLinkAction to LinkEndDestructionData redefining endData. as shown below: In CreateLinkAction class: In Description, first paragraph: last sentence, after "new position" insert "in an ordered, unique structural feature". replace "infinity" with "unlimited". In Semantics: WriteLinkAction LinkEndData LinkAction Action (from BasicActivities) CreateLinkAction Association (from Kernel) InputPin (from BasicActivities) ClearAssociationAction 1 0..1 +association 1 0..1 +object {subsets input} LinkEndCreationData isReplaceAll : Boolean = false 2..* 1 +endData {redefines endData} InputPin (from BasicActivities) 0..1 0..1 +insertAt LinkEndDestructionData isRemoveDuplicates : Boolean = false 0..1 0..1 +destroyAt DestroyLinkAction 2..* 1 +endData {redefines endData} Second paragraph, last sentence, add at end: "if the structural feature is nonordered and nonunique". Last paragraph: Replace "infinity" with "unlimited". Last sentence, after "new position" insert "in an ordered, unique structural feature". In LinkEndCreationData class: Delete the Associations (CompleteActions) section and the qualifier entry in it.. Move Constraints (CompleteActions) section and the constraints in it to LinkEndData. Add new class LinkEndDestructionData alphabetically in class list: LinkEndDestructionData LinkEndDestructionData is not an action. It is an element that identifies links. It identifies one end of a link to be destroyed by DestroyLinkAction. Description This class is required when using DestroyLinkAction, to specify links to destroy for nonunique, ordered ends. A link cannot be passed as a runtime value to or from an action. See description of LinkData. Qualifier values are used in CompleteActions. Attributes isDestroyDuplicates : Boolean = false Specifies whether to destroy duplicates of the value in nonunique association ends. Associations destroyAt : InputPin [0..1] Specifies the position of an existing link to be destroyed in ordered, nonunique association ends. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. Constraints [1] LinkEndDestructionData can only be end data for DestroyLinkAction or one of its specializations. [2] Link end destruction data for ordered, nonunique association ends must have a single destroyAt input pin if isDestroyDuplicates is false. It must be of type UnlimitedNatural and multiplicity of 1..1. Otherwise the action has no input pin for removal position. Semantics See DestroyLinkAction, also see LinkAction and all its children. Notation None. Examples Rationale LinkEndDestructionData is introduced to indicate which links to destroy for ordered, nonunique ends. In DestroyLinkAction class: In Description, add two new paragraphs at end: "DestroyLinkAction uses a specialization of LinkEndData called LinkEndDestructionData, to support ordered, nonunique associations. The position of the link to be destroyed is specified at runtime by an additional input pin, which is required for ordered, nonunique association ends and omitted for other kinds of ends. This is a positive integer giving the position of the link to destroy." "DestroyLinkAction also uses LinkEndDestructionData to support the destruction of duplicate links of the association on ends that are nonunique. This option is available on an end-by-end basis, and causes all duplicate links of the association emanating from the specified ends to be destroyed." In Associations add: endData : LinkEndCreationData [2..*] (Redefined from LinkAction:endData) Specifies ends of association and inputs. In Semantics, add new paragraph after first: "Destroying links for nonunique, ordered association ends requires identifying the position of the link using the input pin of LinkEndDestructionData. The pin is of type UnlimitedNatural with multiplicity of 1..1. A pin value that is a positive integer less than or equal to the current number of links means to destroy the at that position in the sequence of existing links, with the integer one meaning the first link in the sequence. The semantics is undefined for value of zero, an integer greater than the number of existing links, and unlimited. The destroyAt input pin only exists for ordered, nonunique association ends." In Figure 149: Add attribute to RemoveVariableValueAction isRemoveDuplicates : Boolean = false and association removeAt to InputPin. as shown below: In AddVariableValueAction: In Semantics: First paragraph, second sentence, after "If isReplaceAll is false" add "and the variable is nonordered and nonunique". Second paragraph: Replace "infinity" with "unlimited" (two occurrences). Last sentence, after "new position" insert "in an ordered, unique variable". In RemoveVariableValueAction: In Description, add new paragraph at end: "Variables are potentially multi-valued and ordered, and may support duplicates, so the action supports specification of removal points for new values. It also supports the removal of all duplicate values." In Attributes add: isRemoveDuplicates : Boolean = false [1..1] Specifies whether to removes duplicates of the value in nonunique variables. In Associations add: removeAt : InputPin [0..1] Specifies the position of an existing value to remove in ordered, nonunique variables. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. In Constraints add: Actions removing a value from ordered, nonunique variables must have a single removeAt inputPin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1, otherwise the action has no removeAt input pin. In Semantics, add new paragraph after first: "Values of a variable may be duplicate in nonunique variables. The isRemoveDuplicates attribute indicates whether to remove all duplicates of the specified value. The removeAt input pin is required if isRemoveDuplicates is false in ordered, nonunique variables. It indicates the position of an existing value to remove. It must be a positive integer less than or equal to the current number of values. The semantics is undefined for zero, an integer greater than the number of existing values, and unlimited." End of Annotations:===== Name: Steffen Moeller Company: self mailFrom: Steffen.Moeller@directbox.com Nature: Revision Severity: Significant Subject: Update actions for isUnique Update structural feature and associations actions for isUnique. For example, the semantics description of the class AddStructuralFeatureValueAction says: "Reinserting an existing value at a new position moves the value to that position (this works because structural feature values are sets)". Discussion: In Figure 178, p. 270, change the multiplicities of the association between Action and OutputPin and between Action and InputPin on the Action end to "0..1". OMG Issue No: 6142 Title: Update actions for isUnique Source: Steffen.Moeller@directbox.com Summary: Update structural feature and associations actions for isUnique. For example, the semantics description of the class AddStructuralFeatureValueAction says: "Reinserting an existing value at a new position moves the value to that position (this works because structural feature values are sets)". Discussion: Update actions for nonunique structural features, association ends, and variables, as follows. In Figure 145: Add attribute to RemoveStructuralFeatureAction: isRemoveDuplicates : Boolean = false Add association removeAt between RemoveStructuralFeatureAction and InputPin. as shown below: In AddStructuralFeatureValueAction class: In Semantics: First paragraph, second sentence, after "If isReplaceAll is false" add "and the structural feature is nonordered and nonunique". Second paragraph: Replace "infinity" with "unlimited" (two occurrences). Next to last sentence, after "new position" insert "in an ordered, unique structural feature". In RemoveStructuralFeatureValueAction class: In Description, add new paragraph at end: "Structural Features are potentially multi-valued and ordered, and may support duplicates, so the action supports specification of removal points for new values. It also supports the removal of all duplicate values." In Attributes add: isRemoveDuplicates : Boolean = false [1..1] Specifies whether to removes duplicates of the value in nonunique structural features. In Associations add: removeAt : InputPin [0..1] Specifies the position of an existing value to remove in ordered, nonunique structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. In Constraints add new constraint: .Actions removing a value from ordered, nonunique structural features must have a single removeAt inputPin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1. Otherwise the action has no removeAt input pin.. In Semantics, add new paragraph after first: "Values of a structural feature may be duplicate in nonunique structural features. The isRemoveDuplicates attribute indicates whether to remove all duplicates of the specified value. The removeAt input pin is required if isRemoveDuplicates is false in ordered, nonunique structural features. It indicates the position of an existing value to remove. It must be a positive integer less than or equal to the current number of values. The semantics is undefined for zero, an integer greater than the number of existing values, and unlimited." In Figure 148: Add LinkEndDestructionData as a kind of LinkEndData with attribute: isRemoveDuplicates : Boolean = false and with association removeAt to InputPin. Add association from DestroyLinkAction to LinkEndDestructionData redefining endData. as shown below: In CreateLinkAction class: In Description, first paragraph: last sentence, after "new position" insert "in an ordered, unique structural feature". replace "infinity" with "unlimited". In Semantics: Second paragraph, last sentence, add at end: "if the structural feature is nonordered and nonunique". Last paragraph: Replace "infinity" with "unlimited". Last sentence, after "new position" insert "in an ordered, unique structural feature". In LinkEndCreationData class: Delete the Associations (CompleteActions) section and the qualifier entry in it.. Move Constraints (CompleteActions) section and the constraints in it to LinkEndData. Add new class LinkEndDestructionData alphabetically in class list: LinkEndDestructionData LinkEndDestructionData is not an action. It is an element that identifies links. It identifies one end of a link to be destroyed by DestroyLinkAction. Description This class is required when using DestroyLinkAction, to specify links to destroy for nonunique, ordered ends. A link cannot be passed as a runtime value to or from an action. See description of LinkData. Qualifier values are used in CompleteActions. Attributes isDestroyDuplicates : Boolean = false Specifies whether to destroy duplicates of the value in nonunique association ends. Associations destroyAt : InputPin [0..1] Specifies the position of an existing link to be destroyed in ordered, nonunique association ends. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. Constraints [1] LinkEndDestructionData can only be end data for DestroyLinkAction or one of its specializations. [2] Link end destruction data for ordered, nonunique association ends must have a single destroyAt input pin if isDestroyDuplicates is false. It must be of type UnlimitedNatural and multiplicity of 1..1. Otherwise the action has no input pin for removal position. Semantics See DestroyLinkAction, also see LinkAction and all its children. Notation None. Examples Rationale LinkEndDestructionData is introduced to indicate which links to destroy for ordered, nonunique ends. In DestroyLinkAction class: In Description, add two new paragraphs at end: "DestroyLinkAction uses a specialization of LinkEndData called LinkEndDestructionData, to support ordered, nonunique associations. The position of the link to be destroyed is specified at runtime by an additional input pin, which is required for ordered, nonunique association ends and omitted for other kinds of ends. This is a positive integer giving the position of the link to destroy." "DestroyLinkAction also uses LinkEndDestructionData to support the destruction of duplicate links of the association on ends that are nonunique. This option is available on an end-by-end basis, and causes all duplicate links of the association emanating from the specified ends to be destroyed." In Associations add: endData : LinkEndCreationData [2..*] (Redefined from LinkAction:endData) Specifies ends of association and inputs. In Semantics, add new paragraph after first: "Destroying links for nonunique, ordered association ends requires identifying the position of the link using the input pin of LinkEndDestructionData. The pin is of type UnlimitedNatural with multiplicity of 1..1. A pin value that is a positive integer less than or equal to the current number of links means to destroy the at that position in the sequence of existing links, with the integer one meaning the first link in the sequence. The semantics is undefined for value of zero, an integer greater than the number of existing links, and unlimited. The destroyAt input pin only exists for ordered, nonunique association ends." In Figure 149: Add attribute to RemoveVariableValueAction isRemoveDuplicates : Boolean = false and association removeAt to InputPin. as shown below: In AddVariableValueAction: In Semantics: First paragraph, second sentence, after "If isReplaceAll is false" add "and the variable is nonordered and nonunique". Second paragraph: Replace "infinity" with "unlimited" (two occurrences). Last sentence, after "new position" insert "in an ordered, unique variable". In RemoveVariableValueAction: In Description, add new paragraph at end: "Variables are potentially multi-valued and ordered, and may support duplicates, so the action supports specification of removal points for new values. It also supports the removal of all duplicate values." In Attributes add: isRemoveDuplicates : Boolean = false [1..1] Specifies whether to removes duplicates of the value in nonunique variables. In Associations add: removeAt : InputPin [0..1] Specifies the position of an existing value to remove in ordered, nonunique variables. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. In Constraints add: Actions removing a value from ordered, nonunique variables must have a single removeAt inputPin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1, otherwise the action has no removeAt input pin. In Semantics, add new paragraph after first: "Values of a variable may be duplicate in nonunique variables. The isRemoveDuplicates attribute indicates whether to remove all duplicates of the specified value. The removeAt input pin is required if isRemoveDuplicates is false in ordered, nonunique variables. It indicates the position of an existing value to remove. It must be a positive integer less than or equal to the current number of values. The semantics is undefined for zero, an integer greater than the number of existing values, and unlimited." Disposition: Resolved Disposition: Resolved