Subversion Repositories SmartDukaan

Rev

Rev 507 | Blame | Last modification | View Log | RSS feed

/**
 * 
 */


package in.shop2020.serving.controllers;

import in.shop2020.serving.services.UserSessionInfo;
import in.shop2020.serving.utils.Utils;

import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.struts2.interceptor.CookiesAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

/**
 * Base class for all user action handlers i.e. controllers
 * 
 * @author rajveer
 *
 */
public abstract class BaseController implements  CookiesAware, ServletResponseAware, ServletRequestAware {
        private Map cookiesMap;
    protected HttpServletResponse response;
    protected HttpServletRequest request;
    protected HttpSession session;
    
    UserSessionInfo userinfo = null;
    
    Cookie tempCookie = null;
    
        private static Log log = LogFactory.getLog(BaseController.class);
        
        public BaseController() {
        }
        
        public Map getCookiesMap() {
                return cookiesMap;
        }
        
        @Override
        public void setCookiesMap(Map cookiesMap) {
                this.cookiesMap = cookiesMap;
        }
        
        @Override
        public void setServletResponse(HttpServletResponse response)
        {
                this.response = response;
                if(tempCookie != null){
                        this.response.addCookie(tempCookie);
                }
        }
        
        @Override
        public void setServletRequest(HttpServletRequest request){
                this.request = request;
                this.session = request.getSession();
                setUserSessionInfo();
        }
        
        public void removeUserSessionInfo(){
                if(this.session.getAttribute("userinfo") != null ){
                        this.session.removeAttribute("userinfo");
                }
        }

        
        public void setUserSessionInfo(){
                if(this.session.getAttribute("userinfo") != null ){
                        userinfo = (UserSessionInfo) this.session.getAttribute("userinfo");
                }else{
                        processCookiesInfo();
                        //userinfo = new UserSessionInfo();
                }
                this.session.setAttribute("userinfo",userinfo);
        }
        
        public void processCookiesInfo(){
                Cookie[] cookies = this.request.getCookies();
                boolean foundUserIdCookie = false;
                boolean foundSessionIdCookie = false;
                long userId = 0 ;
                long sessionId = 0;
                
                if(cookies != null){
                    for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                        Cookie cookie1 = cookies[loopIndex];
                        if (cookie1.getName().equals("userid")) {
                            System.out.println("User Id is = " + cookie1.getValue());
                            userId = Long.parseLong(cookie1.getValue());
                            foundUserIdCookie = true;
                        }
                        if (cookie1.getName().equals("sessionid")) {
                            System.out.println("Session Id is = " + cookie1.getValue());
                            sessionId = Long.parseLong(cookie1.getValue());
                            foundSessionIdCookie = true;
                        }
                }
                }
        
                if(foundUserIdCookie){
                        if(Utils.isUserLoggedIn(userId)){
                                userinfo = new UserSessionInfo(userId, false);
                                
                        }
                        else{
                                if(foundSessionIdCookie){
                                        userinfo = new UserSessionInfo(sessionId, true);        
                                }else{
                                        userinfo = new UserSessionInfo();
                                    for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                                        Cookie cookie1 = cookies[loopIndex];
                                        if (cookie1.getName().equals("userid")) {
                                                cookie1.setMaxAge(0);
                                                //cookie1.setPath(cookie1.getPath());
                                                        //cookie1.setDomain(cookie1.getDomain());
                                                tempCookie = cookie1;
                                        }
                                        }
                                }
                        }
                }                       
                else{  
                        if(foundSessionIdCookie){
                                userinfo = new UserSessionInfo(sessionId, true);                        
                        }
                        else{
                                userinfo = new UserSessionInfo();
                                Cookie cookie1 = new Cookie("sessionid", userinfo.getSessionId()+"");
                        tempCookie = cookie1;
                        }
                }
        }

        public String getEmail(){
                return userinfo.getEmail();
        }

        public String getNameOfUser(){
                return userinfo.getNameOfUser();
        }

}