package fi.utu.ville.exercises.helpers; import fi.utu.ville.exercises.model.ExecutionState; import fi.utu.ville.exercises.model.ExecutionStateChangeListener; import fi.utu.ville.exercises.model.Executor; import fi.utu.ville.exercises.model.SubmissionType; /** * <p> * A mutable implementor for the {@link ExecutionState} -interface. * </p> * <p> * This class is useful for keeping track of the current execution-state. * </p> * <p> * Changing some of the variables of this class does not trigger any event in itself, but the user of this class must inform registered listeners at an * appropriate time about the changes by calling their {@link ExecutionStateChangeListener #actOnStateChange(ExecutionState)} -methods with this object (or any * other implementor of {@link ExecutionState} derived from it) as an argument. * </p> * * @author Riku Haavisto * */ public class MutableExecutionState implements ExecutionState { /** * */ private static final long serialVersionUID = -5926781775292208999L; private boolean canReset; private boolean canSubmit; private boolean menuEnabled; private boolean resetShown; private boolean submitShown; private boolean hasUnsubmittedChanges; private boolean hasUnsubmittedGeogebraChanges; /** * Constructs a new {@link MutableExecutionState} with default values. */ public MutableExecutionState() { canReset = true; canSubmit = true; menuEnabled = true; submitShown = true; resetShown = true; hasUnsubmittedChanges = false; hasUnsubmittedGeogebraChanges = false; } /** * Constructs a new {@link MutableExecutionState} with given values. * * @param canReset * initial value of allowing reset * @param canSubmit * initial value of allowing submit * @param resetShown * initial value of whether reset-button is shown * @param submitShown * initial value of whether submit-button is shown * @param menuEnabled * initial value of whether navigation menu is shown * @param hasUnsubmittedChanges * initial value of whether there are unsubmitted changes in the exercise (usually false) */ public MutableExecutionState(boolean canReset, boolean canSubmit, boolean resetShown, boolean submitShown, boolean menuEnabled, boolean hasUnsubmittedChanges) { this.canReset = canReset; this.canSubmit = canSubmit; this.menuEnabled = menuEnabled; this.submitShown = submitShown; this.resetShown = resetShown; this.hasUnsubmittedChanges = hasUnsubmittedChanges; } @Override public boolean isResetShown() { return resetShown; } @Override public boolean isSubmitShown() { return submitShown; } @Override public boolean isAllowReset() { return canReset; } @Override public boolean isAllowSubmit() { return canSubmit; } @Override public boolean isMenuEnabled() { return menuEnabled; } /** * @param canReset * the canReset to set */ public void setCanReset(boolean canReset) { this.canReset = canReset; } /** * @param canSubmit * the canSubmit to set */ public void setCanSubmit(boolean canSubmit) { this.canSubmit = canSubmit; } /** * @param menuEnabled * the menuEnabled to set */ public void setMenuEnabled(boolean menuEnabled) { this.menuEnabled = menuEnabled; } /** * @param resetShown * the resetShown to set */ public void setResetShown(boolean resetShown) { this.resetShown = resetShown; } /** * @param submitShown * the submitShown to set */ public void setSubmitShown(boolean submitShown) { this.submitShown = submitShown; } @Override public boolean hasUnsubmittedChanges() { return hasUnsubmittedChanges; } /** * <p> * Clears the 'hasUnsubmittedChanges'-flag. * </p> * <p> * Should only be called after making a submission with such a {@link SubmissionType} that returns <b>false</b> from * {@link SubmissionType #isOnlyForSavingState()}-method. * </p> */ public void clearUnSubmChangesFlag() { hasUnsubmittedChanges = false; } /** * <p> * Sets the 'hasUnsubmittedChanges'-flag. * </p> * <p> * This method should be called after any change the user has made to the state of the {@link Executor} regardless of whether the flag is already set or * not. * </p> * </p> */ public void setUnSubmChangesFlag() { hasUnsubmittedChanges = true; } @Override public boolean hasUnsubmittedGeogebraChanges() { return hasUnsubmittedGeogebraChanges; } public void clearUnSubmGeogebraChangesFlag() { hasUnsubmittedGeogebraChanges = false; } public void setUnSubmGeogebraChangesFlag() { hasUnsubmittedGeogebraChanges = true; } }