/* * 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 abstract class LinkActionActivation extends fUML.Semantics.Actions.BasicActions.ActionActivation { public boolean linkMatchesEndData(fUML.Semantics.Classes.Kernel.Link link, fUML.Syntax.Actions.IntermediateActions.LinkEndDataList endDataList) { // Test whether the given link matches the given end data. boolean matches = true; int i = 1; while (matches & i <= endDataList.size()) { matches = this.endMatchesEndData(link, endDataList.getValue(i - 1)); i = i + 1; } return matches; } // linkMatchesEndData public boolean endMatchesEndData(fUML.Semantics.Classes.Kernel.Link link, fUML.Syntax.Actions.IntermediateActions.LinkEndData endData) { // Test whether the appropriate end of the given link matches the given // end data. boolean matches = false; if (endData.value == null) { matches = true; } else { Property end = endData.end; FeatureValue linkFeatureValue = link.getFeatureValue(end); Value endValue = this.getTokens(endData.value).getValue(0); if (endData instanceof LinkEndDestructionData) { if (!((LinkEndDestructionData) endData).isDestroyDuplicates & !end.multiplicityElement.isUnique & end.multiplicityElement.isOrdered) { int destroyAt = ((UnlimitedNaturalValue) (this .getTokens(((LinkEndDestructionData) endData).destroyAt) .getValue(0))).value.naturalValue; matches = linkFeatureValue.values.getValue(0).equals( endValue) && linkFeatureValue.position == destroyAt; } else { matches = linkFeatureValue.values.getValue(0).equals( endValue); } } else { matches = linkFeatureValue.values.getValue(0).equals(endValue); } } return matches; } // endMatchesEndData public fUML.Syntax.Classes.Kernel.Association getAssociation() { // Get the association for the link action of this activation. return (Association) (((LinkAction) (this.node)).endData.getValue(0).end.association); } // getAssociation } // LinkActionActivation