1 16 package org.outerj.daisy.httpconnector.handlers; 17 18 import org.mortbay.http.HttpRequest; 19 import org.mortbay.http.HttpResponse; 20 import org.outerj.daisy.repository.Repository; 21 import org.outerj.daisy.repository.LocaleHelper; 22 import org.outerj.daisy.repository.VariantKey; 23 import org.outerj.daisy.repository.VariantKeys; 24 import org.outerj.daisy.repository.query.QueryManager; 25 import org.outerj.daisy.httpconnector.RequestHandler; 26 import org.outerj.daisy.httpconnector.HttpUtil; 27 import org.outerx.daisy.x10.SearchResultDocument; 28 29 import java.util.Map ; 30 import java.util.List ; 31 import java.util.Iterator ; 32 import java.util.HashMap ; 33 34 public class QueryHandler implements RequestHandler { 35 public String getPathPattern() { 36 return "/query"; 37 } 38 39 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 40 if (request.getMethod().equals(HttpRequest.__GET)) { 41 String query = HttpUtil.getStringParam(request, "q"); 42 String locale = HttpUtil.getStringParam(request, "locale"); 43 String returnKeysParam = request.getParameter("returnKeys"); 44 boolean returnKeys = returnKeysParam != null && returnKeysParam.equals("true"); 45 String extraCond = request.getParameter("extraCondition"); 46 47 QueryManager queryManager = repository.getQueryManager(); 48 49 Map queryOptions = null; 50 List queryOptionsList = request.getParameterValues("queryOption"); 51 if (queryOptionsList != null && queryOptionsList.size() > 0) { 52 queryOptions = new HashMap (); 53 Iterator queryOptionsIt = queryOptionsList.iterator(); 54 while (queryOptionsIt.hasNext()) { 55 String option = (String )queryOptionsIt.next(); 56 int eqPos = option.indexOf('='); 57 if (eqPos == -1) 58 throw new RuntimeException ("Missing equal (=) sign in query option: " + option); 59 queryOptions.put(option.substring(0, eqPos), option.substring(eqPos + 1)); 60 } 61 } 62 63 if (returnKeys) { 64 VariantKey[] keys = queryManager.performQueryReturnKeys(query, extraCond, queryOptions, LocaleHelper.parseLocale(locale)); 65 new VariantKeys(keys).getXml().save(response.getOutputStream()); 66 response.commit(); 67 } else { 68 SearchResultDocument searchResultDocument = queryManager.performQuery(query, extraCond, queryOptions, LocaleHelper.parseLocale(locale)); 69 searchResultDocument.save(response.getOutputStream()); 70 response.commit(); 71 } 72 } else { 73 response.sendError(HttpResponse.__405_Method_Not_Allowed); 74 } 75 } 76 } 77 | Popular Tags |