From 4c3eef85147a438873bf17fadf7c8b4e90588f6a Mon Sep 17 00:00:00 2001 From: snowleo Date: Wed, 26 Oct 2011 19:46:40 +0200 Subject: Abort the installation wizard if a runtime exception happens --- .../essentials/update/states/AbstractState.java | 32 ++++++++++++-------- .../essentials/update/states/StateMachine.java | 34 +++++++++++++++------- 2 files changed, 43 insertions(+), 23 deletions(-) (limited to 'EssentialsUpdate') diff --git a/EssentialsUpdate/src/com/earth2me/essentials/update/states/AbstractState.java b/EssentialsUpdate/src/com/earth2me/essentials/update/states/AbstractState.java index 3f0c4c233..6d2613a40 100644 --- a/EssentialsUpdate/src/com/earth2me/essentials/update/states/AbstractState.java +++ b/EssentialsUpdate/src/com/earth2me/essentials/update/states/AbstractState.java @@ -8,12 +8,12 @@ public abstract class AbstractState { private transient boolean abortion = false; private final transient StateMap stateMap; - + public AbstractState(final StateMap stateMap) { this.stateMap = stateMap; } - + public T getState(final Class stateClass) { if (!stateMap.containsKey(stateClass)) @@ -35,7 +35,7 @@ public abstract class AbstractState } return (T)stateMap.get(stateClass); } - + public abstract AbstractState getNextState(); /** @@ -60,7 +60,7 @@ public abstract class AbstractState * @return true, if the answer could be recognized as a valid answer */ public abstract boolean reactOnAnswer(String answer); - + public final AbstractState reactOnAnswer(final Player sender, final String answer) { final String trimmedAnswer = answer.trim(); @@ -71,16 +71,24 @@ public abstract class AbstractState abort(); return null; } - final boolean found = reactOnAnswer(trimmedAnswer); - if (found) + try { - return getNextState(); + final boolean found = reactOnAnswer(trimmedAnswer); + if (found) + { + return getNextState(); + } + else + { + sender.sendMessage("Answer not recognized."); + return this; + } } - else + catch (RuntimeException ex) { - sender.sendMessage("Answer not recognized."); + sender.sendMessage(ex.toString()); return this; - } + } } /** @@ -90,12 +98,12 @@ public abstract class AbstractState { listener.onWorkDone(); } - + public boolean isAbortion() { return abortion; } - + protected void abort() { abortion = true; diff --git a/EssentialsUpdate/src/com/earth2me/essentials/update/states/StateMachine.java b/EssentialsUpdate/src/com/earth2me/essentials/update/states/StateMachine.java index 9a9c64134..17f6502fb 100644 --- a/EssentialsUpdate/src/com/earth2me/essentials/update/states/StateMachine.java +++ b/EssentialsUpdate/src/com/earth2me/essentials/update/states/StateMachine.java @@ -33,22 +33,33 @@ public class StateMachine extends WorkListener public MachineResult askQuestion() { - while (current.guessAnswer()) + try { - current = current.getNextState(); - if (current == null) + while (current.guessAnswer()) { - result = MachineResult.DONE; - break; + + current = current.getNextState(); + if (current == null) + { + result = MachineResult.DONE; + break; + } + } - } - if (current != null) - { - if (player.isOnline()) + if (current != null) { - current.askQuestion(player); + if (player.isOnline()) + { + current.askQuestion(player); + } + result = MachineResult.WAIT; } - result = MachineResult.WAIT; + } + catch (RuntimeException ex) + { + player.sendMessage(ex.getMessage()); + finish(); + result = MachineResult.ABORT; } return result; } @@ -135,6 +146,7 @@ public class StateMachine extends WorkListener private void finish() { + current = null; iterator = null; states.clear(); getPlugin().getServer().getPluginManager().callEvent(new InstallationFinishedEvent()); -- cgit v1.2.3