/*
* Initial version copyright 2008 Lockheed Martin Corporation, except
* as stated in the file entitled Licensing-Information.
*
* All modifications copyright 2009-2017 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 fUML.Syntax.Activities.IntermediateActivities.*;
import fUML.Semantics.Classes.Kernel.*;
import fUML.Semantics.CommonBehaviors.BasicBehaviors.*;
public class ActivityExecution extends
fUML.Semantics.CommonBehaviors.BasicBehaviors.Execution {
public fUML.Semantics.Activities.IntermediateActivities.ActivityNodeActivationGroup activationGroup = null;
public void execute() {
// Execute the activity for this execution by creating an activity node
// activation group and activating all the activity nodes in the
// activity.
// When this is complete, copy the values on the tokens offered by
// output parameter nodes to the corresponding output parameters.
Activity activity = (Activity) (this.getTypes().getValue(0));
Debug.println("[execute] Activity " + activity.name + "...");
// Debug.println("[execute] context = " + this.context.objectId());
Debug.println("[event] Execute activity=" + activity.name);
this.activationGroup = new ActivityNodeActivationGroup();
this.activationGroup.activityExecution = this;
this.activationGroup.activate(activity.node, activity.edge);
// Debug.println("[execute] Getting output parameter node activations...");
ActivityParameterNodeActivationList outputActivations = this.activationGroup
.getOutputParameterNodeActivations();
// Debug.println("[execute] There are " + outputActivations.size() +
// " output parameter node activations.");
for (int i = 0; i < outputActivations.size(); i++) {
ActivityParameterNodeActivation outputActivation = outputActivations
.getValue(i);
ParameterValue parameterValue = new ParameterValue();
parameterValue.parameter = ((ActivityParameterNode) (outputActivation.node)).parameter;
TokenList tokens = outputActivation.getTokens();
for (int j = 0; j < tokens.size(); j++) {
Token token = tokens.getValue(j);
Value value = ((ObjectToken) token).value;
if (value != null) {
parameterValue.values.addValue(value);
Debug.println("[event] Output activity=" + activity.name
+ " parameter=" + parameterValue.parameter.name
+ " value=" + value);
}
}
this.setParameterValue(parameterValue);
}
Debug.println("[execute] Activity " + activity.name + " completed.");
} // execute
public fUML.Semantics.Classes.Kernel.Value copy() {
// Create a new activity execution that is a copy of this execution.
// [Note: This currently just returns a non-executing execution for the
// same activity as this execution.]
return super.copy();
} // copy
public fUML.Semantics.Classes.Kernel.Value new_() {
// Create a new activity execution with empty properties.
return new ActivityExecution();
} // new_
public void terminate() {
// Terminate all node activations (which will ultimately result in the
// activity execution completing).
if (this.activationGroup != null) {
this.activationGroup.terminateAll();
}
} // terminate
} // ActivityExecution