/*
* Created on Feb 15, 2005
* Created by Alon Rohter
* Copyright (C) 2004-2005 Aelitis, All Rights Reserved.
*
* 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.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package org.gudy.azureus2.plugins.utils;
import java.io.InputStream;
import org.gudy.azureus2.core3.util.AESemaphore;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.ui.*;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderFactory;
import org.gudy.azureus2.plugins.utils.resourceuploader.ResourceUploaderFactory;
import org.gudy.azureus2.plugins.utils.xml.rss.RSSFeed;
import org.gudy.azureus2.plugins.utils.xml.simpleparser.SimpleXMLParserDocumentException;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.pluginsimpl.local.utils.resourcedownloader.ResourceDownloaderFactoryImpl;
import org.gudy.azureus2.pluginsimpl.local.utils.resourceuploader.ResourceUploaderFactoryImpl;
import com.aelitis.azureus.core.AzureusCoreFactory;
/**
* Plugin utility class for easy access to static helper methods,
* without the need for a plugin interface instance.
*/
public class StaticUtilities {
private static Formatters formatters;
static {
try {
Class c = Class.forName("org.gudy.azureus2.pluginsimpl.local.utils.FormattersImpl");
formatters = (Formatters) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Get display and byte format utilities.
* @return formatters
*/
public static Formatters getFormatters() { return formatters; }
public static ResourceDownloaderFactory
getResourceDownloaderFactory()
{
return( ResourceDownloaderFactoryImpl.getSingleton());
}
public static ResourceUploaderFactory
getResourceUploaderFactory()
{
return( ResourceUploaderFactoryImpl.getSingleton());
}
public static RSSFeed
getRSSFeed(
InputStream is )
throws SimpleXMLParserDocumentException
{
return( PluginInitializer.getDefaultInterface().getUtilities().getRSSFeed( is ));
}
/**
* See UIInstance.promptUser
* @param title
* @param desc
* @param options
* @param default_option
* @return
*/
public static int
promptUser(
String title,
String desc,
String[] options,
int default_option )
{
UIInstance[] instances = PluginInitializer.getDefaultInterface().getUIManager().getUIInstances();
if ( instances.length > 0 ){
return( instances[0].promptUser(title, desc, options, default_option ));
}else{
Debug.out( "No UIInstances to handle prompt: " + title + "/" + desc );
return( -1 );
}
}
/**
* gets the default UI manager and also waits for up to a specified time for a UI instance to
* attach. useful when doing things during initialisation
* @param millis_to_wait_for_attach
* @return
*/
public static UIManager
getUIManager(
long millis_to_wait_for_attach )
{
final UIManager ui_manager = PluginInitializer.getDefaultInterface().getUIManager();
if ( ui_manager.getUIInstances().length == 0 ){
final AESemaphore sem = new AESemaphore( "waitforui") ;
ui_manager.addUIListener(
new UIManagerListener()
{
public void
UIAttached(
UIInstance instance )
{
ui_manager.removeUIListener( this );
sem.releaseForever();
}
public void
UIDetached(
UIInstance instance )
{
}
});
// UIAttached is only fired once initialisation is complete. However, the instance
// can be made available prior to this and there is a case where this event is blocking
// the firing of the completion event. therefore pick it up if present directly
long time_to_go = millis_to_wait_for_attach;
while( ui_manager.getUIInstances().length == 0 ){
if ( sem.reserve( 1000 )){
break;
}
time_to_go -= 1000;
if ( time_to_go <= 0 ){
Debug.out( "Timeout waiting for UI to attach" );
break;
}
}
}
return( ui_manager );
}
}