package net.mms_projects.copy_it; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Config { private Properties defaults = new Properties(); private Properties properties; private FileStreamBuilder fileStreamBuider; private Map<String, List<SettingsListener>> listeners = new HashMap<String, List<SettingsListener>>(); private final Logger log = LoggerFactory.getLogger(this.getClass()); public Config() { this.defaults.setProperty("server.baseurl", "http://copyit.dev.mms-projects.net"); this.properties = new Properties(defaults); } public void addListener(String key, SettingsListener listener) { if (!this.listeners.containsKey(key)) { this.listeners.put(key, new ArrayList<SettingsListener>()); } this.listeners.get(key).add(listener); } public void setFileStreamBuilder(FileStreamBuilder fileStreamBuilder) { this.fileStreamBuider = fileStreamBuilder; } public void set(String key, String value) { log.debug("Setting {} changed to {}", key, value); this.properties.setProperty(key, value); saveProperties(); this.notifyChangeListeners(key, value); } public void set(String key, boolean value) { this.set(key, Boolean.toString(value)); } public String get(String key) { return this.properties.getProperty(key); } public boolean getBoolean(String key) { return Boolean.parseBoolean(this.get(key)); } public void loadProperties() { log.info("Loading settings..."); BufferedInputStream stream; try { stream = new BufferedInputStream( this.fileStreamBuider.getInputStream()); this.properties.load(stream); stream.close(); } catch (IOException e) { // something went wrong with the stream e.printStackTrace(); } } public void saveProperties() { log.info("Saving settings..."); try { this.properties.store(new BufferedOutputStream( this.fileStreamBuider.getOutputStream()), ""); } catch (IOException e) { // something went wrong with the stream e.printStackTrace(); } } private void notifyChangeListeners(String key, String value) { if (!this.listeners.containsKey(key)) { return; } for (SettingsListener listener : this.listeners.get(key)) { listener.onChange(key, value); } } }