package org.unc.hive.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.unc.hive.server.VocabularyService;
import edu.unc.ils.mrc.hive.ir.lucene.search.AutocompleteTerm;
/**
* Autocomplete servlet returns JSON/JSONP formatted data for use with JQuery
*
* Parameters:
* cv: vocabulary name (required)
* term: text (required)
* callback: callback function for JSONP support (optional)
*/
public class AutocompleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
static final String PARAM_CALLBACK = "callback";
public AutocompleteServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String path = context.getRealPath("");
VocabularyService service = VocabularyService.getInstance(path + "/WEB-INF/conf/hive.properties");
String vocab = request.getParameter("cv");
String term = request.getParameter("term");
String callback = request.getParameter("callback");
List<AutocompleteTerm> terms =null;
try {
terms = service.suggestTermsFor(vocab, term, 15);
} catch (Exception e) {
e.printStackTrace();
}
StringBuffer json = new StringBuffer("\n[");
int i = 0;
if (terms != null)
{
for (AutocompleteTerm t: terms) {
if (i > 0)
json.append(",\n");
json.append("{");
json.append("\"id\": \"");
json.append(t.getId());
json.append("\", \"label\": \"");
json.append(t.getValue());
json.append("\", \"value\": \"");
json.append(t.getValue());
json.append("\"}");
i++;
}
}
json.append("\n]");
if (callback != null)
{
json.insert(0, callback + "(");
json.append(")");
}
response.setContentType("text/json");
PrintWriter writer = new PrintWriter(response.getOutputStream());
writer.write(json.toString());
writer.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}