/* * File : ShareItemImpl.java * Created : 31-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.sharing; import org.gudy.azureus2.core3.util.*; /** * @author parg * */ import java.util.Map; import java.io.*; import org.gudy.azureus2.plugins.sharing.*; import org.gudy.azureus2.plugins.torrent.Torrent; public class ShareItemImpl implements ShareItem { protected ShareResourceImpl resource; protected byte[] fingerprint; protected Torrent torrent; protected String torrent_save_location; protected ShareItemImpl( ShareResourceImpl _resource, byte[] _fingerprint, Torrent _torrent ) throws ShareException { resource = _resource; fingerprint = _fingerprint; torrent = _torrent; writeTorrent(); } protected ShareItemImpl( ShareResourceImpl _resource, byte[] _fingerprint, String _save_location ) throws ShareException { resource = _resource; fingerprint = _fingerprint; torrent_save_location = _save_location; } public Torrent getTorrent() throws ShareException { // TODO: we don't want to hold all torrents in memory. we probably want to // create a TorrentFacade that caches enough data to run, say, the sharing UI // and then load the torrent from file on demand. if( torrent == null ){ resource.readTorrent(this); } return( torrent ); } protected void writeTorrent() throws ShareException { if ( torrent_save_location == null ){ torrent_save_location = resource.getNewTorrentLocation(); } resource.writeTorrent( this ); } protected void setTorrent( Torrent _torrent ) { torrent = _torrent; } public File getTorrentFile() { return( resource.getTorrentFile(this)); } protected String getTorrentLocation() { return( torrent_save_location ); } public byte[] getFingerPrint() { return( fingerprint ); } protected void delete() { resource.deleteTorrent(this); } protected void serialiseItem( Map map ) { map.put( "ihash", fingerprint ); try{ map.put( "ifile", torrent_save_location.getBytes( Constants.DEFAULT_ENCODING ) ); }catch( UnsupportedEncodingException e ){ Debug.printStackTrace( e ); } } protected static ShareItemImpl deserialiseItem( ShareResourceImpl resource, Map map ) throws ShareException { try{ byte[] hash = (byte[])map.get( "ihash"); String save_location = new String((byte[])map.get("ifile"), Constants.DEFAULT_ENCODING ); return( new ShareItemImpl(resource,hash,save_location)); }catch( UnsupportedEncodingException e ){ throw( new ShareException( "internal error", e )); } } }