Search in sources :

Example 1 with ListTool

use of org.apache.velocity.tools.generic.ListTool in project lucene-solr by apache.

the class VelocityResponseWriter method createContext.

private VelocityContext createContext(SolrQueryRequest request, SolrQueryResponse response) {
    VelocityContext context = new VelocityContext();
    // Register useful Velocity "tools"
    String locale = request.getParams().get(LOCALE);
    Map toolConfig = new HashMap();
    toolConfig.put("locale", locale);
    // TODO: add test; TODO: should this be overridable with a custom "log" named tool?
    context.put("log", log);
    context.put("esc", new EscapeTool());
    context.put("date", new ComparisonDateTool());
    context.put("list", new ListTool());
    context.put(SORT, new SortTool());
    MathTool mathTool = new MathTool();
    mathTool.configure(toolConfig);
    context.put("math", mathTool);
    NumberTool numberTool = new NumberTool();
    numberTool.configure(toolConfig);
    context.put("number", numberTool);
    DisplayTool displayTool = new DisplayTool();
    displayTool.configure(toolConfig);
    context.put("display", displayTool);
    ResourceTool resourceTool = new SolrVelocityResourceTool(request.getCore().getSolrConfig().getResourceLoader().getClassLoader());
    resourceTool.configure(toolConfig);
    context.put("resource", resourceTool);
    // Custom tools can override any of the built-in tools provided above, by registering one with the same name
    for (String name : customTools.keySet()) {
        Object customTool = SolrCore.createInstance(customTools.get(name), Object.class, "VrW custom tool: " + name, request.getCore(), request.getCore().getResourceLoader());
        if (customTool instanceof LocaleConfig) {
            ((LocaleConfig) customTool).configure(toolConfig);
        }
        context.put(name, customTool);
    }
    // custom tools _cannot_ override context objects added below, like $request and $response
    // TODO: at least log a warning when one of the *fixed* tools classes in name with a custom one, currently silently ignored
    // Turn the SolrQueryResponse into a SolrResponse.
    // QueryResponse has lots of conveniences suitable for a view
    // Problem is, which SolrResponse class to use?
    // One patch to SOLR-620 solved this by passing in a class name as
    // as a parameter and using reflection and Solr's class loader to
    // create a new instance.  But for now the implementation simply
    // uses QueryResponse, and if it chokes in a known way, fall back
    // to bare bones SolrResponseBase.
    // Can this writer know what the handler class is?  With echoHandler=true it can get its string name at least
    SolrResponse rsp = new QueryResponse();
    NamedList<Object> parsedResponse = BinaryResponseWriter.getParsedResponse(request, response);
    try {
        rsp.setResponse(parsedResponse);
        // page only injected if QueryResponse works
        // page tool only makes sense for a SearchHandler request
        context.put("page", new PageTool(request, response));
        context.put("debug", ((QueryResponse) rsp).getDebugMap());
    } catch (ClassCastException e) {
        // known edge case where QueryResponse's extraction assumes "response" is a SolrDocumentList
        // (AnalysisRequestHandler emits a "response")
        rsp = new SolrResponseBase();
        rsp.setResponse(parsedResponse);
    }
    context.put("request", request);
    context.put("response", rsp);
    return context;
}
Also used : DisplayTool(org.apache.velocity.tools.generic.DisplayTool) ResourceTool(org.apache.velocity.tools.generic.ResourceTool) HashMap(java.util.HashMap) VelocityContext(org.apache.velocity.VelocityContext) LocaleConfig(org.apache.velocity.tools.generic.LocaleConfig) EscapeTool(org.apache.velocity.tools.generic.EscapeTool) MathTool(org.apache.velocity.tools.generic.MathTool) SolrResponse(org.apache.solr.client.solrj.SolrResponse) ComparisonDateTool(org.apache.velocity.tools.generic.ComparisonDateTool) NumberTool(org.apache.velocity.tools.generic.NumberTool) QueryResponse(org.apache.solr.client.solrj.response.QueryResponse) SolrResponseBase(org.apache.solr.client.solrj.response.SolrResponseBase) ListTool(org.apache.velocity.tools.generic.ListTool) HashMap(java.util.HashMap) Map(java.util.Map) SortTool(org.apache.velocity.tools.generic.SortTool)

Aggregations

HashMap (java.util.HashMap)1 Map (java.util.Map)1 SolrResponse (org.apache.solr.client.solrj.SolrResponse)1 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)1 SolrResponseBase (org.apache.solr.client.solrj.response.SolrResponseBase)1 VelocityContext (org.apache.velocity.VelocityContext)1 ComparisonDateTool (org.apache.velocity.tools.generic.ComparisonDateTool)1 DisplayTool (org.apache.velocity.tools.generic.DisplayTool)1 EscapeTool (org.apache.velocity.tools.generic.EscapeTool)1 ListTool (org.apache.velocity.tools.generic.ListTool)1 LocaleConfig (org.apache.velocity.tools.generic.LocaleConfig)1 MathTool (org.apache.velocity.tools.generic.MathTool)1 NumberTool (org.apache.velocity.tools.generic.NumberTool)1 ResourceTool (org.apache.velocity.tools.generic.ResourceTool)1 SortTool (org.apache.velocity.tools.generic.SortTool)1