/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.config; import java.io.IOException; import java.util.LinkedHashMap; import freenet.support.Logger; /** Global configuration object for a node. SubConfig's register here. * Handles writing to a file etc. */ public class Config { public static enum RequestType { CURRENT_SETTINGS, DEFAULT_SETTINGS, SORT_ORDER, EXPERT_FLAG, FORCE_WRITE_FLAG, SHORT_DESCRIPTION, LONG_DESCRIPTION, DATA_TYPE }; protected final LinkedHashMap<String, SubConfig> configsByPrefix; public Config() { configsByPrefix = new LinkedHashMap<String, SubConfig>(); } public void register(SubConfig sc) { synchronized(this) { if(configsByPrefix.containsKey(sc.prefix)) throw new IllegalArgumentException("Already registered "+sc.prefix+": "+sc); configsByPrefix.put(sc.prefix, sc); } } /** Write current config to disk * @throws IOException */ public void store() { // Do nothing } /** Finished initialization */ public void finishedInit() { SubConfig[] configs; synchronized(this) { // FIXME maybe keep a cache of this? configs = configsByPrefix.values().toArray(new SubConfig[configsByPrefix.size()]); } for(SubConfig config : configs) { if(!config.hasFinishedInitialization()) Logger.error(this, "Not finished initialization: "+config.prefix); } } public void onRegister(SubConfig config, Option<?> o) { // Do nothing } /** Fetch all the SubConfig's. Used by user-facing config thingies. */ public synchronized SubConfig[] getConfigs() { return configsByPrefix.values().toArray(new SubConfig[configsByPrefix.size()]); } public synchronized SubConfig get(String subConfig){ return configsByPrefix.get(subConfig); } @SuppressWarnings("deprecation") public SubConfig createSubConfig(String subConfig) { return new SubConfig(subConfig, this); } }