Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
317 ashish 1
/**
2
 * 
3
 */
4
package in.shop2020.serving.controllers;
5
 
536 rajveer 6
import in.shop2020.serving.services.CategoryManager;
517 rajveer 7
import in.shop2020.serving.services.PageLoaderHandler;
8
import in.shop2020.serving.services.SolrSearchService;
9
import in.shop2020.serving.utils.FileUtils;
637 rajveer 10
import in.shop2020.serving.utils.Utils;
517 rajveer 11
 
12
import java.io.File;
317 ashish 13
import java.io.IOException;
517 rajveer 14
import java.net.URLEncoder;
15
import java.util.ArrayList;
16
import java.util.Arrays;
17
import java.util.HashMap;
18
import java.util.LinkedHashMap;
19
import java.util.List;
20
import java.util.Map;
536 rajveer 21
import java.util.StringTokenizer;
317 ashish 22
 
517 rajveer 23
import org.apache.commons.lang.StringUtils;
317 ashish 24
import org.apache.juli.logging.Log;
25
import org.apache.juli.logging.LogFactory;
26
import org.apache.struts2.rest.DefaultHttpHeaders;
27
import org.apache.struts2.rest.HttpHeaders;
28
 
29
/**
517 rajveer 30
 * @author rajveer
317 ashish 31
 *
32
 */
33
public class CategoryController extends BaseController {
34
 
35
	/**
36
	 * 
37
	 */
38
	private static Log log = LogFactory.getLog(CategoryController.class);
517 rajveer 39
 
317 ashish 40
	/**
41
	 * 
42
	 */
517 rajveer 43
	private Map<String,String> htmlSnippets;
44
	private Map<String, String[]> results;
45
	private Map<String, String> snippets;
46
	private Map<String, List<String[]>> facets;
620 rajveer 47
	private List<String[]> crumbs;
517 rajveer 48
	/**
49
	 * 
50
	 */
317 ashish 51
	private String id;
52
 
536 rajveer 53
	private String categoryName;
54
 
517 rajveer 55
	private String query;
56
 
57
	private Double minPrice;
58
	private Double maxPrice;
59
 
545 rajveer 60
 
61
	private long windowSize = 20;
62
	private long page = 1;
63
	private long totalResults;
64
	private long beginIndex = 0;
65
	private String url;
66
	private String priceUrl;
67
 
317 ashish 68
	/**
69
	 * GET /category/10004
70
	 * 
71
	 */
72
    public HttpHeaders show() throws SecurityException, IOException {
73
    	log.info("id=" + id);
536 rajveer 74
    	this.categoryName = CategoryManager.getCategoryManager().getCategoryLabel(Long.parseLong(id));
75
 
76
 
517 rajveer 77
    	htmlSnippets = new HashMap<String, String>();
637 rajveer 78
 
555 chandransh 79
		htmlSnippets.put("HEADER", pageLoader.getHeaderHtml(userinfo.isLoggedIn(), userinfo.getNameOfUser()));
517 rajveer 80
		htmlSnippets.put("MAIN_MENU", pageLoader.getMainMenuHtml());
81
		htmlSnippets.put("SEARCH_BAR", pageLoader.getSearchBarHtml(userinfo.getTotalItems(), 10000));
82
		htmlSnippets.put("CUSTOMER_SERVICE", pageLoader.getCustomerServiceHtml());
637 rajveer 83
		htmlSnippets.put("MY_RESEARCH", pageLoader.getMyResearchHtml(userinfo.getUserId(), userinfo.isLoggedIn()));
84
		htmlSnippets.put("BROWSE_HISTORY", pageLoader.getBrowseHistoryHtml(userinfo.getUserId(), userinfo.isLoggedIn()));
517 rajveer 85
		htmlSnippets.put("FOOTER",pageLoader.getFooterHtml());
86
 
87
		htmlSnippets.put("CATEGORY_HEADER", pageLoader.getCategoryHeaderSnippet());
88
		htmlSnippets.put("MAIN_BANNER", "");
89
		htmlSnippets.put("SIDE_BANNER", "");
90
		htmlSnippets.put("TAB_BUTTONS", "");
545 rajveer 91
 
317 ashish 92
 
517 rajveer 93
 
94
 
95
		String[] facetDefIDs = new String[] {"Category","F_50002","F_50001",  "F_50006", "F_50007" };
96
 
97
    	String[] facetLabels = new String[] {"Category","Price", "Brand", "Data Connectivity", "Camera Resolution" 	};
98
 
99
    	String[] fqrys = this.request.getParameterValues("fq");
545 rajveer 100
 
101
    	url = "?";
536 rajveer 102
 
545 rajveer 103
 
104
 
517 rajveer 105
    	query = "*";
106
 
536 rajveer 107
    	int length = 1;
108
 
109
    	if(fqrys!= null){
110
    		length += fqrys.length;
111
    	}
112
 
620 rajveer 113
 
536 rajveer 114
    	String[] newfqrys = new String[length];
545 rajveer 115
    	newfqrys[0] = "Category:"+categoryName;
116
    	String urlCrumb = url;
536 rajveer 117
 
620 rajveer 118
    	this.crumbs = new ArrayList<String[]>();
119
    	List<String> arrList = Arrays.asList(facetDefIDs);
536 rajveer 120
    	for(int i=1; i<length; i++) {
121
    		newfqrys[i] = fqrys[i-1];
545 rajveer 122
    		urlCrumb += "&fq=" + URLEncoder.encode(fqrys[i-1], "UTF-8");
123
    		priceUrl += "&fq=" + URLEncoder.encode(fqrys[i-1], "UTF-8");
620 rajveer 124
    		String filterUrl = url;
125
    		String facetName = StringUtils.split(fqrys[i-1], ":")[0];
126
    		String facetValue = StringUtils.split(fqrys[i-1], ":")[1];
127
    		String facetLabel = facetLabels[arrList.indexOf(facetName)];
128
    		for(int j=1; j<length; j++) {
129
    			if(i==j){
130
    				continue;
131
    			}
132
    			filterUrl += "&fq=" + URLEncoder.encode(fqrys[j-1], "UTF-8");
133
	    	}
134
    		String[] acrumb = new String[] { facetLabel, facetValue, filterUrl };
135
    		log.info("acrumb=" + Arrays.toString(acrumb));
136
    		this.crumbs.add(acrumb);
137
 
536 rajveer 138
    	}
545 rajveer 139
		url = urlCrumb;
140
 
141
    	if(this.request.getParameter("page") != null){
142
    		this.page = Long.parseLong(this.request.getParameter("page"));
143
    		this.beginIndex = this.windowSize * (this.page-1);
144
    	}
145
    	if(this.request.getParameter("min-price") != null){
146
    		this.minPrice = (new Double(this.request.getParameter("min-price")));
147
    		url= url + "&min-price=" + this.request.getParameter("min-price");
148
    	}
149
    	if(this.request.getParameter("max-price") != null){
150
    		this.maxPrice = (new Double(this.request.getParameter("max-price")));
151
    		url= url + "&max-price=" + this.request.getParameter("max-price");
152
    	}    	
536 rajveer 153
 
569 rajveer 154
    	SolrSearchService search = new SolrSearchService(query, newfqrys, facetDefIDs, (page-1)*windowSize, windowSize, minPrice, maxPrice, 10000, null);
517 rajveer 155
    	this.results = new LinkedHashMap<String, String[]>();
156
    	this.results =  search.getResultMap(); 
157
 
158
 
159
    	this.facets = new LinkedHashMap<String, List<String[]>>();
160
    	String qryString = this.request.getQueryString();
161
    	log.info("qryString=" + qryString);
162
 
163
    	for (int i=0; i<facetDefIDs.length; i++) {
164
    		String facetDefID = facetDefIDs[i];
165
    		String facetLabel = facetLabels[i];
166
    		HashMap<String, Integer> facetDetailMap = search.getFacetDetails(facetDefID);
167
    		if(facetDetailMap==null)
168
    			continue;
169
    		List<String[]> values = new ArrayList<String[]>();
545 rajveer 170
    		String drilldownURL = new String();
517 rajveer 171
    		for(String facet: facetDetailMap.keySet()){
536 rajveer 172
 
545 rajveer 173
    			/*
536 rajveer 174
    			if(qryString != null){
175
    				drilldownURL = qryString;
545 rajveer 176
 
536 rajveer 177
    			}
545 rajveer 178
    			*/
179
        		drilldownURL = url;
536 rajveer 180
 
545 rajveer 181
 
182
    			drilldownURL = drilldownURL + "&fq=" + facetDefID + ":" + 
183
    				URLEncoder.encode(facet, "UTF-8");
517 rajveer 184
      			String[] afacet = new String[] { facet, 
185
      					facetDetailMap.get(facet).toString(), drilldownURL  };
186
      			values.add(afacet);    
545 rajveer 187
 
517 rajveer 188
    		}
189
 
190
    		this.facets.put(facetLabel, values);
191
    	}
192
 
193
 
545 rajveer 194
 
517 rajveer 195
    	Map<String, Double> priceMap = search.getPriceStatsMap();
196
    	if(priceMap != null){
197
    		this.minPrice = priceMap.get("min");
198
    		this.maxPrice = priceMap.get("max");
199
    	}else{
200
    		this.minPrice = 0.0;
201
    		this.maxPrice = 0.0;
202
    	}
545 rajveer 203
    	this.totalResults = search.getTotalResults();
317 ashish 204
        return new DefaultHttpHeaders("show");
205
    }
206
 
207
    public void setId(String id) {
536 rajveer 208
    	StringTokenizer tokenizer = new StringTokenizer(id,"-");
209
    	while(tokenizer.hasMoreTokens()){
210
    		this.id = tokenizer.nextToken();
211
    	}
317 ashish 212
    }
213
 
214
    public String getId() {
215
    	return this.id;
216
    }
517 rajveer 217
 
536 rajveer 218
    public String getCategoryName() {
219
    	return this.categoryName;
220
    }
221
 
222
 
517 rajveer 223
    public String getHeaderSnippet(){
224
		return htmlSnippets.get("HEADER");
225
	}
226
 
227
	public String getMainMenuSnippet(){
228
		return htmlSnippets.get("MAIN_MENU");
229
	}
230
 
231
	public String getSearchBarSnippet(){
232
		return htmlSnippets.get("SEARCH_BAR");
233
	}
234
 
235
	public String getCustomerServiceSnippet(){
236
		return htmlSnippets.get("CUSTOMER_SERVICE");
237
	}
238
 
239
	public String getSearchHeaderSnippet(){
240
		return htmlSnippets.get("SEARCH_HEADER");
241
	}
242
 
243
	public String getSearchDetailsSnippet(){
244
		return htmlSnippets.get("SEARCH_DETAILS");
245
	}
246
 
247
	public String getMyResearchSnippet(){
248
		return htmlSnippets.get("MY_RESEARCH");
249
	}
569 rajveer 250
 
251
	public String getBrowseHistorySnippet(){
252
		return htmlSnippets.get("BROWSE_HISTORY");
253
	}
254
 
517 rajveer 255
	public String getFooterSnippet(){
256
		return htmlSnippets.get("FOOTER");
257
	}
258
 
259
	public String getJsFileSnippet(){
260
		return htmlSnippets.get("JS_FILES");
261
	}
262
 
263
	public String getCssFileSnippet(){
264
		return htmlSnippets.get("CSS_FILES");
265
	}
266
 
267
    public String getQuery() {
268
    	return this.query;
269
    }
270
 
271
 
272
    public Map<String, String[]> getResults() {
273
    	return this.results;
274
    }
275
 
276
    public Map<String, List<String[]>> getFacets() {
277
    	return this.facets;
278
    }
279
 
545 rajveer 280
    public long getTotalResults(){
281
    	return totalResults;
282
    }
283
 
284
    public String getUrl(){
285
    	return this.url;
286
    }
287
 
288
    public String getPriceUrl(){
289
    	return this.priceUrl;
290
    }
291
 
292
	public long getBeginIndex(){
293
		if(totalResults>0)
294
			return beginIndex+1;
295
		return beginIndex;
296
	}
297
 
298
	public long getTotalPages() {
299
		return 1 + totalResults/windowSize;
300
	}
301
 
302
	public long getCurrentPage() {
303
		return this.page;
304
	}
305
 
517 rajveer 306
    public Double getMinPrice() {
307
    	return this.minPrice;
308
    }
309
 
310
    public Double getMaxPrice() {
311
    	return this.maxPrice;
312
    }
313
 
627 rajveer 314
    public List<String[]> getCrumbs() {
315
    	return this.crumbs;
316
    }
317
 
517 rajveer 318
    public Map<String, String> getSnippets() throws Exception {
319
    	if(results != null){
320
    		snippets = new HashMap<String, String>();	
321
	    	for(String docId: results.keySet()){
536 rajveer 322
				snippets.put(docId, FileUtils.read( Utils.EXPORT_ENTITIES_PATH + docId + File.separator +"CategorySnippet.html"));
517 rajveer 323
			}
324
    	}
325
		return snippets;
326
    }
327
 
317 ashish 328
}