/* * Created on Jul 9, 2013 * Created by Paul Gardner * * Copyright 2013 Azureus Software, Inc. 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; version 2 of the License only. * * 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. */ package org.gudy.azureus2.pluginsimpl.local.download; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.plugins.download.Download; import org.gudy.azureus2.plugins.download.DownloadException; import org.gudy.azureus2.plugins.download.DownloadStub; import org.gudy.azureus2.plugins.torrent.Torrent; import org.gudy.azureus2.plugins.torrent.TorrentAttribute; import com.aelitis.azureus.util.MapUtils; public class DownloadStubImpl implements DownloadStub { private final DownloadManagerImpl manager; private final String name; private final byte[] hash; private final long size; private final String save_path; private final DownloadStubFileImpl[] files; private final Map<String,Object> gm_map; private DownloadImpl temp_download; private Map<String,Object> attributes; protected DownloadStubImpl( DownloadManagerImpl _manager, DownloadImpl _download, Map<String,Object> _gm_map ) { manager = _manager; temp_download = _download; name = temp_download.getName(); Torrent torrent = temp_download.getTorrent(); hash = torrent.getHash(); size = torrent.getSize(); save_path = temp_download.getSavePath(); DownloadStubFile[] _files = temp_download.getStubFiles(); gm_map = _gm_map; files = new DownloadStubFileImpl[_files.length]; for ( int i=0;i<files.length;i++){ files[i] = new DownloadStubFileImpl( _files[i] ); } } protected DownloadStubImpl( DownloadManagerImpl _manager, Map<String,Object> _map ) { manager = _manager; hash = (byte[])_map.get( "hash" ); name = MapUtils.getMapString( _map, "name", null ); size = MapUtils.getMapLong( _map, "s", 0 ); save_path = MapUtils.getMapString( _map, "l", null ); gm_map = (Map<String,Object>)_map.get( "gm" ); List<Map<String,Object>> file_list = (List<Map<String,Object>>)_map.get( "files" ); if ( file_list == null ){ files = new DownloadStubFileImpl[0]; }else{ files = new DownloadStubFileImpl[file_list.size()]; for ( int i=0;i<files.length;i++){ files[i] = new DownloadStubFileImpl((Map)file_list.get(i)); } } attributes = (Map<String,Object>)_map.get( "attr" ); } public Map<String,Object> exportToMap() { Map<String,Object> map = new HashMap<String,Object>(); map.put( "hash", hash ); map.put( "s", size ); MapUtils.setMapString(map, "name", name ); MapUtils.setMapString(map, "l", save_path ); map.put( "gm", gm_map ); List<Map<String,Object>> file_list = new ArrayList<Map<String,Object>>(); map.put( "files", file_list ); for ( DownloadStubFileImpl file: files ){ file_list.add( file.exportToMap()); } if ( attributes != null ){ map.put( "attr", attributes ); } return( map ); } public boolean isStub() { return( true ); } protected void setStubbified() { temp_download = null; } public Download destubbify() throws DownloadException { if ( temp_download != null ){ return( temp_download ); } return( manager.destubbify( this )); } public String getName() { return( name ); } public byte[] getTorrentHash() { return( hash ); } public long getTorrentSize() { return( size ); } public String getSavePath() { return( save_path ); } public DownloadStubFile[] getStubFiles() { return( files ); } public long getLongAttribute( TorrentAttribute attribute ) { if ( attributes == null ){ return( 0 ); } Long l = (Long)attributes.get( attribute.getName()); if ( l == null ){ return( 0 ); } return( l ); } public void setLongAttribute( TorrentAttribute attribute, long value) { if ( attributes == null ){ attributes = new HashMap(); } attributes.put( attribute.getName(), value ); if ( temp_download == null ){ manager.updated( this ); } } public Map getGMMap() { return( gm_map ); } public void remove() { manager.remove( this ); } protected static class DownloadStubFileImpl implements DownloadStubFile { private final File file; private final long length; protected DownloadStubFileImpl( DownloadStubFile stub_file ) { file = stub_file.getFile(); length = stub_file.getLength(); } protected DownloadStubFileImpl( Map map ) { file = new File( MapUtils.getMapString(map, "file", null )); length = (Long)map.get( "len" ); } protected Map exportToMap() { Map map = new HashMap(); map.put( "file", file.getAbsolutePath()); map.put( "len", length ); return( map ); } public File getFile() { return( file ); } public long getLength() { return( length ); } } }