package org.limewire.ui.swing.search; import java.awt.event.ActionEvent; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; import javax.swing.AbstractAction; import javax.swing.JMenu; import org.limewire.core.api.endpoint.RemoteHost; import org.limewire.friend.api.FriendPresence; import org.limewire.ui.swing.util.I18n; import com.google.inject.Inject; import com.google.inject.Provider; public class RemoteHostMenuFactory { private final Provider<FriendPresenceActions> remoteHostActions; @Inject public RemoteHostMenuFactory(final Provider<FriendPresenceActions> remoteHostActions){ this.remoteHostActions = remoteHostActions; } /** * @param allHosts the hosts to add to the menu - duplicates will be ignored */ public JMenu createBrowseMenu(Collection<RemoteHost> allHosts){ //list of unique presenceIds used to check for duplicate hosts final Set<RemoteHost> uniqueHosts = new TreeSet<RemoteHost>(new RemoteHostComparator()); uniqueHosts.addAll(allHosts); JMenu browse = new JMenu(I18n.tr("Browse Files")); //hiding browse all users until memory issues are cleared up // if(uniqueHosts.size() > 1){ // browse.add(new AbstractAction("All Users") { // @Override // public void actionPerformed(ActionEvent e) { // remoteHostActions.get().viewLibrariesOf(Collections2.transform(uniqueHosts, new Function<RemoteHost, FriendPresence>() { // @Override // public FriendPresence apply(RemoteHost from) { // return from.getFriendPresence(); // } // })); // } // }); // browse.addSeparator(); // } for (RemoteHost host : uniqueHosts) { browse.add(new BrowseAction(host)); } return browse; } private class BrowseAction extends AbstractAction { private FriendPresence presence; public BrowseAction(RemoteHost host) { super(host.getFriendPresence().getFriend().getRenderName()); this.presence = host.getFriendPresence(); setEnabled(host.isBrowseHostEnabled()); } @Override public void actionPerformed(ActionEvent e) { remoteHostActions.get().viewLibrariesOf(Collections.singleton(presence)); } } private static class RemoteHostComparator implements Comparator<RemoteHost> { @Override public int compare(RemoteHost o1, RemoteHost o2) { return o1.getFriendPresence().getPresenceId().compareTo(o2.getFriendPresence().getPresenceId()); } } }