package com.limegroup.gnutella.stubs; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashSet; import java.util.Set; import com.limegroup.gnutella.ErrorService; import com.limegroup.gnutella.IncompleteFileDesc; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.altlocs.AlternateLocation; import com.limegroup.gnutella.altlocs.AlternateLocationCollection; /** * A stub that is identical to FileDescStub. The code uses instanceof, * so we need this stub for Partial files. * * It also stubs out some methods. Feel free to stub out more methods as * need arises. */ public class IncompleteFileDescStub extends IncompleteFileDesc { public static final String urn = "urn:sha1:PLSTHIPQGSSZTS5FJUPAKUZWUGYQYPFB"; public static final Set set; private static Set localSet2,globalSet; public Set localSet; private boolean _activelyDownloading; private AlternateLocationCollection _altlocCollection,_pushCollection; private byte [] _ranges; public static final int size = 1126400; static { set = new HashSet(); globalSet=new HashSet(); try { set.add(URN.createSHA1Urn(urn)); globalSet.addAll(set); } catch(IOException ioe) { ErrorService.error(ioe); } } public IncompleteFileDescStub() { this("abc.txt"); } public IncompleteFileDescStub(String name) { super(new File(name), set, 0,name,size,null); localSet=new HashSet(); } public IncompleteFileDescStub(String name, URN urn, int index) { super(new File(name), createUrnSet(urn),index,name,size,null); localSet=localSet2; } private static Set createUrnSet(URN urn) { localSet2 = new HashSet(); localSet2.add(urn); globalSet.add(urn); return localSet2; } public boolean containsUrn(URN urn) { if (globalSet.contains(urn)) return true; else return super.containsUrn(urn); } public InputStream createInputStream() { return new InputStream() { public int read() { return 'a'; } public int read(byte[] b) { for(int i=0; i < b.length; i++) b[i] = (byte)'a'; return b.length; } }; } public long getFileSize() { return size; } public URN getSHA1Urn() { if (localSet.isEmpty()) return super.getSHA1Urn(); else return (URN)localSet.toArray()[0]; } /* (non-Javadoc) * @see com.limegroup.gnutella.IncompleteFileDesc#getRangesAsByte() */ public byte[] getRangesAsByte() { return _ranges; } public void setRangesByte(byte [] what) { _ranges=what; } /* (non-Javadoc) * @see com.limegroup.gnutella.FileDesc#getAlternateLocationCollection() */ public AlternateLocationCollection getAlternateLocationCollection() { return _altlocCollection; } public AlternateLocationCollection getPushAlternateLocationCollection() { return _pushCollection; } public void setAlternateLocationCollection(AlternateLocationCollection what) { _altlocCollection=what; } public void setPushAlternateLocationCollection(AlternateLocationCollection what) { _pushCollection=what; } public boolean addVerified(AlternateLocation al) { return _altlocCollection.add(al); } public boolean remove(AlternateLocation al) { return _altlocCollection.remove(al); } public void setActivelyDownloading(boolean yes) { _activelyDownloading=yes; } public boolean isActivelyDownloading() { return _activelyDownloading; } }