/* * 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 ForkedToken extends fUML.Semantics.Activities.IntermediateActivities.Token { public fUML.Semantics.Activities.IntermediateActivities.Token baseToken = null; public int remainingOffersCount = 0; public boolean baseTokenIsWithdrawn = false; public boolean isControl() { // Test if the base token is a control token. return this.baseToken.isControl(); } // isControl public void withdraw() { // If the base token is not withdrawn, then withdraw it. // Decrement the remaining offers count. // When the remaining number of offers is zero, then remove this token // from its holder. if (!this.baseTokenIsWithdrawn & !this.baseToken.isWithdrawn()) { this.baseToken.withdraw(); // NOTE: This keeps a base token that is a forked token from being // withdrawn more than once, since withdrawing a forked token may // not actually remove it from its fork node holder. this.baseTokenIsWithdrawn = true; } if (this.remainingOffersCount > 0) { this.remainingOffersCount = this.remainingOffersCount - 1; } if (this.remainingOffersCount == 0) { super.withdraw(); } } // withdraw public fUML.Semantics.Activities.IntermediateActivities.Token copy() { // Return a copy of the base token. return this.baseToken.copy(); } // copy public boolean equals( fUML.Semantics.Activities.IntermediateActivities.Token otherToken) { // Test if this token is equal to another token. return this == otherToken; } // equals public fUML.Semantics.Classes.Kernel.Value getValue() { // Return the value of the base token. return this.baseToken.getValue(); } // getValue } // ForkedToken