package de.oppermann.bastian.spleef.storage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; import de.oppermann.bastian.spleef.util.Validator; /** * Class to create other YAML-files than the <code>config.yml</code>. */ public class ConfigAccessor { private final String FILE_NAME; private final JavaPlugin PLUGIN; private final File DATA_FOLDER; private File configFile; private FileConfiguration fileConfiguration; /** * Class constructor. * * @param plugin The plugin. * @param fileName The name of the file. * @param dataFolder The data folder. */ public ConfigAccessor(JavaPlugin plugin, String fileName, File dataFolder) { Validator.validateNotNull(plugin, "plugin"); Validator.validateNotNull(fileName, "fileName"); this.PLUGIN = plugin; this.FILE_NAME = fileName; this.DATA_FOLDER = dataFolder; reloadConfig(); } /** * Reloads the config. * * @see JavaPlugin#reloadConfig() */ public void reloadConfig() { if (configFile == null) { File dataFolder = DATA_FOLDER; if (dataFolder == null) { dataFolder = PLUGIN.getDataFolder(); } if (dataFolder == null) { throw new IllegalStateException(); } configFile = new File(dataFolder, FILE_NAME); } fileConfiguration = YamlConfiguration.loadConfiguration(configFile); // Look for defaults in the jar InputStream defConfigStream = PLUGIN.getResource(FILE_NAME); if (defConfigStream != null) { @SuppressWarnings("deprecation") YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); fileConfiguration.setDefaults(defConfig); } } /** * Gets the {@link FileConfiguration}. * * @return The FileConfiguration. * @see JavaPlugin#getConfig() */ public FileConfiguration getConfig() { if (fileConfiguration == null) { this.reloadConfig(); } return fileConfiguration; } /** * Saves the config. * * @see JavaPlugin#saveConfig() */ public void saveConfig() { if (fileConfiguration == null || configFile == null) { return; } else { try { getConfig().save(configFile); } catch (IOException ex) { PLUGIN.getLogger().log(Level.SEVERE, "Could not save config to " + configFile, ex); } } } /** * Saves the default config. * * @see JavaPlugin#saveDefaultConfig() */ public void saveDefaultConfig() { if (!configFile.exists()) { this.PLUGIN.saveResource(FILE_NAME, false); } } /** * Gets the File. */ public File getFile() { return configFile; } }