/* * 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.CommonBehaviors.BasicBehaviors; import fUML.Debug; import UMLPrimitiveTypes.*; import fUML.Syntax.*; import fUML.Syntax.Classes.Kernel.*; import fUML.Syntax.CommonBehaviors.BasicBehaviors.*; import fUML.Semantics.*; import fUML.Semantics.Classes.Kernel.*; import fUML.Semantics.Loci.*; public abstract class Execution extends fUML.Semantics.Classes.Kernel.Object_ { public fUML.Semantics.Classes.Kernel.Object_ context = null; public fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList parameterValues = new fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList(); public abstract void execute(); public void terminate() { // Terminate an ongoing execution. By default, do nothing. return; } // terminate public fUML.Semantics.Classes.Kernel.Value copy() { // Create a new execution that has the same behavior and parameterValues // as this execution. // Debug.println("[Copy] execution = " + this); Execution newValue = (Execution) (super.copy()); newValue.context = this.context; ParameterValueList parameterValues = this.parameterValues; for (int i = 0; i < parameterValues.size(); i++) { ParameterValue parameterValue = parameterValues.getValue(i); newValue.parameterValues.addValue(parameterValue.copy()); } // Debug.println("[Copy] Done."); return newValue; } // copy public abstract fUML.Semantics.Classes.Kernel.Value new_(); public void setParameterValue( fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValue parameterValue) { // Set the given parameter value for this execution. // If a parameter value already existed for the parameter of the given // parameter value, then replace its value. // Debug.println("[setParameterValue] parameter = " + // parameterValue.parameter.name + " with " + // parameterValue.values.size() + " values"); ParameterValue existingParameterValue = this .getParameterValue(parameterValue.parameter); if (existingParameterValue == null) { this.parameterValues.addValue(parameterValue); } else { existingParameterValue.values = parameterValue.values; } } // setParameterValue public fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValue getParameterValue( fUML.Syntax.Classes.Kernel.Parameter parameter) { // Get the parameter value of this execution corresponding to the given // parameter (if any). ParameterValue parameterValue = null; int i = 1; while (parameterValue == null & i <= this.parameterValues.size()) { if (this.parameterValues.getValue(i - 1).parameter == parameter) { parameterValue = this.parameterValues.getValue(i - 1); } i = i + 1; } return parameterValue; } // getParameterValue public fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList getOutputParameterValues() { // Return the parameter values for output (in-out, out and return) // parameters. ParameterValueList outputs = new ParameterValueList(); ParameterValueList parameterValues = this.parameterValues; for (int i = 0; i < parameterValues.size(); i++) { ParameterValue parameterValue = parameterValues.getValue(i); Parameter parameter = parameterValue.parameter; if ((parameter.direction == ParameterDirectionKind.inout) | (parameter.direction == ParameterDirectionKind.out) | (parameter.direction == ParameterDirectionKind.return_)) { outputs.addValue(parameterValue); } } return outputs; } // getOutputParameterValues public fUML.Syntax.CommonBehaviors.BasicBehaviors.Behavior getBehavior() { // Get the behavior that is the type of this execution. return (Behavior) (this.getTypes().getValue(0)); } // getBehavior } // Execution