You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by eh...@apache.org on 2008/12/15 20:05:21 UTC

svn commit: r726772 - in /lucene/solr/trunk/contrib/velocity/src/main: java/org/apache/solr/request/VelocityResponseWriter.java solr/conf/schema.xml

Author: ehatcher
Date: Mon Dec 15 11:05:20 2008
New Revision: 726772

URL: http://svn.apache.org/viewvc?rev=726772&view=rev
Log:
Add additional Velocity tools and layout capability

Modified:
    lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
    lucene/solr/trunk/contrib/velocity/src/main/solr/conf/schema.xml

Modified: lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java?rev=726772&r1=726771&r2=726772&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java (original)
+++ lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java Mon Dec 15 11:05:20 2008
@@ -18,9 +18,17 @@
 package org.apache.solr.request;
 
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.client.solrj.SolrResponse;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
+import org.apache.velocity.tools.generic.ComparisonDateTool;
+import org.apache.velocity.tools.generic.DateTool;
 import org.apache.velocity.tools.generic.EscapeTool;
+import org.apache.velocity.tools.generic.MathTool;
+import org.apache.velocity.tools.generic.NumberTool;
+import org.apache.velocity.tools.generic.SortTool;
 import org.apache.velocity.app.VelocityEngine;
 
 import java.io.File;
@@ -37,19 +45,47 @@
 
     VelocityContext context = new VelocityContext();
 
-    // TODO: Make this use the SolrJ API, rather than "embedded" Solr API
-    context.put("request", request);    // TODO: inject a SolrRequest instead of a SolrQueryRequest
-    context.put("response", response);  // TODO: inject a SolrResponse instead of a SolrQueryResponse
+    context.put("request", request);
+
+    SolrResponse rsp = new QueryResponse();
+    rsp.setResponse(new EmbeddedSolrServer(request.getCore()).getParsedResponse(request, response));
+    context.put("response", rsp);
+
+    // Velocity context tools - TODO: make these pluggable
     context.put("page",new PageTool(request,response));
     context.put("esc", new EscapeTool());
+    context.put("sort", new SortTool());
+    context.put("number", new NumberTool());
+    context.put("date", new ComparisonDateTool());
+    context.put("math", new MathTool());
    
+    // TODO: check for v.layout, render to string, then render v.layout's template setting $content in the context
+    String layout_template = request.getParams().get("v.layout");
+    String json_wrapper = request.getParams().get("v.json");
+    boolean wrap_response = (layout_template != null) || (json_wrapper !=null);
+    
     // create output, optionally wrap it into a json object
-    if (request.getParams().get("v.json") != null) {
+    if (wrap_response) {
       StringWriter stringWriter = new StringWriter();
       template.merge(context, stringWriter);
-      writer.write(request.getParams().get("v.json") + "(");
-      writer.write(getJSONWrap(stringWriter.toString()));
-      writer.write(')');
+      
+      if (layout_template != null) {
+        context.put("content", stringWriter.toString());
+        stringWriter = new StringWriter();
+        try {
+          engine.getTemplate(layout_template + ".vm").merge(context, stringWriter);
+        } catch (Exception e) {
+          throw new IOException(e.getMessage());
+        }
+      }
+      
+      if (json_wrapper != null) {
+        writer.write(request.getParams().get("v.json") + "(");
+        writer.write(getJSONWrap(stringWriter.toString()));
+        writer.write(')');
+      } else {  // using a layout, but not JSON wrapping
+        writer.write(stringWriter.toString());
+      }
     } else {
       template.merge(context, writer);
     }
@@ -86,7 +122,7 @@
     return request.getParams().get("v.contentType","text/html");
   }
   
-  private String getJSONWrap(String xmlResult) {
+  private String getJSONWrap(String xmlResult) {  // TODO: maybe noggit or Solr's JSON utilities can make this cleaner?
     // escape the double quotes and backslashes
     String replace1 = xmlResult.replaceAll("\\\\", "\\\\\\\\");
     replace1 = replace1.replaceAll("\\n", "\\\\n");

Modified: lucene/solr/trunk/contrib/velocity/src/main/solr/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/velocity/src/main/solr/conf/schema.xml?rev=726772&r1=726771&r2=726772&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/velocity/src/main/solr/conf/schema.xml (original)
+++ lucene/solr/trunk/contrib/velocity/src/main/solr/conf/schema.xml Mon Dec 15 11:05:20 2008
@@ -354,6 +354,7 @@
    <dynamicField name="*_f"  type="sfloat"  indexed="true"  stored="true"/>
    <dynamicField name="*_d"  type="sdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_dt" type="date"    indexed="true"  stored="true"/>
+   <dynamicField name="*"    type="string"  indexed="true"  stored="true" multiValued="true"/>
 
    <dynamicField name="random*" type="random" />