/* * Created on Apr 17, 2007 * Created by Paul Gardner * Copyright (C) 2007 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 63.529,40 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. * */ package org.gudy.azureus2.pluginsimpl.local; import java.io.File; import java.io.IOException; import org.gudy.azureus2.core3.disk.DiskManagerFileInfo; import org.gudy.azureus2.core3.disk.DiskManagerFileInfoListener; import org.gudy.azureus2.core3.download.DownloadManager; import org.gudy.azureus2.core3.peer.PEPeer; import org.gudy.azureus2.core3.peer.PEPeerManager; import org.gudy.azureus2.core3.torrent.TOTorrent; import org.gudy.azureus2.core3.torrent.TOTorrentFile; import org.gudy.azureus2.core3.tracker.host.TRHostTorrent; import org.gudy.azureus2.core3.tracker.server.TRTrackerServerTorrent; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.core3.util.DirectByteBuffer; import org.gudy.azureus2.plugins.disk.DiskManager; import org.gudy.azureus2.plugins.download.Download; import org.gudy.azureus2.plugins.download.DownloadException; import org.gudy.azureus2.plugins.network.Connection; import org.gudy.azureus2.plugins.peers.Peer; import org.gudy.azureus2.plugins.peers.PeerManager; import org.gudy.azureus2.plugins.torrent.Torrent; import org.gudy.azureus2.plugins.tracker.TrackerTorrent; import org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl; import org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerImpl; import org.gudy.azureus2.pluginsimpl.local.download.DownloadImpl; import org.gudy.azureus2.pluginsimpl.local.download.DownloadManagerImpl; import org.gudy.azureus2.pluginsimpl.local.network.ConnectionImpl; import org.gudy.azureus2.pluginsimpl.local.peers.PeerImpl; import org.gudy.azureus2.pluginsimpl.local.peers.PeerManagerImpl; import org.gudy.azureus2.pluginsimpl.local.torrent.TorrentImpl; import org.gudy.azureus2.pluginsimpl.local.tracker.TrackerTorrentImpl; import com.aelitis.azureus.core.networkmanager.NetworkConnection; public class PluginCoreUtils { public static Torrent wrap( TOTorrent t ) { return( new TorrentImpl( t )); } public static TOTorrent unwrap( Torrent t ) { return(((TorrentImpl)t).getTorrent()); } public static DiskManager wrap( org.gudy.azureus2.core3.disk.DiskManager dm ) { return( new DiskManagerImpl( dm )); } public static org.gudy.azureus2.core3.disk.DiskManager unwrap( DiskManager dm ) { return(((DiskManagerImpl)dm).getDiskmanager()); } /** * May return NULL if download not found (e.g. has been removed) * @param dm * @return may be null */ public static Download wrap( org.gudy.azureus2.core3.download.DownloadManager dm ) { try{ return( DownloadManagerImpl.getDownloadStatic( dm )); }catch( Throwable e ){ // Debug.printStackTrace( e ); return( null ); } } public static NetworkConnection unwrap( Connection connection ) { if ( connection instanceof ConnectionImpl ){ return(((ConnectionImpl)connection).getCoreConnection()); } return( null ); } public static Connection wrap( NetworkConnection connection ) { return( new ConnectionImpl( connection, connection.isIncoming())); } public static org.gudy.azureus2.plugins.disk.DiskManagerFileInfo wrap( DiskManagerFileInfo info ) throws DownloadException { if ( info == null ){ return( null ); } return( new DiskManagerFileInfoImpl( DownloadManagerImpl.getDownloadStatic( info.getDownloadManager()), info )); } public static DiskManagerFileInfo unwrap( final org.gudy.azureus2.plugins.disk.DiskManagerFileInfo info ) throws DownloadException { if ( info instanceof DiskManagerFileInfoImpl ){ return(((DiskManagerFileInfoImpl)info).getCore()); } if ( info == null ){ return( null ); } try{ Download dl = info.getDownload(); if ( dl != null ){ org.gudy.azureus2.core3.download.DownloadManager dm = unwrap( dl ); return( dm.getDiskManagerFileInfo()[ info.getIndex()]); } }catch( Throwable e ){ } // no underlying download, lash something up return( new DiskManagerFileInfo() { public void setPriority( int b ) { info.setNumericPriority(b); } public void setSkipped( boolean b) { info.setSkipped(b); } public boolean setLink( File link_destination ) { info.setLink(link_destination); return( true ); } public boolean setLinkAtomic( File link_destination ) { info.setLink(link_destination); return( true ); } public File getLink() { return( info.getLink()); } public boolean setStorageType( int type ) { return( false ); } public int getStorageType() { return( ST_LINEAR ); } public int getAccessMode() { return( info.getAccessMode()); } public long getDownloaded() { return( info.getDownloaded()); } public String getExtension() { return( "" ); } public int getFirstPieceNumber() { return( info.getFirstPieceNumber()); } public int getLastPieceNumber() { return((int)(( info.getLength() + info.getPieceSize()-1 )/info.getPieceSize())); } public long getLength() { return( info.getLength()); } public int getNbPieces() { return( info.getNumPieces()); } public int getPriority() { return( info.getNumericPriorty()); } public boolean isSkipped() { return( info.isSkipped()); } public int getIndex() { return( info.getIndex()); } public DownloadManager getDownloadManager() { return( null ); } public org.gudy.azureus2.core3.disk.DiskManager getDiskManager() { return( null ); } public File getFile( boolean follow_link ) { if ( follow_link ){ return( info.getLink()); }else{ return( info.getFile()); } } public TOTorrentFile getTorrentFile() { return( null ); } public DirectByteBuffer read( long offset, int length ) throws IOException { throw( new IOException( "unsupported" )); } public void flushCache() throws Exception { } public int getReadBytesPerSecond() { return( 0 ); } public int getWriteBytesPerSecond() { return( 0 ); } public long getETA() { return( -1 ); } public void close() { } public void addListener( DiskManagerFileInfoListener listener ) { } public void removeListener( DiskManagerFileInfoListener listener ) { } }); } public static Object convert( Object datasource, boolean toCore) { try { if (toCore) { if (datasource instanceof org.gudy.azureus2.core3.download.DownloadManager) { return datasource; } if (datasource instanceof DownloadImpl) { return ((DownloadImpl) datasource).getDownload(); } if (datasource instanceof org.gudy.azureus2.core3.disk.DiskManager) { return datasource; } if (datasource instanceof DiskManagerImpl) { return ((DiskManagerImpl) datasource).getDiskmanager(); } if (datasource instanceof PEPeerManager) { return datasource; } if (datasource instanceof PeerManagerImpl) { return ((PeerManagerImpl) datasource).getDelegate(); } if (datasource instanceof PEPeer) { return datasource; } if (datasource instanceof PeerImpl) { return ((PeerImpl)datasource).getPEPeer(); } if (datasource instanceof org.gudy.azureus2.core3.disk.DiskManagerFileInfo) { return datasource; } if (datasource instanceof org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl) { return ((org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl) datasource).getCore(); } if (datasource instanceof TRHostTorrent) { return datasource; } if (datasource instanceof TrackerTorrentImpl) { ((TrackerTorrentImpl) datasource).getHostTorrent(); } } else { // to PI if (datasource instanceof org.gudy.azureus2.core3.download.DownloadManager) { return wrap((org.gudy.azureus2.core3.download.DownloadManager) datasource); } if (datasource instanceof DownloadImpl) { return datasource; } if (datasource instanceof org.gudy.azureus2.core3.disk.DiskManager) { return wrap((org.gudy.azureus2.core3.disk.DiskManager) datasource); } if (datasource instanceof DiskManagerImpl) { return datasource; } if (datasource instanceof PEPeerManager) { return wrap((PEPeerManager) datasource); } if (datasource instanceof PeerManagerImpl) { return datasource; } if (datasource instanceof PEPeer) { return PeerManagerImpl.getPeerForPEPeer((PEPeer) datasource); } if (datasource instanceof Peer) { return datasource; } if (datasource instanceof org.gudy.azureus2.core3.disk.DiskManagerFileInfo) { DiskManagerFileInfo fileInfo = (org.gudy.azureus2.core3.disk.DiskManagerFileInfo) datasource; if (fileInfo != null) { try { return new org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl( DownloadManagerImpl.getDownloadStatic(fileInfo.getDownloadManager()), fileInfo); } catch (DownloadException e) { /* Ignore */ } } } if (datasource instanceof org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl) { return datasource; } if (datasource instanceof TRHostTorrent) { TRHostTorrent item = (TRHostTorrent) datasource; return new TrackerTorrentImpl(item); } if (datasource instanceof TrackerTorrentImpl) { return datasource; } } } catch (Throwable t) { Debug.out(t); } return datasource; } public static org.gudy.azureus2.core3.download.DownloadManager unwrapIfPossible( Download dm ) { // might be a LWSDownload if ( dm instanceof DownloadImpl ){ return(((DownloadImpl)dm).getDownload()); }else{ return( null ); } } public static org.gudy.azureus2.core3.download.DownloadManager unwrap( Download dm ) { if ( dm instanceof DownloadImpl ){ return(((DownloadImpl)dm).getDownload()); }else{ Debug.out( "Can't unwrap " + dm ); return( null ); } } public static PeerManager wrap( PEPeerManager pm ) { return( PeerManagerImpl.getPeerManager( pm )); } public static PEPeerManager unwrap( PeerManager pm ) { return(((PeerManagerImpl)pm).getDelegate()); } public static TRTrackerServerTorrent unwrap( TrackerTorrent torrent ) { return( ((TrackerTorrentImpl)torrent).getHostTorrent().getTrackerTorrent()); } public static PEPeer unwrap( Peer peer ) { return(((PeerImpl)peer).getDelegate()); } public static boolean isInitialisationComplete() { return( PluginInitializer.getDefaultInterface().getPluginState().isInitialisationComplete()); } }