package com.limegroup.gnutella.stubs; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Vector; import com.limegroup.gnutella.FileDesc; import com.limegroup.gnutella.FileManager; import com.limegroup.gnutella.Response; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.messages.QueryRequest; import com.limegroup.gnutella.xml.LimeXMLDocument; /** * A simple FileManager that shares one file of (near) infinite length. */ public class FileManagerStub extends FileManager { Map _urns,_files; List _descs; FileDescStub fdStub = new FileDescStub(); public static URN _notHave =null; static { try{ _notHave= URN.createSHA1Urn("urn:sha1:PLSTHIPQGSSZTS5FJUPAKUZZZZZZZZZZ"); }catch(IOException ignored){} } List removeRequests = new LinkedList(); public FileDesc get(int i) { if (i < _descs.size()) return (FileDesc)_descs.get(i); return fdStub; } public boolean isValidIndex(int i) { return true; } public FileDesc getFileDescForUrn(URN urn) { if(urn.toString().equals(FileDescStub.DEFAULT_URN)) return fdStub; else if (urn.equals(_notHave)) return null; else if (_urns.containsKey(urn)) return (FileDesc)_urns.get(urn); else return new FileDescStub("other.txt"); } public boolean shouldIncludeXMLInResponse(QueryRequest qr) { return false; } public void addXMLToResponse(Response r, FileDesc fd) { ; } public boolean isValidXMLMatch(Response r, LimeXMLDocument doc) { return true; } public FileManagerStub(Map urns,List descs) { super(); _urns = urns; _descs = descs; } public FileManagerStub(){ super(); _urns = new HashMap(); _descs = new Vector(); } public void setFiles(Map m) { _files = m; } public FileDesc getFileDescForFile(File f) { if (_files==null) return fdStub; return (FileDesc)_files.get(f); } public void fileChanged(File f) { throw new UnsupportedOperationException(); } public List getRemoveRequests() { return removeRequests; } protected synchronized FileDesc removeFileIfShared(File f, boolean notify) { removeRequests.add(f); return super.removeFileIfShared(f, notify); } }