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