/* * File : Utilities.java * Created : 24-Mar-2004 * 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.plugins.utils; /** * @author parg * */ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.URL; import java.nio.ByteBuffer; import java.util.List; import java.util.Map; import org.gudy.azureus2.plugins.PluginException; import org.gudy.azureus2.plugins.utils.resourcedownloader.*; import org.gudy.azureus2.plugins.utils.resourceuploader.ResourceUploaderFactory; import org.gudy.azureus2.plugins.utils.search.SearchException; import org.gudy.azureus2.plugins.utils.search.SearchInitiator; import org.gudy.azureus2.plugins.utils.search.SearchProvider; import org.gudy.azureus2.plugins.utils.security.*; import org.gudy.azureus2.plugins.utils.subscriptions.SubscriptionException; import org.gudy.azureus2.plugins.utils.subscriptions.SubscriptionManager; import org.gudy.azureus2.plugins.utils.xml.simpleparser.*; import org.gudy.azureus2.plugins.utils.xml.rss.*; public interface Utilities { public String getAzureusUserDir(); public String getAzureusProgramDir(); public boolean isCVSVersion(); public boolean isWindows(); public boolean isLinux(); public boolean isSolaris(); public boolean isOSX(); /** * @return Whether the OS is a unix flavor (linux, bsd, aix, etc) * * @since 2.4.0.3 */ boolean isUnix(); /** * @return Whether the OS is FreeBSD * * @note Up to at least v2.4.0.2, the FreeBSD port has identified itself * to azureus as Linux and not FreeBSD * * @since 2.4.0.3 */ boolean isFreeBSD(); public InputStream getImageAsStream( String image_name ); public Semaphore getSemaphore(); public Monitor getMonitor(); public ByteBuffer allocateDirectByteBuffer( int size ); public void freeDirectByteBuffer( ByteBuffer buffer ); public PooledByteBuffer allocatePooledByteBuffer( int size ); public PooledByteBuffer allocatePooledByteBuffer( byte[] data ); /** * * @param data must be b-encodable * @return */ public PooledByteBuffer allocatePooledByteBuffer( Map data ) throws IOException; public Formatters getFormatters(); public LocaleUtilities getLocaleUtilities(); /** * Creates a <code>UTTimer</code> instance. It will be configured for non-lightweight * tasks by default. * * @param name Name for the UTTimer object. * @return A UTTimer instance. */ public UTTimer createTimer( String name ); /** * Creates a <code>UTTimer</code> instance. * * @param name Name for the UTTimer object. * @param lightweight If <code>true</code>, it indicates that this timer will be used to * perform small lightweight tasks. If <code>false</code>, it indicates that * this timer will be used to perform expensive tasks. This allows Azureus to create * the appropriate amount of resources to manage this timer. * @return A UTTimer instance. */ public UTTimer createTimer( String name, boolean lightweight ); /** * Creates a <code>UTTimer</code> instance. * * @param name Name for the UTTimer object. * @param priority The Thread.<i>XXX_</i>PRIORITY value to use. * @return A UTTimer instance. */ public UTTimer createTimer(String name, int priority); /** * create and run a thread for the target. This will be a daemon thread so that * its existence doesn't interfere with Azureus closedown * @param name * @param target */ public void createThread( String name, Runnable target ); /** * create a child process and executes the supplied command line. The child process * will not inherit any open handles on Windows, which does happen if Runtime is * used directly. This relies on the Platform plugin, if this is not installed then * this will fall back to using Runtime.exec * @param command_line */ public void createProcess( String command_line ) throws PluginException; public ResourceDownloaderFactory getResourceDownloaderFactory(); public ResourceUploaderFactory getResourceUploaderFactory(); public SESecurityManager getSecurityManager(); public SimpleXMLParserDocumentFactory getSimpleXMLParserDocumentFactory(); public RSSFeed getRSSFeed( InputStream is ) throws SimpleXMLParserDocumentException; public RSSFeed getRSSFeed( URL feed_location ) throws ResourceDownloaderException, SimpleXMLParserDocumentException; public RSSFeed getRSSFeed( ResourceDownloader feed_location ) throws ResourceDownloaderException, SimpleXMLParserDocumentException; /** * Returns a public IP address of the machine or null if it can't be determined */ public InetAddress getPublicAddress(); public InetAddress getPublicAddress( boolean ipv6 ); /** * attempts a reverse DNS lookup of an address, null if it fails * @param address * @return */ public String reverseDNSLookup( InetAddress address ); /** * Get the current system time, like System.currentTimeMillis(), * only the time lookup is cached for performance reasons. * @return current system time */ public long getCurrentSystemTime(); public ByteArrayWrapper createWrapper( byte[] data ); /** * create a dispatcher that will queue runnable items until either the limit * is reached or the dispatcher hasn't had an entry added for the defined idle time * @param idle_dispatch_time milliseconds * @param max_queue_size 0 -> infinite * @return */ public AggregatedDispatcher createAggregatedDispatcher( long idle_dispatch_time, long max_queue_size ); public AggregatedList createAggregatedList( AggregatedListAcceptor acceptor, long idle_dispatch_time, long max_queue_size ); public Map readResilientBEncodedFile( File parent_dir, String file_name, boolean use_backup ); public void writeResilientBEncodedFile( File parent_dir, String file_name, Map data, boolean use_backup ); public void deleteResilientBEncodedFile( File parent_dir, String file_name, boolean use_backup ); /** * Compares two version strings for order. * Returns a negative integer, zero, or a positive integer as the first * argument is less than, equal to, or greater than the second. * <p> * Example:<br> * compareVersions("1.1.0.0", "1.1.2.0"); // - * compareVersions("1.1.0.0", "1.1.0"); // 0 * compareVersions("1.1.1.1", "1.1.1"); // + * * @param v1 the first version string to be compared * @param v2 the second version string to be compared * @return a negative integer, zero, or a positive integer as the first * argument is less than, equal to, or greater than the second. * * @since 2.3.0.7 */ public int compareVersions(String v1, String v2); /** * Converts a file name so that all characters in the file name are * compatible with the underlying filesystem. This includes quote * characters, back and forwarded slashes, newline characters and so on. * * <p> * * Note - this is only intended for file names, rather than file paths. * * @param f_name File name to convert. * @return Converted file name. */ public String normaliseFileName(String f_name); /** * Adds a low priority task that will be scheduled at some point after existing tasks have * completed. In particular a system task exists that will block subsequent ones until after * UI initialisation is complete. Plugins can therefore use this to schedule initialisation * actions to occur after UI init is complete. * * @since 3.0.5.3 * @return */ public DelayedTask createDelayedTask(Runnable r); public void registerSearchProvider( SearchProvider provider ) throws SearchException; public void unregisterSearchProvider( SearchProvider provider ) throws SearchException; public SearchInitiator getSearchInitiator() throws SearchException; public SubscriptionManager getSubscriptionManager() throws SubscriptionException; public FeatureManager getFeatureManager(); public boolean supportsPowerStateControl( int state ); public void addPowerManagementListener( PowerManagementListener listener ); public void removePowerManagementListener( PowerManagementListener listener ); public List<LocationProvider> getLocationProviders(); public void addLocationProvider( LocationProvider provider ); public void removeLocationProvider( LocationProvider provider ); public void addLocationProviderListener( LocationProviderListener listener ); public void removeLocationProviderListener( LocationProviderListener listener ); public void registerJSONRPCServer( JSONServer server ); public void unregisterJSONRPCServer( JSONServer server ); public void registerJSONRPCClient( JSONClient client ); public void unregisterJSONRPCClient( JSONClient client ); public interface JSONServer { public String getName(); public List<String> getSupportedMethods(); public Map call( String method, Map args ) throws PluginException; } public interface JSONClient { public void serverRegistered( JSONServer server ); public void serverUnregistered( JSONServer server ); } }