/* * PlaceMarkingEdit.java */ package pipe.historyActions.place; import uk.ac.imperial.pipe.models.petrinet.Place; import javax.swing.undo.AbstractUndoableEdit; /** * Responsible for changing the value of a single token in a place */ public final class ChangePlaceTokens extends AbstractUndoableEdit { /** * Place model */ private final Place place; /** * Token id */ private final String token; /** * Previous number of tokens stored in the place for the token id */ private final int previousCount; /** * New number of tokens stored in the place for the token id */ private final int newCount; /** * Constructor * @param place underlying place model * @param token token id * @param previousCount previous number of tokens stored in the place for the token id * @param newCount new number of tokens stored in the place for the token id */ public ChangePlaceTokens(Place place, String token, int previousCount, int newCount) { this.place = place; this.token = token; this.previousCount = previousCount; this.newCount = newCount; } @Override public int hashCode() { int result = place != null ? place.hashCode() : 0; result = 31 * result + (token != null ? token.hashCode() : 0); result = 31 * result + previousCount; result = 31 * result + newCount; return result; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final ChangePlaceTokens that = (ChangePlaceTokens) o; if (newCount != that.newCount) { return false; } if (previousCount != that.previousCount) { return false; } if (place != null ? !place.equals(that.place) : that.place != null) { return false; } if (token != null ? !token.equals(that.token) : that.token != null) { return false; } return true; } /** * Sets the token count for the token id to the previous count */ @Override public void undo() { super.undo(); place.setTokenCount(token, previousCount); } /** * Sets the token count for the token id to the new count */ @Override public void redo() { super.redo(); place.setTokenCount(token, newCount); } }