package plugins; import com.atlassian.jira.issue.index.DefaultIndexManager; import com.atlassian.jira.issue.search.parameters.lucene.SingleFieldSingleValueLuceneParameter; import com.opensymphony.user.User; import electric.xml.Element; import org.apache.log4j.Logger; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.*; import org.ofbiz.core.entity.GenericValue; /** * See http://wiki.apache.org/lucene-java/LuceneFAQ#head-0cda565d913389773ca9c3246bde894c3e99084e for how to invert the sense of matching using All_Filter * This class used FreeTextParameter as an example. */ public class AllParameter extends SingleFieldSingleValueLuceneParameter { private static final Logger log = Logger.getLogger(AllParameter.class); private String elementName; public AllParameter() { } public AllParameter(String name, String value) { this(name, name, value); } public AllParameter(String name, String elementName, String value) { super(name); this.elementName = elementName; log.debug("AllParameter ctor " + name + ", " + value); addValue(value); } public Query getQuery(GenericValue project, User searcher) throws ParseException { String searchTerm = getValues().iterator().next().toString(); log.debug("searchTerm: " + searchTerm); if (searchTerm.equalsIgnoreCase("none")) { searchTerm = getName(); Query q1 = new MatchAllDocsQuery(); Query q2 = QueryParser.parse(searchTerm, getName(), DefaultIndexManager.ANALYZER_FOR_SEARCHING); BooleanQuery query = new BooleanQuery(); query.add(q1, BooleanClause.Occur.MUST); // To find issues without the field set, add a clause to // discard all issues where the field is set as detected by the // artificial index value. query.add(q2, BooleanClause.Occur.MUST_NOT); return query; } // This is the same as FreeTextSearcher return QueryParser.parse(searchTerm, getName(), DefaultIndexManager.ANALYZER_FOR_SEARCHING); } public void setXml(Element el) { super.setXml(el); if (el.getAttribute("value") != null) addValue(el.getAttributeValue("value")); else addValue(null); elementName = el.getName(); } protected String getXmlElementName() { if (elementName != null) { return elementName; } else { log.warn("elementName is null, returning the name attribute"); return getName(); } } protected String getQueryStringPrefix() { return getName(); } }