Subversion Repositories SmartDukaan

Rev

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

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