From 2a93b06248bc852307e652e869e57c6e17bce054 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Sun, 6 Jan 2013 23:05:04 +0100 Subject: [PATCH] Load and store two separate states. --- .../pterodactylus/reactor/states/StateManager.java | 63 ++++++++++++++++------ 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/pterodactylus/reactor/states/StateManager.java b/src/main/java/net/pterodactylus/reactor/states/StateManager.java index d9d6d56..8046153 100644 --- a/src/main/java/net/pterodactylus/reactor/states/StateManager.java +++ b/src/main/java/net/pterodactylus/reactor/states/StateManager.java @@ -68,18 +68,19 @@ public class StateManager { * loaded */ public State loadLastState(String reactionName) { - File stateFile = stateFile(reactionName); - try { - State state = objectMapper.readValue(stateFile, AbstractState.class); - return state; - } catch (JsonParseException jpe1) { - logger.warn(String.format("State for Reaction “%s” could not be parsed.", reactionName), jpe1); - } catch (JsonMappingException jme1) { - logger.warn(String.format("State for Reaction “%s” could not be parsed.", reactionName), jme1); - } catch (IOException ioe1) { - logger.info(String.format("State for Reaction “%s” could not be found.", reactionName)); - } - return null; + return loadLastState(reactionName, false); + } + + /** + * Loads the last state with the given name. + * + * @param reactionName + * The name of the reaction + * @return The loaded state, or {@code null} if the state could not be + * loaded + */ + public State loadLastSuccessfulState(String reactionName) { + return loadLastState(reactionName, true); } /** @@ -92,8 +93,12 @@ public class StateManager { */ public void saveState(String reactionName, State state) { try { - File stateFile = stateFile(reactionName); + File stateFile = stateFile(reactionName, "last"); objectMapper.writeValue(stateFile, state); + if (state.success()) { + stateFile = stateFile(reactionName, "success"); + objectMapper.writeValue(stateFile, state); + } } catch (JsonGenerationException jge1) { logger.warn(String.format("State for Reaction “%s” could not be generated.", reactionName), jge1); } catch (JsonMappingException jme1) { @@ -112,10 +117,38 @@ public class StateManager { * * @param reactionName * The name of the reaction + * @param suffix + * An additional suffix (may be {@code null} * @return The file for the state */ - private File stateFile(String reactionName) { - return new File(directory, reactionName + ".json"); + private File stateFile(String reactionName, String suffix) { + return new File(directory, reactionName + ((suffix != null) ? "." + suffix : "") + ".json"); + } + + /** + * Load the given state for the reaction with the given name. + * + * @param reactionName + * The name of the reaction + * @param successful + * {@code true} to load the last successful state, {@code false} + * to load the last state + * @return The loaded state, or {@code null} if the state could not be + * loaded + */ + private State loadLastState(String reactionName, boolean successful) { + File stateFile = stateFile(reactionName, successful ? "success" : "last"); + try { + State state = objectMapper.readValue(stateFile, AbstractState.class); + return state; + } catch (JsonParseException jpe1) { + logger.warn(String.format("State for Reaction “%s” could not be parsed.", reactionName), jpe1); + } catch (JsonMappingException jme1) { + logger.warn(String.format("State for Reaction “%s” could not be parsed.", reactionName), jme1); + } catch (IOException ioe1) { + logger.info(String.format("State for Reaction “%s” could not be found.", reactionName)); + } + return null; } } -- 2.7.4