Rev 11114 | Rev 11925 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.controllers;import in.shop2020.model.v1.catalog.Banner;import in.shop2020.model.v1.catalog.BannerMap;import in.shop2020.model.v1.catalog.CatalogService.Client;import in.shop2020.serving.cache.EhcacheWrapper;import in.shop2020.serving.interceptors.SourceAware;import in.shop2020.serving.interceptors.TrackingInterceptor;import in.shop2020.serving.interceptors.UserAware;import in.shop2020.serving.interceptors.UserInterceptor;import in.shop2020.serving.services.PageLoaderHandler;import in.shop2020.serving.services.UserSessionInfo;import in.shop2020.serving.utils.DesEncrypter;import in.shop2020.thrift.clients.CatalogClient;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import net.sf.ehcache.CacheManager;import org.apache.log4j.Logger;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.thrift.TException;import com.opensymphony.xwork2.ValidationAwareSupport;/*** Base class for all user action handlers i.e. controllers** @author rajveer*/public abstract class BaseController extends ValidationAwareSupport implementsServletResponseAware, ServletRequestAware, UserAware, SourceAware {/****/private static final long serialVersionUID = 1L;protected Map<String, Cookie> cookiesMap = null;protected HttpServletResponse response;protected HttpServletRequest request;protected HttpSession session;protected String domainName;protected UserSessionInfo userinfo = null;private static Logger log = Logger.getLogger(Class.class);private DesEncrypter desEncrypter = new DesEncrypter(UserInterceptor.COOKIE_DECRYPTION_STRING);protected Cookie userCookie = null;protected Map<String, String> htmlSnippets;PageLoaderHandler pageLoader = null;protected long sourceId;public static Map<String,List<Banner>> activeBanners = null;public static Map<String, List<BannerMap>> allBannersMap = null;public static Map<String, List<BannerMap>> sideBannersMap = null;public void setBanners(){EhcacheWrapper<String, Map<String,List<Banner>>> bannerCache = new EhcacheWrapper<String, Map<String,List<Banner>>>(EhcacheWrapper.BANNER_CACHE_NAME, CacheManager.create());activeBanners = bannerCache.get("banner_key");if (activeBanners!=null) {log.info("Returning banners from cache");return;}try {CatalogClient catalogServiceClient = new CatalogClient();Client client = catalogServiceClient.getClient();log.info("Populating banner map");activeBanners = client.getActiveBanners();if(!activeBanners.isEmpty()){allBannersMap = new HashMap<String, List<BannerMap>>();sideBannersMap = new HashMap<String, List<BannerMap>>();for (Map.Entry<String, List<Banner>> entry :activeBanners.entrySet()){for (Banner banner : entry.getValue()){if(banner.getBannerType().getValue()==1){allBannersMap.put(banner.getBannerName(), client.getBannerMapDetails(banner.getBannerName(),banner.getBannerType()));}else{sideBannersMap.put(banner.getBannerName(), client.getBannerMapDetails(banner.getBannerName(),banner.getBannerType()));}}}}bannerCache.put("banner_key", activeBanners);log.info("Populating cache again for banners");}catch (TException e) {log.error("Unable to fetch banners ",e);}}public List<Banner> getActiveBanners() {String uri = request.getRequestURI();if (uri.equalsIgnoreCase("/")){return activeBanners.get(uri);}for (String key : activeBanners.keySet()) {if (key.equalsIgnoreCase("/") || key.equalsIgnoreCase("side-banner")){continue;}Pattern p = Pattern.compile(key+".*");Matcher m = p.matcher(uri);if (m.matches()) {return activeBanners.get(uri);}}return null;}public List<Banner> getActiveBanners(String uri) {return activeBanners.get(uri);}public List<BannerMap> getbannermapdetails(String bannerName) {return allBannersMap.get(bannerName);}public BaseController() {setBanners();pageLoader = new PageLoaderHandler();htmlSnippets = new HashMap<String, String>();}@Overridepublic void setCookiesMap(Map<String, Cookie> cookiesMap) {log.info("Received cookiesMap." + cookiesMap);this.cookiesMap = cookiesMap;}@Overridepublic void setServletResponse(HttpServletResponse response) {this.response = response;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;}@Overridepublic void setSession(HttpSession session) {this.session = session;}@Overridepublic void setUserSessionInfo(UserSessionInfo userInfo) {this.userinfo = userInfo;}@Overridepublic void setUserCookie(Cookie userCookie) {if(userCookie != null){log.info("cookie name is:" + userCookie.getName() + " value is:"+ userCookie.getValue() + " path : " + userCookie.getPath());}this.userCookie = userCookie;}@Overridepublic void setCookieDomainName(String domainName) {this.domainName = domainName;}@Overridepublic void setSourceId(long sourceId){log.info("Setting source id "+sourceId);this.sourceId = sourceId;}public String getHeaderSnippet() {String url = request.getQueryString();log.info("Query String is: " + url);if (url == null) {url = "";} else {url = "?" + url;}url = request.getRequestURI() + url;return pageLoader.getHeaderHtml(userinfo.isLoggedIn(), userinfo.getEmail(), userinfo.getTotalItems(), url, -1, true, userinfo.isPrivateDealUser());}public String getThinHeaderSnippet() {String url = request.getQueryString();log.info("Query String is: " + url);if (url == null) {url = "";} else {url = "?" + url;}url = request.getRequestURI() + url;return pageLoader.getThinHeaderHtml(userinfo.isLoggedIn(), userinfo.getEmail(), userinfo.getTotalItems(), url, 0, true);}public String getSearchBarSnippet() {//FIXME From where it is called, need to pass categoryreturn pageLoader.getSearchBarHtml(userinfo.getTotalItems(), 10000);}public String getCartWidgetSnippet() {log.info("UserInfo:" + userinfo);log.info("activeBanners.get(\"side-banner\"):" + activeBanners.get("side-banner") );return pageLoader.getCartWidgetSnippet(userinfo.getTotalItems(), userinfo.getTotalAmount(),-1,activeBanners.get("side-banner"),sideBannersMap);}public UserSessionInfo getUserInfo(){return this.userinfo;}@Overridepublic List<Cookie> getCookies() {List<Cookie> cookies = new ArrayList<Cookie>();long userId = userinfo.getUserId();if(userId != -1){String newUserinfoCookieValue = UserSessionInfo.getUserinfoCookieValueFromUserSessionInfo(userinfo);Cookie userinfoCookie = cookiesMap.get(UserInterceptor.USER_INFO_COOKIE_NAME);if( userinfoCookie == null || !newUserinfoCookieValue.equals(userinfoCookie.getValue())){log.info("Set user session info cookie if it has been changed.");userinfoCookie = new Cookie(UserInterceptor.USER_INFO_COOKIE_NAME, newUserinfoCookieValue);userinfoCookie.setMaxAge(UserInterceptor.SECONDS_IN_YEAR); // one yearuserinfoCookie.setPath("/");userinfoCookie.setDomain(domainName);cookiesMap.put(UserInterceptor.USER_INFO_COOKIE_NAME, userinfoCookie);cookies.add(userinfoCookie);}Cookie userCookie = cookiesMap.get(UserInterceptor.USER_ID_COOKIE_NAME);String encryptedUserId = desEncrypter.encrypt(userId + "");if(userCookie == null || !(encryptedUserId + "").equals(userCookie.getValue())){userinfoCookie = new Cookie(UserInterceptor.USER_ID_COOKIE_NAME, encryptedUserId);userinfoCookie.setMaxAge(UserInterceptor.SECONDS_IN_YEAR); // one yearuserinfoCookie.setPath("/");userinfoCookie.setDomain(domainName);cookiesMap.put(UserInterceptor.USER_INFO_COOKIE_NAME, userinfoCookie);cookies.add(userinfoCookie);}}return cookies;}public void clearUserCookies(){Cookie uidCookie = cookiesMap.get(UserInterceptor.USER_ID_COOKIE_NAME);uidCookie.setDomain(domainName);uidCookie.setPath("/");uidCookie.setValue("");uidCookie.setMaxAge(0);this.response.addCookie(uidCookie);Cookie uicCookie = cookiesMap.get(UserInterceptor.USER_INFO_COOKIE_NAME);uicCookie.setDomain(domainName);uicCookie.setPath("/");uicCookie.setValue("");uicCookie.setMaxAge(0);this.response.addCookie(uicCookie);}/*** Get the session_id cookie to track user session.* It also creates the new cookie using current jsessionid if it was absent.** @return sessionId*/public String getSessionId() {Cookie sessionIdCookie = cookiesMap.get(TrackingInterceptor.SESSION_ID_COOKIE);if (sessionIdCookie == null) {//session idString sessionId = request.getSession().getId();sessionIdCookie = new Cookie(TrackingInterceptor.SESSION_ID_COOKIE, sessionId);sessionIdCookie.setPath("/");if (!domainName.isEmpty()) {sessionIdCookie.setDomain(domainName);}cookiesMap.put(TrackingInterceptor.SESSION_ID_COOKIE, sessionIdCookie);response.addCookie(sessionIdCookie);}return sessionIdCookie.getValue();}public String getCookie(String cookieName, boolean isEncripted, String encriptionString) {Cookie cookie = (Cookie) cookiesMap.get(cookieName);String cookieVal = null;if (cookie != null) {cookieVal = cookie.getValue();if (isEncripted) {DesEncrypter desEncrypter = new DesEncrypter(encriptionString);cookieVal = desEncrypter.decrypt(cookieVal);}}return cookieVal;}}