package org.limewire.core.impl.search;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.limewire.core.api.Category;
import org.limewire.core.api.FilePropertyKey;
import org.limewire.core.api.URN;
import org.limewire.core.api.endpoint.RemoteHost;
import org.limewire.core.api.search.SearchResult;
import org.limewire.core.impl.search.MockSearch.MockRemoteHost;
public class MockSearchResult implements Cloneable, SearchResult {
public MockSearchResult(){}
private MockURN urn = null;
private List<RemoteHost> sources = new ArrayList<RemoteHost>();
private Map<FilePropertyKey, Object> properties = new HashMap<FilePropertyKey, Object>();
private String extension;
private Category resultType;
private long size;
private boolean spam = false;
private String magnetURL;
public void addSource(String host) {
sources.add(new MockRemoteHost(host));
}
@Override
protected Object clone() throws CloneNotSupportedException {
MockSearchResult copy = (MockSearchResult) super.clone();
// Copy contents of all the collection fields so they aren't shared.
copy.sources = new ArrayList<RemoteHost>();
for (RemoteHost rh : sources)
copy.sources.add(rh);
copy.properties = new HashMap<FilePropertyKey, Object>();
for (FilePropertyKey key : properties.keySet()) {
copy.properties.put(key, properties.get(key));
}
return copy;
}
@Override
public String getFileExtension() {
return extension;
}
@Override
public Object getProperty(FilePropertyKey key) {
return properties.get(key);
}
@Override
public Category getCategory() {
return resultType;
}
@Override
public long getSize() {
return size;
}
@Override
public List<RemoteHost> getSources() {
return sources;
}
@Override
public URN getUrn() {
return urn;
}
public void setExtension(String extension) {
this.extension = extension;
}
public void setProperty(FilePropertyKey key, Object value) {
properties.put(key, value);
}
public void setResultType(Category resultType) {
this.resultType = resultType;
}
public void setSize(long size) {
this.size = size;
}
@Override
public String toString() {
return getClass().getName() + ": " + getProperty(FilePropertyKey.NAME) + "spam: " + spam;
}
@Override
public boolean isSpam() {
return spam;
}
public void setSpam(boolean spam) {
this.spam = spam;
}
@Override
public String getFileName() {
String fileName = "";
if (getProperty(FilePropertyKey.NAME) != null) {
fileName = getProperty(FilePropertyKey.NAME).toString();
}
if (getFileExtension() != null) {
fileName += "." + getFileExtension();
}
return fileName;
}
@Override
public String getFileNameWithoutExtension() {
return (String)getProperty(FilePropertyKey.NAME);
}
public void setUrn(String string) {
this.urn = new MockURN(string);
}
private final static class MockURN implements URN {
private String urn;
public MockURN(String urn) {
this.urn = urn;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MockURN) {
MockURN mockURN = (MockURN) obj;
return urn.equals(mockURN.urn);
}
return false;
}
@Override
public int hashCode() {
return urn.hashCode();
}
@Override
public int compareTo(URN o) {
if (o instanceof MockURN) {
MockURN urnObj = (MockURN) o;
return urn.compareTo(urnObj.urn);
}
return -1;
}
@Override
public String toString() {
return urn;
}
}
public void setMagnetURL(String magnet) {
this.magnetURL = magnet;
}
@Override
public String getMagnetURL() {
return magnetURL;
}
public int getRelevance() {
return 0;
}
public boolean isLicensed() {
return false;
}
}