/* * 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.IntermediateActivities; 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.Actions.BasicActions.*; import fUML.Semantics.*; import fUML.Semantics.Classes.Kernel.*; import fUML.Semantics.CommonBehaviors.BasicBehaviors.*; import fUML.Semantics.Actions.BasicActions.*; import fUML.Semantics.Loci.*; public class ActivityParameterNodeActivation extends fUML.Semantics.Activities.IntermediateActivities.ObjectNodeActivation { public void fire( fUML.Semantics.Activities.IntermediateActivities.TokenList incomingTokens) { // If there are no incoming edges, this is an activation of an input // activity parameter node. // Get the values from the input parameter indicated by the activity // parameter node and offer those values as object tokens. if (this.node.incoming.size() == 0) { Debug.println("[fire] Input activity parameter node " + this.node.name + "..."); Parameter parameter = ((ActivityParameterNode) (this.node)).parameter; ParameterValue parameterValue = this.getActivityExecution() .getParameterValue(parameter); // Debug.println("[fire] parameter = " + parameter.name); if (parameterValue != null) { Debug.println("[fire] Parameter has " + parameterValue.values.size() + " value(s)."); TokenList tokens = new TokenList(); ValueList values = parameterValue.values; for (int i = 0; i < values.size(); i++) { Value value = values.getValue(i); ObjectToken token = new ObjectToken(); token.value = value; this.addToken(token); } this.sendUnofferedTokens(); } } // If there are one or more incoming edges, this is an activation of an // output activity parameter node. // Take the tokens offered on incoming edges and add them to the set of // tokens being offered. // [Note that an output activity parameter node may fire multiple times, // accumulating tokens offered to it.] else { Debug.println("[fire] Output activity parameter node " + this.node.name + "..."); this.addTokens(incomingTokens); } } // fire public void clearTokens() { // Clear all held tokens only if this is an input parameter node. if (this.node.incoming.size() == 0) { super.clearTokens(); } } // clearTokens } // ActivityParameterNodeActivation