/*
* File : TorrentImpl.java
* Created : 08-Dec-2003
* 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.pluginsimpl.local.torrent;
import java.net.*;
/**
* @author parg
*
*/
import java.util.Map;
import java.io.File;
//import org.gudy.azureus2.core3.download.DownloadManagerState;
//import org.gudy.azureus2.core3.download.DownloadManagerStateFactory;
//import org.gudy.azureus2.core3.internat.*;
//import org.gudy.azureus2.core3.logging.LogRelation;
import org.gudy.azureus2.core3.internat.LocaleTorrentUtil;
import org.gudy.azureus2.core3.internat.LocaleUtilDecoder;
import org.gudy.azureus2.core3.torrent.*;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.torrent.*;
import org.gudy.azureus2.plugins.download.*;
//import org.gudy.azureus2.pluginsimpl.locale.download.*;
//import org.torrent.transfer.TransferImpl;
//import com.aelitis.azureus.plugins.magnet.MagnetPlugin;
public class
TorrentImpl
// extends LogRelation
implements Torrent
{
// private static MagnetPlugin magnet_plugin;
private PluginInterface pi;
private TOTorrent torrent;
private LocaleUtilDecoder decoder;
private boolean complete;
public
TorrentImpl(
TOTorrent _torrent )
{
this( null, _torrent );
}
public
TorrentImpl(
PluginInterface _pi,
TOTorrent _torrent )
{
pi = _pi;
torrent = _torrent;
}
// public String
// getName()
// {
// String name = decode( torrent.getName());
//
// name = FileUtil.convertOSSpecificChars( name, false );
//
// return( name );
// }
public URL
getAnnounceURL()
{
return( torrent.getAnnounceURL());
}
public void
setAnnounceURL(
URL url )
{
torrent.setAnnounceURL( url );
updated();
}
//
// public TorrentAnnounceURLList
// getAnnounceURLList()
// {
// return( new TorrentAnnounceURLListImpl( this ));
// }
public TOTorrent
getTorrent()
{
return( torrent );
}
// public boolean
// isDecentralised()
// {
// return( TorrentUtils.isDecentralised( torrent ));
// }
// public boolean
// isDecentralisedBackupEnabled()
// {
// return( TorrentUtils.getDHTBackupEnabled( torrent ));
// }
//
// public void
// setDecentralisedBackupRequested(
// boolean requested )
// {
// TorrentUtils.setDHTBackupRequested( torrent, requested );
// }
//
// public boolean
// isDecentralisedBackupRequested()
// {
// return( TorrentUtils.isDHTBackupRequested( torrent ));
//
// }
// public boolean
// isPrivate()
// {
// return( TorrentUtils.getPrivate( torrent ));
// }
//
// public void
// setPrivate(
// boolean priv )
// {
// TorrentUtils.setPrivate( torrent, priv );
// }
//
// public boolean
// wasCreatedByUs()
// {
// return( TorrentUtils.isCreatedTorrent( torrent ));
// }
//
// public URL
// getMagnetURI()
//
// throws TorrentException
// {
// if ( magnet_plugin == null ){
//
// PluginInterface magnet_pi = AzureusCoreFactory.getSingleton().getPluginManager().getPluginInterfaceByClass( MagnetPlugin.class );
//
// if ( magnet_pi != null ){
//
// magnet_plugin = (MagnetPlugin)magnet_pi.getPlugin();
// }
// }
//
// if ( magnet_plugin == null ){
//
// throw( new TorrentException( "MegnetPlugin unavailable" ));
// }
//
// try{
// URL res = magnet_plugin.getMagnetURL( torrent.getHash());
//
// return( res );
//
// }catch( TOTorrentException e ){
//
// throw( new TorrentException(e ));
// }
// }
public byte[]
getHash()
{
try{
return( torrent.getHash());
}catch( TOTorrentException e ){
// Debug.printStackTrace( e );
return( null );
}
}
public long
getSize()
{
return( torrent.getSize());
}
// public String
// getComment()
// {
// return( decode(torrent.getComment()));
// }
public void
setComment(
String comment )
{
torrent.setComment( comment );
}
public long
getCreationDate()
{
return( torrent.getCreationDate());
}
// public String
// getCreatedBy()
// {
// return( decode( torrent.getCreatedBy()));
// }
public long
getPieceSize()
{
return( torrent.getPieceLength());
}
public long
getPieceCount()
{
return( torrent.getNumberOfPieces());
}
public byte[][]
getPieces()
{
try{
return( torrent.getPieces());
}catch( TOTorrentException e ){
// Debug.printStackTrace( e );
return( new byte[0][0] );
}
}
// public TorrentFile[]
// getFiles()
// {
// TOTorrentFile[] files = torrent.getFiles();
//
// TorrentFile[] res = new TorrentFile[files.length];
//
// for (int i=0;i<res.length;i++){
//
// TOTorrentFile tf = files[i];
//
// byte[][] comps = tf.getPathComponents();
//
// String name = "";
//
// for (int j=0;j<comps.length;j++){
//
// String comp = decode(comps[j]);
//
// comp = FileUtil.convertOSSpecificChars( comp, j != comps.length-1 );
//
// name += (j==0?"":File.separator)+comp;
// }
//
// res[i] = new TorrentFileImpl(name, tf.getLength());
// }
//
// return( res );
// }
//
protected void
getDecoder()
{
// We defer the getting of the decoder until it is required as this Torrent may have been
// created in order to simply remove additional properties from it before serialising it
// Indeed, this was happening and unfortunately resulting in 1) the encoding being
// serialised 2) the user being prompted for an encoding choice
try{
decoder = LocaleTorrentUtil.getTorrentEncoding( torrent );
}catch( Throwable e ){
}
}
//
// public String
// getEncoding()
// {
// getDecoder();
//
// if ( decoder != null ){
//
// return( decoder.getName());
// }
//
// return( Constants.DEFAULT_ENCODING );
// }
//
// public void
// setEncoding(String encoding)throws TorrentEncodingException {
// try {
// LocaleTorrentUtil.setTorrentEncoding(torrent, encoding);
// } catch(LocaleUtilEncodingException e) {
// throw new TorrentEncodingException("Failed to set the encoding",e);
// }
// }
//
// public void
// setDefaultEncoding() throws TorrentEncodingException {
// setEncoding(Constants.DEFAULT_ENCODING);
// }
//
protected String
decode(
byte[] data )
{
getDecoder();
if ( data != null ){
if ( decoder != null ){
try{
return( decoder.decodeString(data));
}catch( Throwable e ){
}
}
return( new String(data));
}
return( "" );
}
//
// public Object
// getAdditionalProperty(
// String name )
// {
// return( torrent.getAdditionalProperty( name ));
// }
//
// public Torrent
// removeAdditionalProperties()
// {
// try{
// TOTorrent t = TOTorrentFactory.deserialiseFromMap(torrent.serialiseToMap());
//
// t.removeAdditionalProperties();
//
// return( new TorrentImpl( t ));
//
// }catch( TOTorrentException e ){
//
// Debug.printStackTrace(e);
//
// return( this );
// }
// }
//
// public void
// setPluginStringProperty(
// String name,
// String value )
// {
// PluginInterface p = pi;
//
// if ( p == null ){
//
// p = UtilitiesImpl.getPluginThreadContext();
// }
//
// if ( p == null ){
//
// name = "<internal>." + name;
//
// }else{
//
// name = p.getPluginID() + "." + name;
// }
//
// TorrentUtils.setPluginStringProperty( torrent, name, value );
// }
//
// public String
// getPluginStringProperty(
// String name )
// {
// PluginInterface p = pi;
//
// if ( p == null ){
//
// p = UtilitiesImpl.getPluginThreadContext();
// }
//
// if ( p == null ){
//
// name = "<internal>." + name;
//
// }else{
//
// name = p.getPluginID() + "." + name;
// }
//
// return( TorrentUtils.getPluginStringProperty( torrent, name ));
// }
//
// public void
// setMapProperty(
// String name,
// Map value )
// {
// TorrentUtils.setPluginMapProperty( torrent, name, value );
// }
//
// public Map
// getMapProperty(
// String name )
// {
// return( TorrentUtils.getPluginMapProperty( torrent, name ));
// }
public Map
writeToMap()
throws TorrentException
{
try{
return( torrent.serialiseToMap());
}catch( TOTorrentException e ){
throw( new TorrentException( "Torrent::writeToMap: fails", e ));
}
}
public byte[]
writeToBEncodedData()
throws TorrentException
{
try{
Map map = torrent.serialiseToMap();
return( BEncoder.encode( map ));
}catch( Throwable e ){
throw( new TorrentException( "Torrent::writeToBEncodedData: fails", e ));
}
}
public void
writeToFile(
File file )
throws TorrentException
{
try{
// don't use TorrentUtils.writeToFile as this updates the internal torrent
// file reference an means that the torrent get's auto-written to the new
// location in future, most likley NOT the desired behaviour
torrent.serialiseToBEncodedFile( file );
}catch( TOTorrentException e ){
throw( new TorrentException( "Torrent::writeToFile: fails", e ));
}
}
protected void
updated()
{
// try{
// DownloadImpl dm = (DownloadImpl)DownloadManagerImpl.getDownloadStatic( torrent );
//
// if ( dm != null ){
//
// dm.torrentChanged();
// }
// DownloadImpl dm = (DownloadImpl)DownloadManagerImpl.getDownloadStatic( torrent );
// TransferImpl dm = (TransferImpl)DownloadManagerImpl.getDownloadStatic( torrent );
// if ( dm != null ){
System.out.println("torrent Changed has to be called");
// dm.torrentChanged();
// }
// }catch( DownloadException e ){
//
// // torrent may not be running
// }
}
//
// public void
// save()
// throws TorrentException
// {
// try{
// TorrentUtils.writeToFile( torrent );
//
// }catch( TOTorrentException e ){
//
// throw( new TorrentException( "Torrent::save Fails", e ));
// }
// }
//
// public void
// setComplete(
// File data_dir )
//
// throws TorrentException
// {
// try{
// LocaleTorrentUtil.setDefaultTorrentEncoding( torrent );
//
// DownloadManagerState download_manager_state =
// DownloadManagerStateFactory.getDownloadState( torrent );
//
// TorrentUtils.setResumeDataCompletelyValid( download_manager_state );
//
// download_manager_state.save();
//
// complete = true;
//
// }catch( Throwable e ){
//
// throw( new TorrentException("encoding selection fails", e ));
// }
// }
public boolean
isComplete()
{
// TODO: could check the download state too I guess...
return( complete );
}
// Pass LogRelation off to core objects
// /* (non-Javadoc)
// * @see org.gudy.azureus2.core3.logging.LogRelation#getLogRelationText()
// */
// public String getRelationText() {
// return propogatedRelationText(torrent);
// }
/* (non-Javadoc)
* @see org.gudy.azureus2.core3.logging.LogRelation#getQueryableInterfaces()
*/
public Object[] getQueryableInterfaces() {
return new Object[] { torrent };
}
public boolean isSimpleTorrent() {return torrent.isSimpleTorrent();}
public String
getName()
{
String name = decode( torrent.getName());
name = FileUtil.convertOSSpecificChars( name, false );
return( name );
}
@Override
public TorrentAnnounceURLList getAnnounceURLList() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getComment() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getCreatedBy() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public TorrentFile[] getFiles() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getEncoding() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setEncoding(String encoding) throws TorrentEncodingException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setDefaultEncoding() throws TorrentEncodingException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object getAdditionalProperty(String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Torrent removeAdditionalProperties() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setPluginStringProperty(String name, String value) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getPluginStringProperty(String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setMapProperty(String name, Map value) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Map getMapProperty(String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isDecentralised() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isDecentralisedBackupEnabled() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setDecentralisedBackupRequested(boolean requested) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isDecentralisedBackupRequested() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean isPrivate() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setPrivate(boolean priv) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean wasCreatedByUs() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public URL getMagnetURI() throws TorrentException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void save() throws TorrentException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setComplete(File data_dir) throws TorrentException {
throw new UnsupportedOperationException("Not supported yet.");
}
}