/* * To change this template, choose Tools | Templates * and open the template in the editor. */ 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; import org.anjocaido.groupmanager.utils.Tasks; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.reader.UnicodeReader; /** * * @author gabrielcouto */ public class GMConfiguration { private boolean allowCommandBlocks = false; private boolean opOverride = true; private boolean toggleValidate = true; private Integer saveInterval = 10; private Integer backupDuration = 24; private String loggerLevel = "OFF"; private Map mirrorsMap; private final GroupManager plugin; private Map GMconfig; public GMConfiguration(final GroupManager plugin) { this.plugin = plugin; /* * Set defaults */ allowCommandBlocks = false; opOverride = true; toggleValidate = true; saveInterval = 10; backupDuration = 24; loggerLevel = "OFF"; load(); } public void adjustLoggerLevel() { try { GroupManager.logger.setLevel(Level.parse(loggerLevel)); return; } catch (final Exception e) { } GroupManager.logger.setLevel(Level.INFO); } public Integer getBackupDuration() { return backupDuration; } public Map getMirrorsMap() { if (!mirrorsMap.isEmpty()) { return mirrorsMap; } return null; } public Integer getSaveInterval() { return saveInterval; } public boolean isAllowCommandBlocks() { return allowCommandBlocks; } public boolean isOpOverride() { return opOverride; } public boolean isToggleValidate() { return toggleValidate; } @SuppressWarnings("unchecked") public void load() { if (!plugin.getDataFolder().exists()) { plugin.getDataFolder().mkdirs(); } final File configFile = new File(plugin.getDataFolder(), "config.yml"); if (!configFile.exists()) { try { Tasks.copy(plugin.getResourceAsStream("config.yml"), configFile); } catch (final IOException ex) { GroupManager.logger.log(Level.SEVERE, "Error creating a new config.yml", ex); } } final Yaml configYAML = new Yaml(new SafeConstructor()); try { final FileInputStream configInputStream = new FileInputStream(configFile); GMconfig = (Map) configYAML.load(new UnicodeReader(configInputStream)); configInputStream.close(); } catch (final Exception ex) { throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex); } /* * Read our config settings and store them for reading later. */ try { final Map config = getElement("config", getElement("settings", GMconfig)); try { allowCommandBlocks = (Boolean) config.get("allow_commandblocks"); } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'allow_commandblocks' node. Using default settings", ex); } try { opOverride = (Boolean) config.get("opOverrides"); } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'opOverrides' node. Using default settings", ex); } try { toggleValidate = (Boolean) config.get("validate_toggle"); } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'validate_toggle' node. Using default settings", ex); } /* * data node for save/backup timers. */ try { final Map save = getElement("save", getElement("data", getElement("settings", GMconfig))); try { saveInterval = (Integer) save.get("minutes"); } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'minutes' node. Using default setting", ex); } try { backupDuration = (Integer) save.get("hours"); } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'hours' node. Using default setting", ex); } } catch (final Exception ex) { GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'data' node. Using default settings", ex); } final Object level = ((Map) getElement("settings", GMconfig).get("logging")).get("level"); if (level instanceof String) loggerLevel = (String) level; /* * Store our mirrors map for parsing later. */ mirrorsMap = (Map) ((Map) GMconfig.get("settings")).get("mirrors"); if (mirrorsMap == null) throw new Exception(); } catch (final 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()); } @SuppressWarnings("unchecked") private Map getElement(final String element, final Map map) { if (!map.containsKey(element)) { throw new IllegalArgumentException("The config.yml has no '" + element + ".\n"); } return (Map) map.get(element); } }