package org.limewire.ui.swing.filter;
import java.util.Collection;
import org.limewire.friend.api.Friend;
import org.limewire.util.Objects;
import ca.odell.glazedlists.matchers.Matcher;
/**
* Matcher used to filter a search result by its source.
*/
class SourceMatcher<E extends FilterableItem> implements Matcher<E> {
/** Source item to filter. */
private final SourceItem sourceItem;
/**
* Constructs a SourceMatcher for the specified source item.
*/
public SourceMatcher(SourceItem sourceItem) {
this.sourceItem = sourceItem;
}
/**
* Returns true if the specified filterable item matches the source item.
*/
@Override
public boolean matches(E item) {
switch (sourceItem.getType()) {
case ANONYMOUS:
return item.isAnonymous();
case ANY_FRIEND:
return (item.getFriends().size() > 0);
case FRIEND:
default:
// Compare friend names against SourceItem name.
Collection<Friend> friends = item.getFriends();
String name = sourceItem.getName();
for (Friend friend : friends) {
if (Objects.compareToNullIgnoreCase(name, friend.getRenderName(), false) == 0) {
return true;
}
}
return false;
}
}
}