package com.limegroup.gnutella.gui.actions; import java.awt.event.ActionEvent; import java.text.MessageFormat; import javax.swing.AbstractAction; import javax.swing.Action; import com.limegroup.gnutella.MediaType; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.search.SearchInformation; import com.limegroup.gnutella.gui.search.SearchMediator; /** * Provides a search action. * <p> * After the search has been sent the search panel is focused. */ public class SearchAction extends AbstractAction { private SearchInformation info; /** * Constructs an action that searches a space separated list of keywords. * * @throws IllegalArgumentException if the constructed search information * is not valid. */ public SearchAction(String keywords) { this(SearchInformation.createKeywordSearch (keywords, null, MediaType.getAnyTypeMediaType()), "SEARCH_FOR_KEYWORDS_ACTION_NAME"); } /** * Constructs an action that triggers a search for the given search * information. * @param info * @throws IllegalArgumentException if the search information is not * {@link SearchMediator#validateInfo(SearchInformation) valid} */ public SearchAction(SearchInformation info) { this(info, "SEARCH_ACTION_NAME"); } /** * Constructs an action that triggers a search for the given search * information. * @param info * @param messageKey the key that surrounds the title of the search information, e.g * "Search for: {0}", {0} is replaced by the title of the search information * @throws IllegalArgumentException if the search information is not * {@link SearchMediator#validateInfo(SearchInformation) valid} */ public SearchAction(SearchInformation info, String messageKey){ this.info = info; putValue(Action.NAME, MessageFormat.format (GUIMediator.getStringResource(messageKey), new Object[] { info.getTitle() })); if (SearchMediator.validateInfo(info) != SearchMediator.QUERY_VALID) { throw new IllegalArgumentException("invalid search info"); } } public void actionPerformed(ActionEvent e) { SearchMediator.triggerSearch(info); GUIMediator.instance().setWindow(GUIMediator.SEARCH_INDEX); } }