/* * Initial version copyright 2008 Lockheed Martin Corporation, except * as stated in the file entitled Licensing-Information. * * All modifications copyright 2009-2012 Data Access Technologies, Inc. * * Licensed under the Academic Free License version 3.0 * (http://www.opensource.org/licenses/afl-3.0.php), except as stated * in the file entitled Licensing-Information. */ package fUML.Semantics.Activities.ExtraStructuredActivities; import fUML.Debug; import UMLPrimitiveTypes.*; import fUML.Syntax.*; import fUML.Syntax.Classes.Kernel.*; import fUML.Syntax.CommonBehaviors.BasicBehaviors.*; import fUML.Syntax.CommonBehaviors.Communications.*; import fUML.Syntax.Activities.IntermediateActivities.*; import fUML.Syntax.Activities.CompleteStructuredActivities.*; import fUML.Syntax.Activities.ExtraStructuredActivities.*; import fUML.Syntax.Actions.BasicActions.*; import fUML.Semantics.*; import fUML.Semantics.Classes.Kernel.*; import fUML.Semantics.CommonBehaviors.BasicBehaviors.*; import fUML.Semantics.CommonBehaviors.Communications.*; import fUML.Semantics.Activities.IntermediateActivities.*; import fUML.Semantics.Activities.CompleteStructuredActivities.*; import fUML.Semantics.Actions.BasicActions.*; import fUML.Semantics.Loci.*; public class ExpansionActivationGroup extends fUML.Semantics.Activities.IntermediateActivities.ActivityNodeActivationGroup { public fUML.Semantics.Actions.BasicActions.OutputPinActivationList regionInputs = new fUML.Semantics.Actions.BasicActions.OutputPinActivationList(); public fUML.Semantics.Actions.BasicActions.OutputPinActivationList groupInputs = new fUML.Semantics.Actions.BasicActions.OutputPinActivationList(); public fUML.Semantics.Activities.ExtraStructuredActivities.ExpansionRegionActivation regionActivation = null; public fUML.Semantics.Actions.BasicActions.OutputPinActivationList groupOutputs = new fUML.Semantics.Actions.BasicActions.OutputPinActivationList(); public int index = 0; public fUML.Semantics.Activities.IntermediateActivities.ActivityNodeActivation getNodeActivation( fUML.Syntax.Activities.IntermediateActivities.ActivityNode node) { // If the given node is an input pin of the expansion region, then // return the corresponding region-input output-pin activation. // If the given node is an input expansion node of the expansion region, // then return the corresponding group-input output-pin activation. // If the given node is an output expansion node of the expansion // region, then return the corresponding group-output output-pin // activation. // Otherwise return the node activation from the activation group, as // usual. ExpansionRegion region = (ExpansionRegion) (this.regionActivation.node); InputPinList inputs = region.input; ActivityNodeActivation activation = null; int i = 1; while (activation == null & i <= region.input.size()) { if (node == region.input.getValue(i - 1)) { activation = this.regionInputs.getValue(i - 1); } i = i + 1; } int j = 1; while (activation == null & j <= region.inputElement.size()) { if (node == region.inputElement.getValue(j - 1)) { activation = this.groupInputs.getValue(j - 1); } j = j + 1; } int k = 1; while (activation == null & k <= region.outputElement.size()) { if (node == region.outputElement.getValue(k - 1)) { activation = this.groupOutputs.getValue(k - 1); } k = k + 1; } if (activation == null) { activation = super.getNodeActivation(node); } return activation; } // getNodeActivation public fUML.Semantics.Activities.IntermediateActivities.ActivityExecution getActivityExecution() { // Get the activity execution that contains the expansion region // activation for this activation group. return this.regionActivation.getActivityExecution(); } // getActivityExecution public void suspend( fUML.Semantics.Activities.IntermediateActivities.ActivityNodeActivation activation) { // Suspend the given activation in this activation group. If this is // the only suspended activation, then suspend the associated region // activation. if (!this.isSuspended()) { this.regionActivation.suspend(); } super.suspend(activation); } // suspend public void resume( fUML.Semantics.Activities.IntermediateActivities.ActivityNodeActivation activation) { // Resume the given activation in this activation group. If this is the // last suspended activation, then resume the associated region // activation. super.resume(activation); if (!this.isSuspended()) { this.regionActivation.resume(this); } } // resume } // ExpansionActivationGroup