Subversion Repositories SmartDukaan

Rev

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