/* * Created on Nov 15, 2004 * * This file is part of susimail project, see http://susi.i2p/ * * Copyright (C) 2004-2005 <susi23@mail.i2p> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Revision: 1.4 $ */ package i2p.susi.util; import i2p.susi.debug.Debug; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.util.Map; import java.util.Properties; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.util.OrderedProperties; /** * Warning - static - not for use by multiple applications or prefixes * * @author susi */ public class Config { private static Properties properties, config; private static String configPrefix; /** * * @param name */ public synchronized static String getProperty( String name ) { if( configPrefix != null ) name = configPrefix + name; String result = null; if( properties == null ) { reloadConfiguration(); } result = System.getProperty( name ); if( result != null ) return result; if( config != null ) { result = config.getProperty( name ); if( result != null ) return result; } result = properties.getProperty( name ); return result; } /** * Don't bother showing a reload config button if this returns false. * @since 0.9.13 */ public synchronized static boolean hasConfigFile() { File cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), "susimail.config"); return cfg.exists(); } /** * * */ public synchronized static void reloadConfiguration() { // DEBUG level logging won't work here since we haven't loaded the config yet... properties = new Properties(); InputStream iv = null; try { iv = Config.class.getResourceAsStream("/susimail.properties"); properties.load(iv); } catch (IOException e) { Debug.debug(Debug.ERROR, "Could not open WEB-INF/classes/susimail.properties (possibly in jar), reason: " + e); } finally { if(iv != null) try { iv.close(); } catch(IOException ioe) {} } try { File cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), "susimail.config"); if (cfg.exists()) { config = new OrderedProperties(); DataHelper.loadProps(config, cfg); } } catch (IOException e) { Debug.debug(Debug.ERROR, "Could not open susimail.config, reason: " + e); } } /** * Returns the properties, sorted, WITHOUT the prefix * * @since 0.9.13 */ public synchronized static Properties getProperties() { Properties rv = new OrderedProperties(); if (properties != null) { if (configPrefix == null) { rv.putAll(properties); } else { for (Map.Entry<Object, Object> e : properties.entrySet()) { String k = (String) e.getKey(); if (k.startsWith(configPrefix)) rv.put(k.substring(configPrefix.length()), e.getValue()); } } } if (config != null) { if (configPrefix == null) { rv.putAll(config); } else { for (Map.Entry<Object, Object> e : config.entrySet()) { String k = (String) e.getKey(); if (k.startsWith(configPrefix)) rv.put(k.substring(configPrefix.length()), e.getValue()); } } } return rv; } /** * Saves the properties. A property not in newProps will be removed but * will not override the default in the resource. * * @param newProps non-null WITHOUT the prefix * @since 0.9.13 */ public synchronized static void saveConfiguration(Properties newProps) throws IOException { Properties toSave = new OrderedProperties(); for (Map.Entry<Object, Object> e : newProps.entrySet()) { Object k = e.getKey(); if (configPrefix != null) k = configPrefix + k; toSave.put(k, e.getValue()); } config = toSave; File cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), "susimail.config"); DataHelper.storeProps(toSave, cfg); } /** * * @param name * @param defaultValue */ public synchronized static String getProperty( String name, String defaultValue ) { String result = getProperty( name ); return result != null ? result : defaultValue; } /** * * @param name * @param defaultValue */ public synchronized static int getProperty( String name, int defaultValue ) { int result = defaultValue; String str = getProperty( name ); if( str != null ) { try { result = Integer.parseInt( str ); } catch( NumberFormatException nfe ) { result = defaultValue; } } return result; } /** * Static! Not for use by multiple applications! * @param prefix */ public synchronized static void setPrefix( String prefix ) { configPrefix = prefix.endsWith( "." ) ? prefix : prefix + "."; } }