package com.limegroup.gnutella.settings; import java.io.File; import java.util.Iterator; import java.util.Properties; import com.limegroup.gnutella.util.CommonUtils; /** * Abstract Settings class that all settings classes should extend. * Provides basic functionality for all settings classes. */ public abstract class AbstractSettings implements Settings { /** * properties file */ private final File PROPS_FILE; /** * Constant for the <tt>SettingsFactory</tt> that subclasses can use * to create new settings which will be stored in the properties file. */ private final SettingsFactory FACTORY; /** * Value for whether or not settings should be saved to file. */ private boolean _shouldSave = true; /** * Basic constructor that creates the FACTORY and PROPS_FILE. */ protected AbstractSettings(String fileName, String header) { File settingsDir = CommonUtils.getUserSettingsDir(); PROPS_FILE = new File(settingsDir, fileName); FACTORY = new SettingsFactory(PROPS_FILE, header); SettingsHandler.addSettings(this); } /** * Accessor for the <tt>Properties</tt> instance that stores all settings. * * @return the <tt>Properties</tt> instance for storing settings */ public Properties getProperties() { return FACTORY.getProperties(); } /** * Accessor for the <tt>File</tt> instance taht stores all properties */ public File getPropertiesFile() { return PROPS_FILE; } /** * Accessor for the <tt>SettingsFactory</tt> instance that stores the properties. */ public SettingsFactory getFactory() { return FACTORY; } /** * reload settings from both the property and configuration files */ public void reload() { FACTORY.reload(); } /** * Save property settings to the property file */ public void save() { if ( _shouldSave) { FACTORY.save(); } } /** * Revert all settings to their default value */ public void revertToDefault() { FACTORY.revertToDefault(); } /** * Mutator for shouldSave */ public void setShouldSave(boolean shouldSave) { _shouldSave = shouldSave; } /** * Access for shouldSave */ public boolean getShouldSave() { return _shouldSave; } /** * Used to find any setting based on the key in the appropriate props file */ public Setting getSetting(String key) { synchronized(FACTORY) { Iterator iter = FACTORY.iterator(); while(iter.hasNext()) { Setting currSetting = (Setting)iter.next(); if(currSetting.getKey().equals(key)) return currSetting; } } return null; //unable the find the setting we are looking for } /** * Delegates the lookup for the setting based on simppkey to the factory * which is keeping track of simpp settings as they are being loaded. * <p> * If this method returns null it means that the Factory has not loaded the * setting yet. In this case the caller of this method will have to handle * it by forcing that setting to be loaded. */ public Setting getSimppSetting(String simppKey) { return FACTORY.getSettingForSimppKey(simppKey); } }