Subversion Repositories SmartDukaan

Rev

Rev 20400 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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