Issue 17392: Addition to resolution to Issue 17299 (fuml-rtf) Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com) Nature: Uncategorized Issue Severity: Summary: Specification: Semantics of a Foundational Subset for Executable UML Models (fUML), v1.0 (formal/2011-02-02) Subclause: 8.5.2.2.3 ActivityFinalNodeActivation The resolution to Issue 17299 did not take into account, in the revision to ActivityFinalNodeActivation::fire, that the group for the ActivityFinalNodeActivation may be an ExpansionActivationGroup, which has a regionActivation property set instead of containingNodeActivation. Resolution: Agreed. In addition to modifying ActivityFinalNodeActivation, to call the terminate operation on an enclosing expansion region, it is necessary to modify the ExpansionRegionActivation to fire the outputs of the expansion region before it terminates (which is the problem identified in Issue 17299). (Note that the resolution to Issue 17300 also modified the ActivityFinalNodeActivation::fire operation.) Revised Text: In Subclause 8.5.2.2.3, in the fire operation, replace the if statement, as introduced by the resolution to Issue 17299 and further modified by the resolution to Issue 17300, with if (incomingTokens.size() > 0 | this.incomingEdges.size() == 0) { if (this.group.activityExecution != null) { this.group.activityExecution.terminate(); } else if (this.group.containingNodeActivation != null) { this.group.containingNodeActivation.terminateAll(); } else if (this.group instanceof ExpansionActivationGroup){ ((ExpansionActivationGroup)this.group).regionActivation.terminate(); } } In Subclause 8.5.4.2.3, in operation terminate • In the terminate operation, replace the statement activationGroup.terminateAll(); with OutputPinActivationList groupOutputs = activationGroup.groupOutputs; _beginIsolation(); for (int j = 0; j < groupOutputs.size(); j++) { OutputPinActivation groupOutput = groupOutputs.getValue(j); groupOutput.fire(groupOutput.takeOfferedTokens()); } activationGroup.terminateAll(); _endIsolation(); • In the runGroup operation, surround the existing body of the operation with the if statement “if (this.isRunning()) { … }”. Further surround the statements after (but not including) the statement “activationGroup.run(activationGroup.nodeActivations);” with a similar if statement. (Note: the resolution to Issue 17499 proposes a further modification to this operation.) Actions taken: May 23, 2012: received issue January 7, 2013: closed issue Discussion: End of Annotations:===== m: Ed Seidewitz To: "issue@omg.org" Date: Tue, 22 May 2012 23:25:06 -0400 Subject: Addition to resolution to Issue 17299 Thread-Topic: Addition to resolution to Issue 17299 Thread-Index: Ac04k0UaUbvJ5fTfSLaUV5qHL45kgQ== Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US X-Mailprotector-Decision: deliver X-Mailprotector-Connection: TLSv1|[10.1.50.225]|10.1.50.225|outbound.mailprotector.net|0|0|0|new|ugly|0|0|0|0 X-Mailprotector-Results: null_ptr clean X-Mailprotector-Score: 40 X-Mailprotector-IP-Analysis: 0, 10.1.50.225, Ugly c=0 p=0 Source New X-Mailprotector-Scan-Diagnostics: 0-0-0-4867-c X-Mailprotector-ID: d6d7e426-4c20-4c26-bc10-7bcd999c51e7 Specification: Semantics of a Foundational Subset for Executable UML Models (fUML), v1.0 (formal/2011-02-02) Subclause: 8.5.2.2.3 ActivityFinalNodeActivation The resolution to Issue 17299 did not take into account, in the revision to ActivityFinalNodeActivation::fire, that the group for the ActivityFinalNodeActivation may be an ExpansionActivationGroup, which has a regionActivation property set instead of containingNodeActivation.