/*
* File : COConfigurationManager.java
* Created : 5 Oct. 2003
* By : Parg
*
* Azureus - a Java Bittorrent client
*
* 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.
*
* 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 ( see the LICENSE file ).
*
* 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
*/
package org.gudy.azureus2.core3.config;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.io.IOException;
import java.net.URL;
import org.gudy.azureus2.core3.config.impl.*;
import org.gudy.azureus2.core3.util.Constants;
//import org.gudy.azureus2.core3.util.SystemProperties;
//import org.gudy.azureus2.core3.util.protocol.AzURLStreamHandlerFactory;
public class
COConfigurationManager
{
public static final int CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED = 5;
public static final int CONFIG_DEFAULT_MAX_DOWNLOAD_SPEED = 0;
public static final int CONFIG_DEFAULT_MAX_CONNECTIONS_PER_TORRENT = 50;
public static final int CONFIG_DEFAULT_MAX_CONNECTIONS_GLOBAL = 250;
public static final int CONFIG_CACHE_SIZE_MAX_MB;
static{
long max_mem_bytes = Runtime.getRuntime().maxMemory();
long mb_1 = 1*1024*1024;
long mb_32 = 32*mb_1;
int size = (int)(( max_mem_bytes - mb_32 )/mb_1);
if( size > 1024 ) size = 1024; //safety check
if( size < 1 ) size = 1;
CONFIG_CACHE_SIZE_MAX_MB = size;
}
public static final boolean ENABLE_MULTIPLE_UDP_PORTS = false;
private static boolean pre_initialised;
public static synchronized void
preInitialise()
{
if ( !pre_initialised ){
pre_initialised = true;
try{
/*
String handlers = System.getProperty( "java.protocol.handler.pkgs" );
if ( handlers == null ){
handlers = "org.gudy.azureus2.core3.util.protocol";
}else{
handlers += "|org.gudy.azureus2.core3.util.protocol";
}
System.setProperty( "java.protocol.handler.pkgs", handlers );
*/
// URL.setURLStreamHandlerFactory(new AzURLStreamHandlerFactory());
// DNS cache timeouts
System.setProperty("sun.net.inetaddr.ttl", "60");
System.setProperty("networkaddress.cache.ttl", "60");
// flick AWT into headless mode, which is supposed to make it more lightweight
// don't do this as it borks (for example) swing based plugins, java webstart installer,
// swing webui plugin, ....
// System.setProperty("java.awt.headless", "true");
// defaults, overridden later if needed
System.setProperty( "sun.net.client.defaultConnectTimeout", "120000" );
System.setProperty( "sun.net.client.defaultReadTimeout", "60000" );
//see http://developer.apple.com/releasenotes/Java/Java142RN/ResolvedIssues/chapter_3_section_7.html
//fixes the osx kernel panic bug caused by Apple's faulty kqueue implementation (as of 10.3.6)
if( Constants.isOSX ) {
// things seem good in 10.6
//if ( !Constants.isOSX_10_6_OrHigher ){
System.setProperty( "java.nio.preferSelect", "true" );
//}
}
// SystemProperties.determineApplicationName();
}catch( Throwable e ){
// can happen in applet
e.printStackTrace();
}
}
}
public static ConfigurationManager
initialise()
{
preInitialise();
return ConfigurationManager.getInstance();
}
public static ConfigurationManager
initialiseFromMap(
Map data )
{
preInitialise();
return ConfigurationManager.getInstance(data);
}
public static final boolean
isNewInstall()
{
return( ConfigurationManager.getInstance().isNewInstall());
}
public static String
getStringParameter(
String _name )
{
return( ConfigurationManager.getInstance().getStringParameter( _name ));
}
public static String
getStringParameter(
String _name,
String _default )
{
return( ConfigurationManager.getInstance().getStringParameter( _name, _default ));
}
public static boolean
setParameter(String parameter, String value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static boolean
verifyParameter(String parameter, String value)
{
return ConfigurationManager.getInstance().verifyParameter( parameter, value );
}
public static boolean
getBooleanParameter(
String _name )
{
return( ConfigurationManager.getInstance().getBooleanParameter( _name ));
}
/**
* @deprecated You should set ConfigurationDefaults, and use {@link #getBooleanParameter(String)}
*/
public static boolean
getBooleanParameter(
String _name,
boolean _default )
{
return( ConfigurationManager.getInstance().getBooleanParameter( _name, _default ));
}
public static boolean
setParameter(String parameter, boolean value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static int
getIntParameter(
String _name )
{
return( ConfigurationManager.getInstance().getIntParameter( _name ));
}
/**
* Only use this for internal values, NOT for ones that the user can sensibly change. In this
* case add the key to the configuration defaults and use the above method
* @param _name
* @param _def
* @return
*/
public static int
getIntParameter(
String _name,
int _default )
{
return( ConfigurationManager.getInstance().getIntParameter( _name, _default ));
}
public static boolean
setParameter(String parameter, int value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static boolean
setParameter(String parameter, long value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static long
getLongParameter(
String _name )
{
return( ConfigurationManager.getInstance().getLongParameter( _name ));
}
/**
* Only use this for internal values, NOT for ones that the user can sensibly change. In this
* case add the key to the configuration defaults and use the above method
* @param _name
* @param _def
* @return
*/
public static long
getLongParameter(
String _name,
long _def )
{
return( ConfigurationManager.getInstance().getLongParameter( _name, _def ));
}
public static byte[] getByteParameter(String _name) {
return( ConfigurationManager.getInstance().getByteParameter(_name));
}
public static byte[]
getByteParameter(
String _name,
byte[] _default )
{
return( ConfigurationManager.getInstance().getByteParameter( _name, _default ));
}
public static boolean
setParameter(String parameter, byte[] value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static String
getDirectoryParameter(
String _name )
throws IOException
{
return( ConfigurationManager.getInstance().getDirectoryParameter( _name ));
}
/*
public static boolean
setParameter(String parameter, Color value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static boolean
setParameter(String parameter, RGB value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
*/
public static boolean
setRGBParameter(String parameter, int red, int green, int blue)
{
return ConfigurationManager.getInstance().setRGBParameter( parameter, red, green, blue);
}
public static boolean setRGBParameter(String parameter, int[] rgb, boolean override) {
return ConfigurationManager.getInstance().setRGBParameter(parameter, rgb, override);
}
public static float
getFloatParameter(
String _name)
{
return( ConfigurationManager.getInstance().getFloatParameter( _name ));
}
public static float
getFloatParameter(
String _name,
float _def )
{
return( ConfigurationManager.getInstance().getFloatParameter( _name, _def ));
}
public static boolean
setParameter(String parameter, float value)
{
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static boolean
setParameter(String parameter,StringList value) {
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static StringList
getStringListParameter(String parameter)
{
return( ConfigurationManager.getInstance().getStringListParameter( parameter ));
}
public static boolean
setParameter(String parameter,List value) {
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static List
getListParameter(String parameter, List def)
{
return( ConfigurationManager.getInstance().getListParameter( parameter, def ));
}
public static boolean
setParameter(String parameter,Map value) {
return ConfigurationManager.getInstance().setParameter( parameter, value );
}
public static Map
getMapParameter(String parameter, Map def)
{
return( ConfigurationManager.getInstance().getMapParameter( parameter, def ));
}
/**
* Returns true if a parameter with the given name exists.
* @param key The name of the parameter to check.
* @param explicit If <tt>true</tt>, we only check for a value which is
* definitely stored explicitly, <tt>false</tt> means that we'll also
* check against configuration defaults too.
*/
public static boolean hasParameter(String parameter, boolean explicit) {
return ConfigurationManager.getInstance().hasParameter(parameter, explicit);
}
public static void
save()
{
ConfigurationManager.getInstance().save();
}
/**
* Mark as needing a save but not immediately - use when potentially needing a large number of saves that aren't
* absolutely required to be immediately persisted
*/
public static void
setDirty()
{
ConfigurationManager.getInstance().setDirty();
}
public static void
addListener(
COConfigurationListener listener )
{
ConfigurationManager.getInstance().addListener( listener );
}
public static void
addParameterListener(String parameter, ParameterListener listener)
{
ConfigurationManager.getInstance().addParameterListener(parameter, listener);
}
/**
* @param strings
* @param parameterListener
*
* @since 3.0.1.5
*/
public static void addParameterListener(String[] ids,
ParameterListener listener) {
ConfigurationManager instance = ConfigurationManager.getInstance();
for (int i = 0; i < ids.length; i++) {
instance.addParameterListener(ids[i], listener);
}
}
public static void
addAndFireParameterListener(String parameter, ParameterListener listener)
{
ConfigurationManager.getInstance().addParameterListener(parameter, listener);
listener.parameterChanged( parameter );
}
public static void
addAndFireParameterListeners(String[] parameters, ParameterListener listener)
{
for (int i=0;i<parameters.length;i++){
ConfigurationManager.getInstance().addParameterListener(parameters[i], listener);
}
listener.parameterChanged( null );
}
public static void
removeParameterListener(String parameter, ParameterListener listener)
{
ConfigurationManager.getInstance().removeParameterListener(parameter, listener);
}
public static void
removeListener(
COConfigurationListener listener )
{
ConfigurationManager.getInstance().removeListener( listener );
}
public static Set
getAllowedParameters()
{
return ConfigurationDefaults.getInstance().getAllowedParameters();
}
public static Set
getDefinedParameters()
{
return ConfigurationManager.getInstance().getDefinedParameters();
}
/**
* raw parameter access
* @param name
* @return
*/
public static Object
getParameter(
String name )
{
return ConfigurationManager.getInstance().getParameter(name);
}
/**
* checks if a default is defined for the named parameter
* @param parameter
* @return
*/
public static boolean
doesParameterDefaultExist(
String parameter)
{
return ConfigurationDefaults.getInstance().doesParameterDefaultExist(parameter);
}
/**
* checks if the user has explicitly set a value for the named parameter
* @param parameter
* @return
*/
public static boolean
doesParameterNonDefaultExist(
String parameter)
{
return ConfigurationManager.getInstance().doesParameterNonDefaultExist(parameter);
}
public static void
registerExternalDefaults(
Map addmap)
{
ConfigurationDefaults.getInstance().registerExternalDefaults(addmap);
}
public static void
setBooleanDefault(
String parameter,
boolean _default )
{
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static void setFloatDefault(String parameter, float _default) {
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static void
setIntDefault(
String parameter,
int _default )
{
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static void
setLongDefault(
String parameter,
long _default )
{
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static void
setStringDefault(
String parameter,
String _default )
{
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static void
setByteDefault(
String parameter,
byte[] _default )
{
ConfigurationDefaults.getInstance().addParameter( parameter, _default );
}
public static Object
getDefault(
String parameter )
{
return( ConfigurationDefaults.getInstance().getParameter( parameter ));
}
public static boolean removeParameter(String parameter) {
return ConfigurationManager.getInstance().removeParameter(parameter);
}
public static boolean removeRGBParameter(String parameter) {
return ConfigurationManager.getInstance().removeRGBParameter(parameter);
}
public interface
ParameterVerifier
{
public boolean
verify(
String parameter,
Object value );
}
}