Subversion Repositories SmartDukaan

Rev

Rev 8578 | Rev 9155 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
317 ashish 1
package in.shop2020.serving.controllers;
410 rajveer 2
 
8578 kshitij.so 3
import in.shop2020.model.v1.catalog.Banner;
4
import in.shop2020.model.v1.catalog.BannerMap;
5
import in.shop2020.model.v1.catalog.CatalogService.Client;
3561 rajveer 6
import in.shop2020.serving.interceptors.SourceAware;
3185 vikas 7
import in.shop2020.serving.interceptors.TrackingInterceptor;
781 vikas 8
import in.shop2020.serving.interceptors.UserAware;
2907 rajveer 9
import in.shop2020.serving.interceptors.UserInterceptor;
637 rajveer 10
import in.shop2020.serving.services.PageLoaderHandler;
419 rajveer 11
import in.shop2020.serving.services.UserSessionInfo;
2998 rajveer 12
import in.shop2020.serving.utils.DesEncrypter;
8578 kshitij.so 13
import in.shop2020.thrift.clients.CatalogClient;
416 rajveer 14
 
2907 rajveer 15
import java.util.ArrayList;
555 chandransh 16
import java.util.HashMap;
2907 rajveer 17
import java.util.List;
410 rajveer 18
import java.util.Map;
8917 kshitij.so 19
import java.util.regex.Matcher;
20
import java.util.regex.Pattern;
410 rajveer 21
 
416 rajveer 22
import javax.servlet.http.Cookie;
23
import javax.servlet.http.HttpServletRequest;
410 rajveer 24
import javax.servlet.http.HttpServletResponse;
416 rajveer 25
import javax.servlet.http.HttpSession;
410 rajveer 26
 
832 rajveer 27
import org.apache.log4j.Logger;
416 rajveer 28
import org.apache.struts2.interceptor.ServletRequestAware;
410 rajveer 29
import org.apache.struts2.interceptor.ServletResponseAware;
8578 kshitij.so 30
import org.apache.thrift.TException;
410 rajveer 31
 
595 rajveer 32
import com.opensymphony.xwork2.ValidationAwareSupport;
33
 
317 ashish 34
/**
35
 * Base class for all user action handlers i.e. controllers
36
 * 
545 rajveer 37
 * @author rajveer
317 ashish 38
 */
781 vikas 39
public abstract class BaseController extends ValidationAwareSupport implements
8578 kshitij.so 40
ServletResponseAware, ServletRequestAware, UserAware, SourceAware {
595 rajveer 41
	/**
42
	 * 
43
	 */
44
	private static final long serialVersionUID = 1L;
555 chandransh 45
	protected Map<String, Cookie> cookiesMap = null;
781 vikas 46
	protected HttpServletResponse response;
47
	protected HttpServletRequest request;
48
	protected HttpSession session;
1713 vikas 49
	protected String domainName;
781 vikas 50
	protected UserSessionInfo userinfo = null;
832 rajveer 51
	private static Logger log = Logger.getLogger(Class.class);
2998 rajveer 52
	private DesEncrypter desEncrypter = new DesEncrypter(UserInterceptor.COOKIE_DECRYPTION_STRING);
8578 kshitij.so 53
 
781 vikas 54
	protected Cookie userCookie = null;
55
 
56
	protected Map<String, String> htmlSnippets;
57
 
58
	PageLoaderHandler pageLoader = null;
8578 kshitij.so 59
 
3561 rajveer 60
	protected long sourceId;
8578 kshitij.so 61
 
62
	public static Map<String,List<Banner>> activeBanners = null;
63
	public static Map<String, List<BannerMap>> allBannersMap = null;
64
 
65
	public void setBanners(){
66
		if(activeBanners==null){
67
			try {
68
				CatalogClient catalogServiceClient = new CatalogClient();
69
				Client client = catalogServiceClient.getClient();
70
				log.info("Populating banner map"); 
71
				activeBanners = client.getActiveBanners();
72
				if(!activeBanners.isEmpty()){
73
					allBannersMap = new HashMap<String, List<BannerMap>>();
74
					for (Map.Entry<String, List<Banner>> entry :activeBanners.entrySet()){
75
						for (Banner banner : entry.getValue()){
76
							allBannersMap.put(banner.getBannerName(), client.getBannerMapDetails(banner.getBannerName()));
77
						}
78
					}
79
				}
80
			}
81
			catch (TException e) {
82
				log.error("Unable to fetch banners ",e);
83
			}
84
		}
85
	}
86
 
87
	public List<Banner> getActiveBanners() {
88
		setBanners();
89
		String uri = request.getRequestURI();
8917 kshitij.so 90
		if (uri.equalsIgnoreCase("/")){
91
			return activeBanners.get(uri);
92
		}
93
		for (String key : activeBanners.keySet()) {
94
			if (key.equalsIgnoreCase("/") || key.equalsIgnoreCase("side-banner")){
95
				continue;
96
			}
97
			Pattern p = Pattern.compile(key+".*");
98
			Matcher m = p.matcher(uri);
99
			if (m.matches()) {
100
				return activeBanners.get(uri);
101
			}
102
		}
103
		return null;
8578 kshitij.so 104
	}
105
 
8917 kshitij.so 106
	public List<Banner> getActiveBanners(String uri) {
107
		setBanners();
108
		if (uri.equalsIgnoreCase("/")){
109
			return activeBanners.get(uri);
110
		}
111
		for (String key : activeBanners.keySet()) {
112
			if (key.equalsIgnoreCase("/") || key.equalsIgnoreCase("side-banner")){
113
				continue;
114
			}
115
			Pattern p = Pattern.compile(key+".*");
116
			Matcher m = p.matcher(uri);
117
			if (m.matches()) {
118
				return activeBanners.get(uri);
119
			}
120
		}
121
		return null;
122
	}
123
 
8578 kshitij.so 124
	public List<BannerMap> getbannermapdetails(String bannerName) {
125
		return allBannersMap.get(bannerName);
126
	}
127
 
8917 kshitij.so 128
	public BaseController() {
8578 kshitij.so 129
		setBanners();
637 rajveer 130
		pageLoader = new PageLoaderHandler();
650 rajveer 131
		htmlSnippets = new HashMap<String, String>();
416 rajveer 132
	}
781 vikas 133
 
410 rajveer 134
	@Override
781 vikas 135
	public void setCookiesMap(Map<String, Cookie> cookiesMap) {
2998 rajveer 136
		log.info("Received cookiesMap.");
410 rajveer 137
		this.cookiesMap = cookiesMap;
138
	}
781 vikas 139
 
410 rajveer 140
	@Override
781 vikas 141
	public void setServletResponse(HttpServletResponse response) {
410 rajveer 142
		this.response = response;
143
	}
781 vikas 144
 
416 rajveer 145
	@Override
781 vikas 146
	public void setServletRequest(HttpServletRequest request) {
416 rajveer 147
		this.request = request;
419 rajveer 148
	}
555 chandransh 149
 
781 vikas 150
	@Override
151
	public void setSession(HttpSession session) {
152
		this.session = session;
555 chandransh 153
	}
154
 
781 vikas 155
	@Override
156
	public void setUserSessionInfo(UserSessionInfo userInfo) {
157
		this.userinfo = userInfo;
419 rajveer 158
	}
159
 
781 vikas 160
	@Override
161
	public void setUserCookie(Cookie userCookie) {
828 rajveer 162
		if(userCookie != null){
837 vikas 163
			log.info("cookie name is:" +  userCookie.getName() + "   value is:"+ userCookie.getValue() + " path : " + userCookie.getPath());
828 rajveer 164
		}
781 vikas 165
		this.userCookie = userCookie;
419 rajveer 166
	}
424 rajveer 167
 
1713 vikas 168
	@Override
8578 kshitij.so 169
	public void setCookieDomainName(String domainName) {
170
		this.domainName = domainName;
171
	}
172
 
3561 rajveer 173
	@Override
174
	public void setSourceId(long sourceId){
8578 kshitij.so 175
		log.info("Setting source id "+sourceId);
3561 rajveer 176
		this.sourceId = sourceId;
177
	}
8578 kshitij.so 178
 
781 vikas 179
	public String getHeaderSnippet() {
924 vikas 180
		String url = request.getQueryString();
181
		log.info("Query String is: " + url);
182
		if (url == null) {
183
			url = "";
184
		} else {
185
			url = "?" + url;
186
		}
187
		url = request.getRequestURI() + url;
6152 amit.gupta 188
		return pageLoader.getHeaderHtml(userinfo.isLoggedIn(), userinfo.getEmail(), userinfo.getTotalItems(), url, -1, true);
637 rajveer 189
	}
8578 kshitij.so 190
 
6903 anupam.sin 191
	public String getThinHeaderSnippet() {
8578 kshitij.so 192
		String url = request.getQueryString();
193
		log.info("Query String is: " + url);
194
		if (url == null) {
195
			url = "";
196
		} else {
197
			url = "?" + url;
198
		}
199
		url = request.getRequestURI() + url;
200
		return pageLoader.getThinHeaderHtml(userinfo.isLoggedIn(), userinfo.getEmail(), userinfo.getTotalItems(), url, 0, true);
201
	}
637 rajveer 202
 
781 vikas 203
	public String getSearchBarSnippet() {
793 rajveer 204
		//FIXME From where it is called, need to pass category
637 rajveer 205
		return pageLoader.getSearchBarHtml(userinfo.getTotalItems(), 10000);
206
	}
781 vikas 207
 
3830 chandransh 208
	public String getCartWidgetSnippet() {
8917 kshitij.so 209
		return pageLoader.getCartWidgetSnippet(userinfo.getTotalItems(), userinfo.getTotalAmount(),-1,activeBanners.get("side-banner"),allBannersMap);
3830 chandransh 210
	}
211
 
8578 kshitij.so 212
 
793 rajveer 213
	public UserSessionInfo getUserInfo(){
214
		return this.userinfo;
215
	}
8578 kshitij.so 216
 
2907 rajveer 217
	@Override
218
	public List<Cookie> getCookies() {
219
		List<Cookie> cookies = new ArrayList<Cookie>();
220
		long userId = userinfo.getUserId();
221
		if(userId != -1){
222
			String newUserinfoCookieValue = UserSessionInfo.getUserinfoCookieValueFromUserSessionInfo(userinfo);
223
			Cookie userinfoCookie = cookiesMap.get(UserInterceptor.USER_INFO_COOKIE_NAME); 
224
			if( userinfoCookie == null ||  !newUserinfoCookieValue.equals(userinfoCookie.getValue())){
225
				log.info("Set user session info cookie if it has been changed.");
226
				userinfoCookie = new Cookie(UserInterceptor.USER_INFO_COOKIE_NAME, newUserinfoCookieValue);
227
				userinfoCookie.setMaxAge(UserInterceptor.SECONDS_IN_YEAR); // one year
228
				userinfoCookie.setPath("/");
229
				userinfoCookie.setDomain(domainName);
230
				cookiesMap.put(UserInterceptor.USER_INFO_COOKIE_NAME, userinfoCookie);
231
				cookies.add(userinfoCookie);
232
			}
233
			Cookie userCookie = cookiesMap.get(UserInterceptor.USER_ID_COOKIE_NAME);
2998 rajveer 234
			String encryptedUserId = desEncrypter.encrypt(userId + "");
2907 rajveer 235
			if(userCookie == null || !(encryptedUserId + "").equals(userCookie.getValue())){
236
				userinfoCookie = new Cookie(UserInterceptor.USER_ID_COOKIE_NAME, encryptedUserId);
237
				userinfoCookie.setMaxAge(UserInterceptor.SECONDS_IN_YEAR); // one year
238
				userinfoCookie.setPath("/");
239
				userinfoCookie.setDomain(domainName);
240
				cookiesMap.put(UserInterceptor.USER_INFO_COOKIE_NAME, userinfoCookie);
241
				cookies.add(userinfoCookie);
242
			}
243
		}
244
		return cookies;
245
	}
8578 kshitij.so 246
 
2907 rajveer 247
	public void clearUserCookies(){
248
		Cookie uidCookie = cookiesMap.get(UserInterceptor.USER_ID_COOKIE_NAME);
249
		uidCookie.setDomain(domainName);
250
		uidCookie.setPath("/");
251
		uidCookie.setValue("");
252
		uidCookie.setMaxAge(0);
253
		this.response.addCookie(uidCookie);
8578 kshitij.so 254
 
2907 rajveer 255
		Cookie uicCookie = cookiesMap.get(UserInterceptor.USER_INFO_COOKIE_NAME);
256
		uicCookie.setDomain(domainName);
257
		uicCookie.setPath("/");
258
		uicCookie.setValue("");
259
		uicCookie.setMaxAge(0);
260
		this.response.addCookie(uicCookie);
261
	}
8578 kshitij.so 262
 
3203 vikas 263
	/**
264
	 * Get the session_id cookie to track user session.
265
	 * It also creates the new cookie using current jsessionid if it was absent. 
266
	 * 
267
	 * @return sessionId
268
	 */
3185 vikas 269
	public String getSessionId() {
8578 kshitij.so 270
		Cookie sessionIdCookie = cookiesMap.get(TrackingInterceptor.SESSION_ID_COOKIE);
271
		if (sessionIdCookie == null) {
272
			//session id
273
			String sessionId = request.getSession().getId();
274
			sessionIdCookie = new Cookie(TrackingInterceptor.SESSION_ID_COOKIE, sessionId);
275
			sessionIdCookie.setPath("/");
276
			if (!domainName.isEmpty()) {
277
				sessionIdCookie.setDomain(domainName);
278
			}
279
			cookiesMap.put(TrackingInterceptor.SESSION_ID_COOKIE, sessionIdCookie);
280
			response.addCookie(sessionIdCookie);
281
		}
282
		return sessionIdCookie.getValue();
3185 vikas 283
	}
8578 kshitij.so 284
 
3859 vikas 285
	public String getCookie(String cookieName, boolean isEncripted, String encriptionString) {
8578 kshitij.so 286
		Cookie cookie = (Cookie) cookiesMap.get(cookieName);
287
		String cookieVal = null;
288
		if (cookie != null) {
289
			cookieVal = cookie.getValue();
290
			if (isEncripted) {
291
				DesEncrypter desEncrypter = new DesEncrypter(encriptionString);
292
				cookieVal = desEncrypter.decrypt(cookieVal);
293
			}
294
		}
295
		return cookieVal;
3859 vikas 296
	}
8578 kshitij.so 297
}