1 16 package org.outerj.daisy.httpconnector.handlers; 17 18 import org.outerj.daisy.httpconnector.RequestHandler; 19 import org.outerj.daisy.repository.Repository; 20 import org.outerj.daisy.repository.LocaleHelper; 21 import org.outerj.daisy.repository.query.QueryManager; 22 import org.outerj.daisy.repository.query.FacetConf; 23 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 24 import org.mortbay.http.HttpRequest; 25 import org.mortbay.http.HttpResponse; 26 import org.outerx.daisy.x10.FacetedQueryRequestDocument; 27 import org.outerx.daisy.x10.FacetedQueryResultDocument; 28 import org.apache.xmlbeans.XmlOptions; 29 30 import java.util.Map ; 31 import java.util.Locale ; 32 33 public class FacetedQueryHandler implements RequestHandler { 34 public String getPathPattern() { 35 return "/facetedQuery"; 36 } 37 38 public void handleRequest(Map matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception { 39 if (request.getMethod().equals(HttpRequest.__POST)) { 40 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 41 FacetedQueryRequestDocument.FacetedQueryRequest facetedRequest = FacetedQueryRequestDocument.Factory.parse(request.getInputStream(), xmlOptions).getFacetedQueryRequest(); 42 String query = facetedRequest.getQuery(); 43 FacetedQueryRequestDocument.FacetedQueryRequest.FacetConfs.FacetConf[] facetConfsXml = facetedRequest.getFacetConfs().getFacetConfArray(); 44 FacetConf[] facetConfs = new FacetConf[facetConfsXml.length]; 45 for (int i = 0; i < facetConfs.length; i++) { 46 facetConfs[i] = new FacetConf(); 47 facetConfs[i].setIsFacet(facetConfsXml[i].getIsFacet()); 48 facetConfs[i].setMaxValues(facetConfsXml[i].getMaxValues()); 49 facetConfs[i].setSortAscending(facetConfsXml[i].getSortAscending()); 50 facetConfs[i].setSortOnValue(facetConfsXml[i].getSortOnValue()); 51 } 52 Locale locale = LocaleHelper.parseLocale(facetedRequest.getLocale()); 53 54 QueryManager queryManager = repository.getQueryManager(); 55 FacetedQueryResultDocument result = queryManager.performFacetedQuery(query, facetConfs, facetedRequest.getChunk().getOffset(), facetedRequest.getChunk().getLength(), locale); 56 result.save(response.getOutputStream()); 57 response.commit(); 58 } else { 59 response.sendError(HttpResponse.__405_Method_Not_Allowed); 60 } 61 } 62 } 63 | Popular Tags |