package pipe.historyActions.transition;
import uk.ac.imperial.pipe.models.petrinet.Transition;
import javax.swing.undo.AbstractUndoableEdit;
/**
* Undo action for changing the transition priority
*/
public class TransitionPriority extends AbstractUndoableEdit {
/**
* Underlying transition model
*/
private final Transition transition;
/**
* Old transition priority
*/
private final int oldPriority;
/**
* New transition priority
*/
private final int newPriority;
/**
* Constructor
*
* @param transition underlying transition model
* @param oldPriority old priority
* @param newPriority new priority
*/
public TransitionPriority(final Transition transition, final int oldPriority, final int newPriority) {
this.transition = transition;
this.oldPriority = oldPriority;
this.newPriority = newPriority;
}
@Override
public int hashCode() {
int result = transition.hashCode();
result = 31 * result + oldPriority;
result = 31 * result + newPriority;
return result;
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final TransitionPriority priority = (TransitionPriority) o;
if (newPriority != priority.newPriority) {
return false;
}
if (oldPriority != priority.oldPriority) {
return false;
}
if (!transition.equals(priority.transition)) {
return false;
}
return true;
}
/**
* Sets the transition to its old priority
*/
@Override
public void undo() {
super.undo();
transition.setPriority(oldPriority);
}
/**
* Sets the transition to its new priority
*/
@Override
public void redo() {
super.redo();
transition.setPriority(newPriority);
}
}