package org.apache.lucene.queryparser.flexible.aqp.nodes; import org.apache.lucene.queryparser.flexible.messages.MessageImpl; import org.apache.lucene.queryparser.flexible.core.QueryNodeError; import org.apache.lucene.queryparser.flexible.core.messages.QueryParserMessages; import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode; import org.apache.lucene.queryparser.flexible.core.nodes.QueryNodeImpl; import org.apache.lucene.queryparser.flexible.core.parser.EscapeQuerySyntax; import org.apache.lucene.search.SolrCacheWrapper; public class PythonQueryNode extends QueryNodeImpl implements QueryNode { private boolean useIntBits = false; @SuppressWarnings("rawtypes") private SolrCacheWrapper cacheWrapper; private String pythonFunctionName; @SuppressWarnings("rawtypes") public PythonQueryNode(QueryNode query, SolrCacheWrapper cache) { if (query == null) { throw new QueryNodeError(new MessageImpl( QueryParserMessages.PARAMETER_VALUE_NOT_SUPPORTED, "query", "null")); } assert cache != null; allocate(); setLeaf(false); add(query); cacheWrapper = cache; } public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser) { if (getChild() == null) return ""; String leftParenthensis = ""; String rightParenthensis = ""; if (getChild() != null && getChild() instanceof PythonQueryNode) { leftParenthensis = "("; rightParenthensis = ")"; } return leftParenthensis + "#" + getChild().toQueryString(escapeSyntaxParser) + rightParenthensis ; } public String toString() { return "<python>\n" + getChild().toString() + "\n</python>"; } public QueryNode getChild() { return getChildren().get(0); } /* * Indicates whether intbitsets should be used as a transport mechanism * between java na python */ public boolean useIntBitSet() { return useIntBits; } public void setIntBitSet(boolean v) { useIntBits = v; } /* * The PythonQuery will need how to translate remote system IDs into * lucene ids. This wrapper should provide that functionality * This should not be null */ @SuppressWarnings("rawtypes") public SolrCacheWrapper getCacheWrapper() { return cacheWrapper; } @SuppressWarnings("rawtypes") public void setCacheWrapper(SolrCacheWrapper cache) { cacheWrapper = cache; } /* * The remote endpoint has its own name - this value should not * be exposed for the end-user to change. This function can return * null, in which case the PythonQuery will use the default target */ public String getPythonFunctionName() { return pythonFunctionName; } public void setPythonFunctionName(String v) { pythonFunctionName = v; } }