package org.limewire.core.impl.spam;
import java.util.ArrayList;
import java.util.List;
import org.limewire.core.api.search.SearchResult;
import org.limewire.core.api.spam.SpamManager;
import org.limewire.core.impl.search.RemoteFileDescAdapter;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.limegroup.gnutella.RemoteFileDesc;
import com.limegroup.gnutella.SpamServices;
@Singleton
public class SpamManagerImpl implements SpamManager {
private final com.limegroup.gnutella.spam.SpamManager spamManager;
private final SpamServices spamServices;
@Inject
public SpamManagerImpl(com.limegroup.gnutella.spam.SpamManager spamManager, SpamServices spamServices) {
this.spamManager = spamManager;
this.spamServices = spamServices;
}
@Override
public void clearFilterData() {
spamManager.clearFilterData();
}
@Override
public void handleUserMarkedGood(List<? extends SearchResult> searchResults) {
RemoteFileDesc[] remoteFileDescs = buildArray(searchResults);
spamManager.handleUserMarkedGood(remoteFileDescs);
}
@Override
public void handleUserMarkedSpam(List<? extends SearchResult> searchResults) {
RemoteFileDesc[] remoteFileDescs = buildArray(searchResults);
spamManager.handleUserMarkedSpam(remoteFileDescs);
}
private RemoteFileDesc[] buildArray(List<? extends SearchResult> searchResults) {
List<RemoteFileDesc> remoteFileDescs = new ArrayList<RemoteFileDesc>(searchResults.size());
// this can be an instance of a copy on write array list, so only iterating
// over it is safe and assumptions about its size can be wrong
for (SearchResult searchResult : searchResults) {
RemoteFileDescAdapter remoteFileDescAdapter = (RemoteFileDescAdapter) searchResult;
RemoteFileDesc remoteFileDesc = remoteFileDescAdapter.getRfd();
remoteFileDescs.add(remoteFileDesc);
}
return remoteFileDescs.toArray(new RemoteFileDesc[remoteFileDescs.size()]);
}
@Override
public void reloadIPFilter() {
spamServices.reloadIPFilter();
}
@Override
public void adjustSpamFilters() {
spamServices.adjustSpamFilters();
}
@Override
public void addToBlackList(String ipAddress) {
spamServices.blockHost(ipAddress);
}
}