/* * 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.Actions.IntermediateActions; 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.Syntax.Actions.IntermediateActions.*; import fUML.Semantics.*; import fUML.Semantics.Classes.Kernel.*; import fUML.Semantics.CommonBehaviors.BasicBehaviors.*; import fUML.Semantics.Activities.IntermediateActivities.*; import fUML.Semantics.Actions.BasicActions.*; import fUML.Semantics.Loci.*; public class ReadStructuralFeatureActionActivation extends fUML.Semantics.Actions.IntermediateActions.StructuralFeatureActionActivation { public void doAction() { // Get the value of the object input pin. // If the given feature is an association end, then get all values of // the that end. // for which the opposite end has the object input value and place them // on the result pin. // Otherwise, if the object input value is a structural value, then get // the values // of the appropriate feature of the input value and place them on the // result output pin. ReadStructuralFeatureAction action = (ReadStructuralFeatureAction) (this.node); StructuralFeature feature = action.structuralFeature; Association association = this.getAssociation(feature); Value value = this.takeTokens(action.object).getValue(0); ValueList resultValues = new ValueList(); if (association != null) { LinkList links = this.getMatchingLinks(association, feature, value); for (int i = 0; i < links.size(); i++) { Link link = links.getValue(i); resultValues.addValue(link.getFeatureValue(feature).values .getValue(0)); } } else if (value instanceof StructuredValue) { // Debug.println("[ReadStructuralFeatureActionActivation] value = " // + value +", structural feature = " + feature.name); resultValues = ((StructuredValue) value).getFeatureValue(feature).values; } this.putTokens(action.result, resultValues); } // doAction } // ReadStructuralFeatureActionActivation