Rev 536 | Blame | Last modification | View Log | RSS feed
/****/package in.shop2020.serving.controllers;import in.shop2020.serving.pages.PageContentKeys;import in.shop2020.serving.pages.PageEnum;import in.shop2020.serving.pages.PageManager;import in.shop2020.serving.services.PageLoaderHandler;import in.shop2020.serving.services.SolrSearchService;import in.shop2020.serving.utils.FileUtils;import in.shop2020.util.Utils;import java.io.File;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;import org.apache.juli.logging.Log;import org.apache.juli.logging.LogFactory;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.rest.DefaultHttpHeaders;import org.apache.struts2.rest.HttpHeaders;/*** @author rajveer**/public class SearchController extends BaseController {/****/private static Log log = LogFactory.getLog(SearchController.class);private Map<String,String> htmlSnippets = new HashMap<String, String>();/****/private Map<String, String[]> results;/****/private Map<String, String> snippets;/****/private Map<String, List<String[]>> facets = null;/****/private List<String[]> crumbs;private String query;private Double minPrice = null;private Double maxPrice = null;private long windowSize = 10;private long page = 1;private long totalResults;private long beginIndex = 0;private String url;private String priceUrl;/**** @return* @throws UnsupportedEncodingException*/// GET /querypublic HttpHeaders index() throws UnsupportedEncodingException {// Something we need to figure outPageLoaderHandler pageLoader = new PageLoaderHandler();htmlSnippets.put("HEADER", pageLoader.getHeaderHtml(userinfo.getUserId(), userinfo.isSessionId(), userinfo.getNameOfUser()));htmlSnippets.put("MAIN_MENU", pageLoader.getMainMenuHtml());htmlSnippets.put("SEARCH_BAR", pageLoader.getSearchBarHtml(userinfo.getTotalItems(), 10000));htmlSnippets.put("CUSTOMER_SERVICE", pageLoader.getCustomerServiceHtml());htmlSnippets.put("MY_RESEARCH", pageLoader.getMyResearchHtml(userinfo.getUserId(), userinfo.isSessionId()));htmlSnippets.put("FOOTER",pageLoader.getFooterHtml());htmlSnippets.put("FOOTER",pageLoader.getFooterHtml());htmlSnippets.put("SEARCH_HEADER","");htmlSnippets.put("SEARCH_DETAILS","");log.info("this.request=" + this.request);//url = this.request.getRequestURL();query = this.request.getParameter("q");url = "q="+ URLEncoder.encode(query, "UTF-8");priceUrl = url;if(this.request.getParameter("page") != null){this.page = Long.parseLong(this.request.getParameter("page"));this.beginIndex = this.windowSize * (this.page-1);}if(this.request.getParameter("min-price") != null){this.minPrice = (new Double(this.request.getParameter("min-price")));url= url + "&min-price=" + this.request.getParameter("min-price");}if(this.request.getParameter("max-price") != null){this.maxPrice = (new Double(this.request.getParameter("max-price")));url= url + "&max-price=" + this.request.getParameter("max-price");}String[] fqrys = this.request.getParameterValues("fq");this.crumbs = new ArrayList<String[]>();String strCrumb = "";String urlCrumb = "";if(query != null) {strCrumb = query;urlCrumb = url;this.crumbs.add(new String[] { strCrumb, urlCrumb } );log.info("acrumb=" +Arrays.toString(new String[] { strCrumb, urlCrumb }));}else {}if(fqrys != null) {log.info("fqrys=" + Arrays.toString(fqrys));for(int i=0; i<fqrys.length; i++) {String facetName = StringUtils.split(fqrys[i], ":")[0];String facetValue = StringUtils.split(fqrys[i], ":")[1];// facetqueries.put(StringUtils.split(fqrys[i], ":")[0], StringUtils.split(fqrys[i], ":")[1]);//strCrumb += " " + facetValue;strCrumb = facetValue;urlCrumb += "&fq=" + URLEncoder.encode(fqrys[i], "UTF-8");priceUrl += "&fq=" + URLEncoder.encode(fqrys[i], "UTF-8");String[] acrumb = new String[] { strCrumb, urlCrumb };log.info("acrumb=" + Arrays.toString(acrumb));this.crumbs.add(acrumb);}}url = urlCrumb;/*** FIXME facet definition ids*/// Hard coded for now// long[] facetDefIDs = new long[] {50001, 50003, 50004, 50005, 50006,// 50007, 50008, 50009};String[] facetDefIDs = new String[] {"Category","F_50002","F_50001", "F_50006", "F_50007" };/* All facets. Removing 5 of themString[] facetDefIDs = new String[] {"Category","F_50002","F_50001", "F_50003", "F_50004", "F_50005", "F_50006","F_50007", "F_50008", "F_50009"};*//*** FIXME facet labels*/// Hard-coded for now/*String[] facetLabels = new String[] {"Category","Price","Brand", "Form Factor", "Carry In Pocket", "Cellular Technologies","Data Connectivity", "Camera Resolution", "Built-in Memory","Talk time"};*/String[] facetLabels = new String[] {"Category","Price","Brand", "Data Connectivity", "Camera Resolution"};SolrSearchService search = new SolrSearchService(query, fqrys, facetDefIDs, (page-1)*windowSize, windowSize, minPrice, maxPrice);this.results = new LinkedHashMap<String, String[]>();this.results = search.getResultMap();// FacetsString qryString = this.request.getQueryString();log.info("qryString=" + qryString);this.facets = new LinkedHashMap<String, List<String[]>>();for (int i=0; i<facetDefIDs.length; i++) {String facetDefID = facetDefIDs[i];String facetLabel = facetLabels[i];HashMap<String, Integer> facetDetailMap = search.getFacetDetails(facetDefID);if(facetDetailMap==null)continue;List<String[]> values = new ArrayList<String[]>();for(String facet: facetDetailMap.keySet()){String drilldownURL = url;drilldownURL += "&fq=" + facetDefID + ":" +URLEncoder.encode(facet, "UTF-8");String[] afacet = new String[] { facet,facetDetailMap.get(facet).toString(), drilldownURL };values.add(afacet);}this.facets.put(facetLabel, values);}Map<String, Double> priceMap = search.getPriceStatsMap();if(priceMap != null){this.minPrice = priceMap.get("min");this.maxPrice = priceMap.get("max");}else{this.minPrice = 0.0;this.maxPrice = 0.0;}this.totalResults = search.getTotalResults();return new DefaultHttpHeaders("index").disableCaching();}public Map<String, String> getSnippets() throws Exception {if(results != null){snippets = new HashMap<String, String>();for(String docId: results.keySet()){snippets.put(docId, FileUtils.read( Utils.EXPORT_ENTITIES_PATH + docId + File.separator +"SearchSnippet.html"));}}return snippets;}/**** @return*/public String getQuery() {return this.query;}/**** @return*/public Map<String, String[]> getResults() {return this.results;}/**** @return*/public Map<String, List<String[]>> getFacets() {return this.facets;}public long getTotalResults(){return totalResults;}public String getUrl(){return this.url;}public String getPriceUrl(){return this.priceUrl;}public long getBeginIndex(){if(totalResults>0)return beginIndex+1;return beginIndex;}public long getTotalPages() {return 1 + totalResults/windowSize;}public long getCurrentPage() {return this.page;}public Double getMinPrice() {return this.minPrice;}public Double getMaxPrice() {return this.maxPrice;}/**** @return*/public List<String[]> getCrumbs() {return this.crumbs;}/****/public String getHeaderSnippet(){return htmlSnippets.get("HEADER");}public String getMainMenuSnippet(){return htmlSnippets.get("MAIN_MENU");}public String getSearchBarSnippet(){return htmlSnippets.get("SEARCH_BAR");}public String getCustomerServiceSnippet(){return htmlSnippets.get("CUSTOMER_SERVICE");}public String getSearchHeaderSnippet(){return htmlSnippets.get("SEARCH_HEADER");}public String getSearchDetailsSnippet(){return htmlSnippets.get("SEARCH_DETAILS");}public String getMyResearchSnippet(){return htmlSnippets.get("MY_RESEARCH");}public String getFooterSnippet(){return htmlSnippets.get("FOOTER");}public String getJsFileSnippet(){return htmlSnippets.get("JS_FILES");}public String getCssFileSnippet(){return htmlSnippets.get("CSS_FILES");}}