/*
* File : PluginConfigImpl.java
* Created : 10 nov. 2003
* By : epall
*
* 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.pluginsimpl.local;
import java.io.File;
import java.util.*;
import org.gudy.azureus2.core3.config.*;
import org.gudy.azureus2.core3.config.impl.*;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.FileUtil;
import org.gudy.azureus2.plugins.PluginConfig;
import org.gudy.azureus2.plugins.PluginConfigListener;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.config.ConfigParameter;
import org.gudy.azureus2.plugins.config.PluginConfigSource;
import org.gudy.azureus2.pluginsimpl.local.config.*;
import com.aelitis.net.magneturi.MagnetURIHandler;
public class
PluginConfigImpl
implements PluginConfig
{
protected static Map<String,String> external_to_internal_key_map = new HashMap<String,String>();
private PluginConfigSourceImpl external_source = null;
static{
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_UPLOAD_SPEED_KBYTES_PER_SEC, CORE_PARAM_INT_MAX_UPLOAD_SPEED_KBYTES_PER_SEC );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_UPLOAD_SPEED_SEEDING_KBYTES_PER_SEC, "Max Upload Speed Seeding KBs" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_DOWNLOAD_SPEED_KBYTES_PER_SEC, CORE_PARAM_INT_MAX_DOWNLOAD_SPEED_KBYTES_PER_SEC );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_CONNECTIONS_GLOBAL, "Max.Peer.Connections.Total" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_CONNECTIONS_PER_TORRENT, "Max.Peer.Connections.Per.Torrent" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_DOWNLOADS, "max downloads" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_ACTIVE, "max active torrents" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_ACTIVE_SEEDING, "StartStopManager_iMaxActiveTorrentsWhenSeeding" );
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_UPLOADS, "Max Uploads");
external_to_internal_key_map.put( CORE_PARAM_INT_MAX_UPLOADS_SEEDING, "Max Uploads Seeding");
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_MAX_UPLOAD_SPEED_SEEDING, "enable.seedingonly.upload.rate");
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_MAX_ACTIVE_SEEDING, "StartStopManager_bMaxActiveTorrentsWhenSeedingEnabled");
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_AUTO_SPEED_ON, CORE_PARAM_BOOLEAN_AUTO_SPEED_ON);
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_AUTO_SPEED_SEEDING_ON, CORE_PARAM_BOOLEAN_AUTO_SPEED_SEEDING_ON );
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_SOCKS_PROXY_NO_INWARD_CONNECTION, "Proxy.Data.SOCKS.inform" );
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_NEW_SEEDS_START_AT_TOP, CORE_PARAM_BOOLEAN_NEW_SEEDS_START_AT_TOP );
external_to_internal_key_map.put( CORE_PARAM_STRING_LOCAL_BIND_IP, "Bind IP" );
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_FRIENDLY_HASH_CHECKING, "diskmanager.friendly.hashchecking" );
external_to_internal_key_map.put( GUI_PARAM_INT_SWT_REFRESH_IN_MS, "GUI Refresh");
external_to_internal_key_map.put( CORE_PARAM_BOOLEAN_NEW_TORRENTS_START_AS_STOPPED, "Default Start Torrents Stopped");
external_to_internal_key_map.put( CORE_PARAM_INT_INCOMING_TCP_PORT, "TCP.Listen.Port");
external_to_internal_key_map.put( CORE_PARAM_INT_INCOMING_UDP_PORT, "UDP.Listen.Port");
external_to_internal_key_map.put( CORE_PARAM_STRING_DEFAULT_SAVE_PATH, "Default save path");
// Note: Not in PluginConfig.java because it's an UI option and
// not applicable to all UIs
// TODO: Add a smarter way
// Following parameters can be set directly (we don't have an alias for these values).
String[] passthrough_params = new String[] {
"Open MyTorrents", "IconBar.enabled", "Wizard Completed",
"welcome.version.lastshown",
};
for (int i=0; i<passthrough_params.length; i++) {
external_to_internal_key_map.put(passthrough_params[i], passthrough_params[i]);
}
}
public void checkValidCoreParam(String name) {
if (!external_to_internal_key_map.containsKey(name)) {
throw new IllegalArgumentException("invalid core parameter: " + name);
}
}
private static Map fake_values_when_disabled;
private static int fake_values_ref_count;
public static void
setEnablePluginCoreConfigChange(
boolean enabled )
{
synchronized( PluginConfigImpl.class ){
if ( enabled ){
fake_values_ref_count--;
if ( fake_values_ref_count == 0 ){
// TODO: we could try and recover the faked values at this point
fake_values_when_disabled = null;
}
}else{
fake_values_ref_count++;
if ( fake_values_ref_count == 1 ){
fake_values_when_disabled = new HashMap();
}
}
}
}
private static Object
getFakeValueWhenDisabled(
String key,
String name )
{
if ( name.startsWith(key)){
return( null );
}
synchronized( PluginConfigImpl.class ){
if ( fake_values_when_disabled != null ){
return( fake_values_when_disabled.get( name ));
}
}
return( null );
}
private static boolean
setFakeValueWhenDisabled(
String key,
String name,
Object value )
{
if ( name.startsWith(key)){
return( false );
}
synchronized( PluginConfigImpl.class ){
if ( fake_values_when_disabled != null ){
fake_values_when_disabled.put( name, value );
return( true );
}
}
return( false );
}
private PluginInterface plugin_interface;
private String key;
private boolean allow_key_modification;
public
PluginConfigImpl(
PluginInterface _plugin_interface,
String _key )
{
plugin_interface = _plugin_interface;
key = _key + ".";
allow_key_modification = true;
}
public boolean
isNewInstall()
{
return( COConfigurationManager.isNewInstall());
}
public String
getPluginConfigKeyPrefix()
{
return( key );
}
public void setPluginConfigKeyPrefix(String _key) {
if (!allow_key_modification) {
throw new RuntimeException("cannot modify key prefix - already in use");
}
if (_key.length() > 0 || plugin_interface.getPluginState().isBuiltIn()) {
key = _key;
} else {
throw (new RuntimeException("Can't set Plugin Config Key Prefix to '"
+ _key + "'"));
}
}
//
//
// Helper methods which do everything required to get a parameter value.
//
//
private boolean getBooleanParameter(String name, boolean _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return(((Boolean)obj).booleanValue());
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setBooleanDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getBooleanParameter(name);
}
private int[] getColorParameter(String name, int[] _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key, name);
if (obj != null) {return (int[])obj;}
if (map_name) {name = mapKeyName(name, false);}
int[] result = getColorParameter0(name, _default, set_default);
// Result array...
if (result == null) {return null;}
if (result.length == 3) {
int[] result2 = new int[4];
System.arraycopy(result, 0, result2, 0, 3);
// Not sure what's the default result to return here for the override flag.
//
// I've just chosen zero for now.
result2[3] = getIntParameter(name, 0, false, false);
result = result2;
}
return result;
}
private int[] getColorParameter0(String name, int[] _default, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key, name);
if (obj != null){
return((int[])obj);
}
notifyRGBParamExists(name);
if (set_default) {
// No idea what to do with the override flag, and no idea what to do
// when the value is null.
if (_default != null) {
COConfigurationManager.setIntDefault(name + ".red", _default[0]);
COConfigurationManager.setIntDefault(name + ".green", _default[1]);
COConfigurationManager.setIntDefault(name + ".blue", _default[2]);
}
else {
// I'm not expecting this branch to be executed by any callers.
throw new RuntimeException("color parameter default is null");
}
}
else if (!hasParameter(name + ".red")) {return _default;}
return new int[] {
COConfigurationManager.getIntParameter(name + ".red"),
COConfigurationManager.getIntParameter(name + ".green"),
COConfigurationManager.getIntParameter(name + ".blue"),
COConfigurationManager.getIntParameter(name + ".override"),
};
}
private byte[] getByteParameter(String name, byte[] _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return((byte[])obj);
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setByteDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getByteParameter(name);
}
private float getFloatParameter(String name, float _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return(((Float)obj).floatValue());
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setFloatDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getFloatParameter(name);
}
private int getIntParameter(String name, int _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return(((Long)obj).intValue());
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setIntDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getIntParameter(name);
}
private long getLongParameter(String name, long _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return(((Long)obj).longValue());
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setLongDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getLongParameter(name);
}
private String getStringParameter(String name, String _default, boolean map_name, boolean set_default) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return((String)obj);
}
if (map_name) {name = mapKeyName(name, false);}
notifyParamExists(name);
if (set_default) {COConfigurationManager.setStringDefault(name, _default);}
else if (!hasParameter(name)) {return _default;}
return COConfigurationManager.getStringParameter(name);
}
//
//
// Variants of the methods above, but which use the values from ConfigurationDefaults.
//
//
private boolean getDefaultedBooleanParameter(String name, boolean map_name) {
Object obj = getFakeValueWhenDisabled(key,name);
if ( obj != null ){
return(((Boolean)obj).booleanValue());
}
return getBooleanParameter(name, ConfigurationDefaults.def_boolean == 1, map_name, false);
}
private byte[] getDefaultedByteParameter(String name, boolean map_name) {
return getByteParameter(name, ConfigurationDefaults.def_bytes, map_name, false);
}
private int[] getDefaultedColorParameter(String name, boolean map_name) {
int[] default_value = new int[] {
ConfigurationDefaults.def_int,
ConfigurationDefaults.def_int,
ConfigurationDefaults.def_int,
1
};
return getColorParameter(name, default_value, map_name, false);
}
private float getDefaultedFloatParameter(String name, boolean map_name) {
return getFloatParameter(name, ConfigurationDefaults.def_float, map_name, false);
}
private int getDefaultedIntParameter(String name, boolean map_name) {
return getIntParameter(name, ConfigurationDefaults.def_int, map_name, false);
}
private long getDefaultedLongParameter(String name, boolean map_name) {
return getLongParameter(name, ConfigurationDefaults.def_long, map_name, false);
}
private String getDefaultedStringParameter(String name, boolean map_name) {
return getStringParameter(name, ConfigurationDefaults.def_String, map_name, false);
}
//
//
// Core get parameter methods (backwardly compatible).
//
//
/**
* @deprecated
*/
public boolean getBooleanParameter(String name) {
return getDefaultedBooleanParameter(name, true);
}
/**
* @deprecated
*/
public boolean getBooleanParameter(String name, boolean default_value) {
return getBooleanParameter(name, default_value, true, false);
}
/**
* @deprecated
*/
public byte[] getByteParameter(String name) {
return getDefaultedByteParameter(name, true);
}
/**
* @deprecated
*/
public byte[] getByteParameter(String name, byte[] default_value) {
return getByteParameter(name, default_value, true, false);
}
/**
* @deprecated
*/
public float getFloatParameter(String name) {
return getDefaultedFloatParameter(name, true);
}
/**
* @deprecated
*/
public float getFloatParameter(String name, float default_value) {
return getFloatParameter(name, default_value, true, false);
}
/**
* @deprecated
*/
public int getIntParameter(String name) {
return getDefaultedIntParameter(name, true);
}
/**
* @deprecated
*/
public int getIntParameter(String name, int default_value) {
return getIntParameter(name, default_value, true, false);
}
/**
* @deprecated
*/
public long getLongParameter(String name) {
return getDefaultedLongParameter(name, true);
}
/**
* @deprecated
*/
public long getLongParameter(String name, long default_value) {
return getLongParameter(name, default_value, true, false);
}
/**
* @deprecated
*/
public String getStringParameter(String name) {
return getDefaultedStringParameter(name, true);
}
/**
* @deprecated
*/
public String getStringParameter(String name, String default_value) {
return getStringParameter(name, default_value, true, false);
}
//
//
// Core get parameter methods (newly named ones).
//
//
public boolean getCoreBooleanParameter(String name) {
checkValidCoreParam(name);
return getDefaultedBooleanParameter(name, true);
}
public boolean getCoreBooleanParameter(String name, boolean default_value) {
checkValidCoreParam(name);
return getBooleanParameter(name, default_value, true, false);
}
public byte[] getCoreByteParameter(String name) {
checkValidCoreParam(name);
return getDefaultedByteParameter(name, true);
}
public byte[] getCoreByteParameter(String name, byte[] default_value) {
checkValidCoreParam(name);
return getByteParameter(name, default_value, true, false);
}
public int[] getCoreColorParameter(String name) {
checkValidCoreParam(name);
return getDefaultedColorParameter(name, true);
}
public int[] getCoreColorParameter(String name, int[] default_value) {
checkValidCoreParam(name);
return getColorParameter(name, default_value, true, false);
}
public float getCoreFloatParameter(String name) {
checkValidCoreParam(name);
return getDefaultedFloatParameter(name, true);
}
public float getCoreFloatParameter(String name, float default_value) {
checkValidCoreParam(name);
return getFloatParameter(name, default_value, true, false);
}
public int getCoreIntParameter(String name) {
checkValidCoreParam(name);
return getDefaultedIntParameter(name, true);
}
public int getCoreIntParameter(String name, int default_value) {
checkValidCoreParam(name);
return getIntParameter(name, default_value, true, false);
}
public long getCoreLongParameter(String name) {
checkValidCoreParam(name);
return getDefaultedLongParameter(name, true);
}
public long getCoreLongParameter(String name, long default_value) {
checkValidCoreParam(name);
return getLongParameter(name, default_value, true, false);
}
public String getCoreStringParameter(String name) {
checkValidCoreParam(name);
return getDefaultedStringParameter(name, true);
}
public String getCoreStringParameter(String name, String default_value) {
checkValidCoreParam(name);
return getStringParameter(name, default_value, true, false);
}
//
//
// Core set parameter methods (backwardly compatible).
//
//
public void setBooleanParameter(String name, boolean value) {
if ( setFakeValueWhenDisabled(key, name, new Boolean( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setByteParameter(String name, byte[] value) {
if ( setFakeValueWhenDisabled(key, name, value )){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setColorParameter(String name, int[] value) {
setColorParameter(name, value, true);
}
public void setColorParameter(String name, int[] value, boolean override) {
if ( setFakeValueWhenDisabled(key, name, value )){
return;
}
COConfigurationManager.setRGBParameter(mapKeyName(name, true), value, override);
}
public void setFloatParameter(String name, float value) {
if ( setFakeValueWhenDisabled(key, name, new Float( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setIntParameter(String name, int value) {
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setLongParameter(String name, long value) {
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setStringParameter(String name, String value) {
if ( setFakeValueWhenDisabled(key, name, value)){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
//
//
// Core set parameter methods (newly named ones).
//
//
public void setCoreBooleanParameter(String name, boolean value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, new Boolean( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setCoreByteParameter(String name, byte[] value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, value )){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setCoreColorParameter(String name, int[] value) {
setCoreColorParameter(name, value, true);
}
public void setCoreColorParameter(String name, int[] value, boolean override) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, value)) {
return;
}
COConfigurationManager.setRGBParameter(mapKeyName(name, true), value, override);
}
public void setCoreFloatParameter(String name, float value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, new Float( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setCoreIntParameter(String name, int value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setCoreLongParameter(String name, long value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
public void setCoreStringParameter(String name, String value) {
checkValidCoreParam(name);
if ( setFakeValueWhenDisabled(key, name, value)){
return;
}
COConfigurationManager.setParameter(mapKeyName(name, true), value);
}
//
//
// Plugin get parameter methods.
//
//
public boolean getPluginBooleanParameter(String name) {
return getDefaultedBooleanParameter(this.key + name, false);
}
public boolean getPluginBooleanParameter(String name, boolean default_value) {
return getBooleanParameter(this.key + name, default_value, false, true);
}
public byte[] getPluginByteParameter(String name) {
return getDefaultedByteParameter(this.key + name, false);
}
public byte[] getPluginByteParameter(String name, byte[] default_value) {
return getByteParameter(this.key + name, default_value, false, true);
}
public int[] getPluginColorParameter(String name) {
return getDefaultedColorParameter(this.key + name, false);
}
public int[] getPluginColorParameter(String name, int[] default_value) {
return getColorParameter(this.key + name, default_value, false, true);
}
public float getPluginFloatParameter(String name) {
return getDefaultedFloatParameter(this.key + name, false);
}
public float getPluginFloatParameter(String name, float default_value) {
return getFloatParameter(this.key + name, default_value, false, true);
}
public int getPluginIntParameter(String name) {
return getDefaultedIntParameter(this.key + name, false);
}
public int getPluginIntParameter(String name, int default_value) {
return getIntParameter(this.key + name, default_value, false, true);
}
public long getPluginLongParameter(String name) {
return getDefaultedLongParameter(this.key + name, false);
}
public long getPluginLongParameter(String name, long default_value) {
return getLongParameter(this.key + name, default_value, false, true);
}
public String getPluginStringParameter(String name) {
return getDefaultedStringParameter(this.key + name, false);
}
public String getPluginStringParameter(String name, String default_value) {
return getStringParameter(this.key + name, default_value, false, true);
}
//
//
// Plugin set parameter methods.
//
//
public void setPluginParameter(String name, boolean value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginParameter(String name, byte[] value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginParameter(String name, float value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginParameter(String name, int value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginParameter(String name, long value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginParameter(String name, String value) {
notifyParamExists(this.key + name);
COConfigurationManager.setParameter(this.key + name, value);
}
public void setPluginColorParameter(String name, int[] value) {
setPluginColorParameter(name, value, true);
}
public void setPluginColorParameter(String name, int[] value, boolean override) {
notifyParamExists(this.key + name);
COConfigurationManager.setRGBParameter(this.key + name, value, override);
}
//
//
// Core "unsafe" get parameter methods.
//
//
public boolean getUnsafeBooleanParameter(String name) {
return getDefaultedBooleanParameter(name, false);
}
public boolean getUnsafeBooleanParameter(String name, boolean default_value) {
return getBooleanParameter(name, default_value, false, false);
}
public byte[] getUnsafeByteParameter(String name) {
return getDefaultedByteParameter(name, false);
}
public byte[] getUnsafeByteParameter(String name, byte[] default_value) {
return getByteParameter(name, default_value, false, false);
}
public int[] getUnsafeColorParameter(String name) {
return getDefaultedColorParameter(name, false);
}
public int[] getUnsafeColorParameter(String name, int[] default_value) {
return getColorParameter(name, default_value, false, false);
}
public float getUnsafeFloatParameter(String name) {
return getDefaultedFloatParameter(name, false);
}
public float getUnsafeFloatParameter(String name, float default_value) {
return getFloatParameter(name, default_value, false, false);
}
public int getUnsafeIntParameter(String name) {
return getDefaultedIntParameter(name, false);
}
public int getUnsafeIntParameter(String name, int default_value) {
return getIntParameter(name, default_value, false, false);
}
public long getUnsafeLongParameter(String name) {
return getDefaultedLongParameter(name, false);
}
public long getUnsafeLongParameter(String name, long default_value) {
return getLongParameter(name, default_value, false, false);
}
public String getUnsafeStringParameter(String name) {
return getDefaultedStringParameter(name, false);
}
public String getUnsafeStringParameter(String name, String default_value) {
return getStringParameter(name, default_value, false, false);
}
//
//
// Core "unsafe" set parameter methods.
//
//
public void setUnsafeBooleanParameter(String name, boolean value) {
if ( setFakeValueWhenDisabled(key, name, new Boolean( value))){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
public void setUnsafeByteParameter(String name, byte[] value) {
if ( setFakeValueWhenDisabled(key, name, value)){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
public void setUnsafeColorParameter(String name, int[] value) {
setUnsafeColorParameter(name, value, true);
}
public void setUnsafeColorParameter(String name, int[] value, boolean override) {
if ( setFakeValueWhenDisabled(key, name, value)){
return;
}
notifyRGBParamExists(name);
COConfigurationManager.setRGBParameter(name, value, override);
}
public void setUnsafeFloatParameter(String name, float value) {
if ( setFakeValueWhenDisabled(key, name, new Float( value))){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
public void setUnsafeIntParameter(String name, int value) {
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
public void setUnsafeLongParameter(String name, long value) {
if ( setFakeValueWhenDisabled(key, name, new Long( value))){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
public void setUnsafeStringParameter(String name, String value) {
if ( setFakeValueWhenDisabled(key, name, value )){
return;
}
notifyParamExists(name);
COConfigurationManager.setParameter(name, value);
}
//
//
// Get/set plugin list/map methods.
//
//
public String[] getPluginStringListParameter(String key) {
notifyParamExists(this.key + key);
return COConfigurationManager.getStringListParameter(this.key + key).toArray();
}
public void setPluginStringListParameter(String key, String[] value) {
notifyParamExists(this.key + key);
StringListImpl list_obj = new StringListImpl(Arrays.asList(value));
COConfigurationManager.setParameter(this.key+key, list_obj);
}
public List getPluginListParameter(String key, List default_value) {
notifyParamExists(this.key + key);
return COConfigurationManager.getListParameter(this.key+key, default_value);
}
public void setPluginListParameter(String key, List value) {
notifyParamExists(this.key + key);
COConfigurationManager.setParameter(this.key+key, value);
}
public Map getPluginMapParameter(String key, Map default_value) {
notifyParamExists(this.key + key);
return COConfigurationManager.getMapParameter(this.key+key, default_value);
}
public void setPluginMapParameter(String key, Map value) {
notifyParamExists(this.key + key);
COConfigurationManager.setParameter(this.key+key, value);
}
public void setPluginParameter(String key, int value, boolean global) {
notifyParamExists(this.key + key);
COConfigurationManager.setParameter(this.key+key, value);
if (global) {
MagnetURIHandler.getSingleton().addInfo(this.key+key, value);
}
}
public ConfigParameter
getParameter(
String key )
{
return( new ConfigParameterImpl( mapKeyName(key, false)));
}
public ConfigParameter
getPluginParameter(
String key )
{
return( new ConfigParameterImpl( this.key+key ));
}
public boolean removePluginParameter(String key) {
notifyParamExists(this.key + key);
return COConfigurationManager.removeParameter(this.key + key);
}
public boolean removePluginColorParameter(String key) {
notifyParamExists(this.key + key);
return COConfigurationManager.removeRGBParameter(this.key + key);
}
public Map
getUnsafeParameterList()
{
Set params = COConfigurationManager.getAllowedParameters();
Iterator it = params.iterator();
Map result = new HashMap();
while( it.hasNext()){
try{
String name = (String)it.next();
Object val = COConfigurationManager.getParameter( name );
if ( val instanceof String || val instanceof Long ){
}else if ( val instanceof byte[]){
val = new String((byte[])val, "UTF-8" );
}else if ( val instanceof Integer ){
val = new Long(((Integer)val).intValue());
}else if ( val instanceof List ){
val = null;
}else if ( val instanceof Map ){
val = null;
}else if ( val instanceof Boolean ){
val = new Long(((Boolean)val).booleanValue()?1:0);
}else if ( val instanceof Float || val instanceof Double ){
val = val.toString();
}
if ( val != null ){
result.put( name, val );
}
}catch( Throwable e ){
Debug.printStackTrace(e);
}
}
return( result );
}
public void
save()
{
/**
* We won't redirect the save method to the external source if there is one
* (despite that being the previous behaviour) - the plugin might be setting
* core values.
*/
//if (this.external_source != null) {this.external_source.save(true);}
COConfigurationManager.save();
}
public File
getPluginUserFile(
String name )
{
String dir = plugin_interface.getUtilities().getAzureusUserDir();
File file = new File( dir, "plugins" );
String p_dir = plugin_interface.getPluginDirectoryName();
if ( p_dir.length() != 0 ){
int lp = p_dir.lastIndexOf(File.separatorChar);
if ( lp != -1 ){
p_dir = p_dir.substring(lp+1);
}
file = new File( file, p_dir );
}else{
String id = plugin_interface.getPluginID();
if ( id.length() > 0 && !id.equals( PluginInitializer.INTERNAL_PLUGIN_ID )){
file = new File( file, id );
}else{
throw( new RuntimeException( "Plugin was not loaded from a directory" ));
}
}
FileUtil.mkdirs(file);
return( new File( file, name ));
}
public void
addListener(
final PluginConfigListener l )
{
COConfigurationManager.addListener(
new COConfigurationListener()
{
public void
configurationSaved()
{
l.configSaved();
}
});
}
private String mapKeyName(String key, boolean for_set) {
String result = (String)external_to_internal_key_map.get(key);
if (result == null) {
if (for_set) {
throw new RuntimeException("No permission to set the value of core parameter: " + key);
}
else {
return key;
}
}
return result;
}
public boolean hasParameter(String param_name) {
// Don't see any reason why a plugin should care whether it is looking
// at a system default setting or not, so we'll do an implicit check.
return COConfigurationManager.hasParameter(param_name, false);
}
public boolean hasPluginParameter(String param_name) {
// We should not have default settings for plugins in configuration
// defaults, so we don't bother doing an implicit check.
notifyParamExists(this.key + param_name);
return COConfigurationManager.hasParameter(this.key + param_name, true);
}
public void notifyRGBParamExists(String param) {
notifyParamExists(param + ".red");
notifyParamExists(param + ".blue");
notifyParamExists(param + ".green");
notifyParamExists(param + ".override");
}
// Not exposed in the plugin API.
public void notifyParamExists(String param) {
if (allow_key_modification && param.startsWith(this.key)) {
allow_key_modification = false;
}
if (external_source != null && param.startsWith(this.key)) {
external_source.registerParameter(param);
}
}
public PluginConfigSource enableExternalConfigSource() {
PluginConfigSourceImpl source = new PluginConfigSourceImpl(this, this.plugin_interface.getPluginID());
setPluginConfigSource(source);
return source;
}
public PluginConfigSource getPluginConfigSource() {
return this.external_source;
}
public void setPluginConfigSource(PluginConfigSource source) {
if (this.external_source != null) {
throw new RuntimeException("external config source already associated!");
}
// We need a common key prefix, otherwise this won't work correctly.
PluginConfigSourceImpl source_impl = (PluginConfigSourceImpl)source;
String used_key = source_impl.getUsedKeyPrefix();
if (used_key != null && !this.getPluginConfigKeyPrefix().startsWith(used_key)) {
throw new RuntimeException("cannot use this config source object - incompatible prefix keys: " + used_key + " / " + this.getPluginConfigKeyPrefix());
}
this.external_source = (PluginConfigSourceImpl)source;
}
}