From 979da6e713ca7ac9300c7bed13584fae41de2d06 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sun, 19 Aug 2012 14:49:16 +0100 Subject: No more null errors from corrupt config.yml's. --- EssentialsGroupManager/src/Changelog.txt | 3 +- .../anjocaido/groupmanager/GMConfiguration.java | 94 +++++++++++++++------- 2 files changed, 67 insertions(+), 30 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 498537647..2f535277b 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -193,4 +193,5 @@ v 2.0: - Fix a cases sensitivity bug in world loading. - Stop using the YamlConfiguration in bukkit for our config handling. We can now support periods in world names. - Fix GlobalGroups not loading permission nodes. - - Fix an error with Logging set to 'OFF' triggering a cast exception. \ No newline at end of file + - Fix an error with Logging set to 'OFF' triggering a cast exception. + - No more null errors from corrupt config.yml's. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java index fcc018d17..95fd35eb0 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java @@ -7,6 +7,7 @@ package org.anjocaido.groupmanager; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import java.util.logging.Level; @@ -21,10 +22,10 @@ import org.yaml.snakeyaml.reader.UnicodeReader; */ public class GMConfiguration { - private boolean opOverride; - private boolean toggleValidate; - private Integer saveInterval; - private Integer backupDuration; + private boolean opOverride = true; + private boolean toggleValidate = true; + private Integer saveInterval = 10; + private Integer backupDuration = 24; private String loggerLevel = "OFF"; private Map mirrorsMap; @@ -35,6 +36,16 @@ public class GMConfiguration { public GMConfiguration(GroupManager plugin) { this.plugin = plugin; + + /* + * Set defaults + */ + opOverride = true; + toggleValidate = true; + saveInterval = 10; + backupDuration = 24; + loggerLevel = "OFF"; + load(); } @@ -44,14 +55,14 @@ public class GMConfiguration { if (!plugin.getDataFolder().exists()) { plugin.getDataFolder().mkdirs(); } - + File configFile = new File(plugin.getDataFolder(), "config.yml"); if (!configFile.exists()) { try { Tasks.copy(plugin.getResourceAsStream("config.yml"), configFile); } catch (IOException ex) { - GroupManager.logger.log(Level.SEVERE, null, ex); + GroupManager.logger.log(Level.SEVERE, "Error creating a new config.yml", ex); } } @@ -61,7 +72,7 @@ public class GMConfiguration { FileInputStream configInputStream = new FileInputStream(configFile); GMconfig = (Map) configYAML.load(new UnicodeReader(configInputStream)); configInputStream.close(); - + } catch (Exception ex) { throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex); } @@ -69,28 +80,53 @@ public class GMConfiguration { /* * Read our config settings ands store them for reading later. */ - Map config = getElement("config", getElement("settings", GMconfig)); - - opOverride = (Boolean) config.get("opOverrides"); - toggleValidate = (Boolean) config.get("validate_toggle"); - - /* - * data node for save/backup timers. - */ - Map save = getElement("save", getElement("data", getElement("settings", GMconfig))); - - saveInterval = (Integer) save.get("minutes"); - backupDuration = (Integer) save.get("hours"); - - Object level = ((Map) getElement("settings", GMconfig).get("logging")).get("level"); - if (level instanceof String) - level = (String) level; - - /* - * Store our mirrors map for parsing later. - */ - mirrorsMap = (Map) ((Map) GMconfig.get("settings")).get("mirrors"); - + try { + Map config = getElement("config", getElement("settings", GMconfig)); + + opOverride = (Boolean) config.get("opOverrides"); + toggleValidate = (Boolean) config.get("validate_toggle"); + + /* + * data node for save/backup timers. + */ + try { + Map save = getElement("save", getElement("data", getElement("settings", GMconfig))); + + try { + saveInterval = (Integer) save.get("minutes"); + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'minutes' node. Using default setting", ex); + } + + try { + backupDuration = (Integer) save.get("hours"); + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'hours' node. Using default setting", ex); + } + + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'data' node. Using default settings", ex); + } + + + + Object level = ((Map) getElement("settings", GMconfig).get("logging")).get("level"); + if (level instanceof String) + level = (String) level; + + /* + * Store our mirrors map for parsing later. + */ + mirrorsMap = (Map) ((Map) GMconfig.get("settings")).get("mirrors"); + + } catch (Exception ex) { + /* + * Flag the error and use defaults + */ + GroupManager.logger.log(Level.SEVERE, "There are errors in your config.yml. Using default settings", ex); + + mirrorsMap = new HashMap(); + } // Setup defaults adjustLoggerLevel(); plugin.setValidateOnlinePlayer(isToggleValidate()); -- cgit v1.2.3