📄 plugininitializer.java
字号:
}
}
registration_queue.clear();
}
private void
initialisePlugin(
List l )
throws PluginException
{
PluginException last_load_failure = null;
for (int i=0;i<l.size();i++){
PluginInterfaceImpl plugin_interface = (PluginInterfaceImpl)l.get(i);
if (plugin_interface.isDisabled()) {
plugin_interfaces.add( plugin_interface );
continue;
}
Plugin plugin = plugin_interface.getPlugin();
if (plugin_interface.isOperational())
continue;
Throwable load_failure = null;
try{
UtilitiesImpl.setPluginThreadContext( plugin_interface );
plugin.initialize(plugin_interface);
if (!(plugin instanceof FailedPlugin)){
plugin_interface.setOperational( true );
}
}catch( Throwable e ){
load_failure = e;
}
plugins.add( plugin );
plugin_interfaces.add( plugin_interface );
if ( load_failure != null ){
Debug.printStackTrace( load_failure );
String msg = "Error initializing plugin '" + plugin_interface.getPluginName() + "'";
Logger.log(new LogAlert(LogAlert.UNREPEATABLE, msg, load_failure));
System.out.println( msg + " : " + load_failure);
last_load_failure = new PluginException( msg, load_failure );
}
}
if ( last_load_failure != null ){
throw( last_load_failure );
}
}
protected void
initializePluginFromClass(
Class plugin_class,
String plugin_id,
String plugin_config_key )
throws PluginException
{
if ( plugin_class != FailedPlugin.class && getPluginFromClass( plugin_class ) != null ){
Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
"Error loading '" + plugin_id + "', plugin class '"
+ plugin_class.getName() + "' is already loaded"));
return;
}
if( core_operation != null ){
String plugin_name;
if ( plugin_config_key.length() == 0 ){
plugin_name = plugin_class.getName();
int pos = plugin_name.lastIndexOf(".");
if ( pos != -1 ){
plugin_name = plugin_name.substring( pos+1 );
}
}else{
plugin_name = plugin_config_key;
}
core_operation.reportCurrentTask(MessageText.getString("splash.plugin.init") + plugin_name );
}
try{
Plugin plugin = (Plugin) plugin_class.newInstance();
PluginInterfaceImpl plugin_interface =
new PluginInterfaceImpl(
plugin,
this,
plugin_class,
plugin_class.getClassLoader(),
plugin_config_key,
new Properties(),
"",
plugin_id,
null );
UtilitiesImpl.setPluginThreadContext( plugin_interface );
try{
Method load_method = plugin_class.getMethod( "load", new Class[]{ PluginInterface.class });
load_method.invoke( plugin, new Object[]{ plugin_interface });
}catch( NoSuchMethodException e ){
}catch( Throwable e ){
Debug.printStackTrace( e );
Logger.log(new LogAlert(LogAlert.UNREPEATABLE,
"Load of built in plugin '" + plugin_id + "' fails", e));
}
plugin.initialize(plugin_interface);
if (!(plugin instanceof FailedPlugin)){
plugin_interface.setOperational( true );
}
plugins.add( plugin );
plugin_interfaces.add( plugin_interface );
}catch(Throwable e){
Debug.printStackTrace( e );
String msg = "Error loading internal plugin '" + plugin_class.getName() + "'";
Logger.log(new LogAlert(LogAlert.UNREPEATABLE, msg, e));
System.out.println(msg + " : " + e);
throw( new PluginException( msg, e ));
}
}
protected void
initializePluginFromInstance(
Plugin plugin,
String plugin_id,
String plugin_config_key )
throws PluginException
{
try{
PluginInterfaceImpl plugin_interface =
new PluginInterfaceImpl(
plugin,
this,
plugin.getClass(),
plugin.getClass().getClassLoader(),
plugin_config_key,
new Properties(),
"",
plugin_id,
null );
UtilitiesImpl.setPluginThreadContext( plugin_interface );
plugin.initialize(plugin_interface);
if (!(plugin instanceof FailedPlugin)){
plugin_interface.setOperational( true );
}
plugins.add( plugin );
plugin_interfaces.add( plugin_interface );
}catch(Throwable e){
Debug.printStackTrace( e );
String msg = "Error loading internal plugin '" + plugin.getClass().getName() + "'";
Logger.log(new LogAlert(LogAlert.UNREPEATABLE, msg, e));
System.out.println(msg + " : " + e);
throw( new PluginException( msg, e ));
}
}
protected void
unloadPlugin(
PluginInterfaceImpl pi )
{
plugins.remove( pi.getPlugin());
plugin_interfaces.remove( pi );
for (int i=0;i<loaded_pi_list.size();i++){
List l = (List)loaded_pi_list.get(i);
if ( l.remove(pi)){
if ( l.size() == 0 ){
loaded_pi_list.remove(i);
}
return;
}
}
}
protected void
reloadPlugin(
PluginInterfaceImpl pi )
throws PluginException
{
unloadPlugin( pi );
Object key = pi.getInitializerKey();
String config_key = pi.getPluginConfigKey();
if ( key instanceof File ){
List pis = loadPluginFromDir( (File)key, false );
initialisePlugin( pis );
}else{
initializePluginFromClass( (Class) key, pi.getPluginID(), config_key );
}
}
protected AzureusCore
getAzureusCore()
{
return( azureus_core );
}
protected GlobalManager
getGlobalManager()
{
return( azureus_core.getGlobalManager() );
}
public static PluginInterface
getDefaultInterface()
{
return( singleton.getDefaultInterfaceSupport());
}
protected PluginInterface
getDefaultInterfaceSupport()
{
if ( default_plugin == null ){
default_plugin =
new PluginInterfaceImpl(
new Plugin()
{
public void
initialize(
PluginInterface pi)
{
}
},
this,
getClass(),
getClass().getClassLoader(),
"default",
new Properties(),
null,
INTERNAL_PLUGIN_ID,
null );
}
return( default_plugin );
}
public void
downloadManagerAdded(
DownloadManager dm )
{
}
public void
downloadManagerRemoved(
DownloadManager dm )
{
}
public void
destroyInitiated()
{
for (int i=0;i<plugin_interfaces.size();i++){
((PluginInterfaceImpl)plugin_interfaces.get(i)).closedownInitiated();
}
if ( default_plugin != null ){
default_plugin.closedownInitiated();
}
}
public void
destroyed()
{
for (int i=0;i<plugin_interfaces.size();i++){
((PluginInterfaceImpl)plugin_interfaces.get(i)).closedownComplete();
}
if ( default_plugin != null ){
default_plugin.closedownComplete();
}
}
public void seedingStatusChanged( boolean seeding_only_mode ){
/*nothing*/
}
protected void
fireEventSupport(
final int type,
final Object value )
{
PluginEvent ev =
new PluginEvent()
{
public int
getType()
{
return( type );
}
public Object
getValue()
{
return( value );
}
};
for (int i=0;i<plugin_interfaces.size();i++){
try{
((PluginInterfaceImpl)plugin_interfaces.get(i)).firePluginEvent(ev);
}catch(Throwable e ){
Debug.printStackTrace(e);
}
}
if ( default_plugin != null ){
default_plugin.firePluginEvent(ev);
}
}
public static void
fireEvent(
int type )
{
singleton.fireEventSupport(type, null);
}
public static void
fireEvent(
int type,
Object value )
{
singleton.fireEventSupport(type, value);
}
public void
initialisationComplete()
{
initialisation_complete = true;
UIManagerImpl.initialisationComplete();
for (int i=0;i<plugin_interfaces.size();i++){
((PluginInterfaceImpl)plugin_interfaces.get(i)).initialisationComplete();
}
if ( default_plugin != null ){
default_plugin.initialisationComplete();
}
}
protected boolean
isInitialisationComplete()
{
return( initialisation_complete );
}
public static List getPluginInterfaces() {
return singleton.getPluginInterfacesSupport();
}
protected List getPluginInterfacesSupport() {
return plugin_interfaces;
}
protected PluginInterface[]
getPlugins()
{
List pis = getPluginInterfacesSupport();
PluginInterface[] res = new PluginInterface[pis.size()];
pis.toArray(res);
return( res );
}
protected PluginManager
getPluginManager()
{
return( plugin_manager );
}
protected PluginInterfaceImpl
getPluginFromClass(
Class cla )
{
return( getPluginFromClass( cla.getName()));
}
protected PluginInterfaceImpl
getPluginFromClass(
String class_name )
{
for (int i=0;i<plugin_interfaces.size();i++){
PluginInterfaceImpl pi = (PluginInterfaceImpl)plugin_interfaces.get(i);
if ( pi.getPlugin().getClass().getName().equals( class_name )){
return( pi );
}
}
// fall back to the loaded but not-yet-initialised list
for (int i=0;i<loaded_pi_list.size();i++){
List l = (List)loaded_pi_list.get(i);
for (int j=0;j<l.size();j++){
PluginInterfaceImpl pi = (PluginInterfaceImpl)l.get(j);
if ( pi.getPlugin().getClass().getName().equals( class_name )){
return( pi );
}
}
}
return( null );
}
public void
generate(
IndentWriter writer )
{
writer.println( "Plugins" );
try{
writer.indent();
for (int i=0;i<plugin_interfaces.size();i++){
PluginInterfaceImpl pi = (PluginInterfaceImpl)plugin_interfaces.get(i);
pi.generateEvidence( writer );
}
}finally{
writer.exdent();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -