package com.limegroup.gnutella.gui.actions;
import java.awt.event.ActionEvent;
import java.text.MessageFormat;
import java.util.Collections;
import javax.swing.AbstractAction;
import javax.swing.Action;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.gui.search.NamedMediaType;
import com.limegroup.gnutella.gui.search.SearchInformation;
import com.limegroup.gnutella.gui.search.SearchMediator;
import com.limegroup.gnutella.util.I18NConvert;
import com.limegroup.gnutella.util.NameValue;
import com.limegroup.gnutella.util.StringUtils;
import com.limegroup.gnutella.xml.LimeXMLDocument;
/**
* A class that triggers an xml search query for a single xml field and its
* value.
* <p>
* After the search request has been sent the search panel is focused.
*/
public class SearchXMLFieldAction extends AbstractAction {
private NameValue displayPair;
private String name;
private String value;
private NamedMediaType nm;
/**
* Constructs an xml field search action.
* @param displayPair used for constructing the name of the action
* @param name the name of the xml field
* @param value the value of the xmls field
* @param nm the mediatype whose xml schema is used for the xml query
*/
public SearchXMLFieldAction(NameValue displayPair, String name,
String value,
NamedMediaType nm) {
this.displayPair = displayPair;
this.name = name;
this.value = value;
this.nm = nm;
String formatted = MessageFormat.format(
GUIMediator.getStringResource("SEARCH_XML_FIELD_ACTION_NAME"),
new Object[] { displayPair.getName(), displayPair.getValue() }
);
if(formatted.length() > 80)
formatted = formatted.substring(0, 80) + "...";
putValue(Action.NAME, formatted);
}
public void actionPerformed(ActionEvent e) {
NameValue namValue = new NameValue(name, I18NConvert.instance().getNorm(value));
String xml = (new LimeXMLDocument(Collections.singletonList(namValue),
nm.getSchema().getSchemaURI())).getXMLString();
SearchMediator.triggerSearch(SearchInformation.createTitledKeyWordSearch
(StringUtils.createQueryString(value, true), xml,
nm.getMediaType(),
displayPair.getName() + ": "
+ displayPair.getValue()));
GUIMediator.instance().setWindow(GUIMediator.SEARCH_INDEX);
}
}