@Override
  public void removeSessionAttribute(String key) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    SessionDataInterface sessionData = null;

    System.out.println("Removing session data for key: " + key);

    LoginSessionInterface loginSession = null;

    try {
      sessionData =
          loginSessionDataRepository.findBySessionKey(
              cookieValidation.getCookieValue(request, "XA_ID"), key);
      if (sessionData != null) {
        loginSessionDataRepository.delete(sessionData.getDataId());
        System.out.println("Remove data from Session data Table");
      }
    } catch (SpartanPersistenceException e1) {
      System.out.println("Requested Session Id not found");
    } catch (Exception e1) {
      System.out.println("Requested Session Id not found");
    }
    session.removeAttribute(key);
  }
  @Override
  public void setSessionAttributeForString(String key, String value) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    session.setAttribute(key, value);
    LoginSessionInterface loginSession = null;
    SessionDataInterface sessionData = null;
    try {
      sessionData =
          loginSessionDataRepository.findBySessionKey(
              cookieValidation.getCookieValue(request, "XA_ID"), key);
      if (sessionData != null) {
        sessionData.setStringValue(value);
        sessionData.setDataType(DATA_TYPE.STRING.value);
        loginSessionDataRepository.update(sessionData);
      } else {
        loginSessionDataRepository.saveSessionData(
            session.getAttribute("userId").toString(),
            runtimeLogInfoHelper.getCustomerId(),
            DATA_TYPE.STRING.value,
            null,
            value,
            null,
            null,
            null,
            cookieValidation.getCookieValue(request, "XA_ID"),
            key);
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  @Override
  public void removeSessionAttribute(String key) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    SessionDataInterface sessionData = null;

    System.out.println("Removing session data for key: " + key);

    LoginSessionInterface loginSession = null;

    try {
      sessionData =
          loginSessionDataRepository.findBySessionKey(
              cookieValidation.getCookieValue(request, "XA_ID"), key);
      if (sessionData != null) {
        loginSessionDataRepository.delete(sessionData.getDataId());
        System.out.println("Remove data from Session data Table");
      }
      // loginSession =
      // loginSessionInterfaceRepository.findById(session.getAttribute("usidHash").toString());

    } catch (SpartanPersistenceException e1) {
      System.out.println("Requested Session Id not found");
    } catch (Exception e1) {
      System.out.println("Requested Session Id not found");
    }
    session.removeAttribute(key);
    /*if (loginSession != null) {

    	String sessionData = loginSession.getSessionData();
    	try {
    		JSONObject sessionDataObject = new JSONObject(sessionData);
    		sessionDataObject.remove(key);
    		updateSession(loginSession, sessionDataObject.toString());
    	} catch (JSONException e) {
    		e.printStackTrace();
    	}
    }*/
  }
  @Override
  public <T> Object getSessionDataForObject(String key, Class clazz) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    SessionDataInterface sessionData = null;
    try {
      if (session.getAttribute(key) != null) {
        return new JSONObjectMapperHelper().fromJSON(session.getAttribute(key).toString(), clazz);
      }
      sessionData =
          loginSessionDataRepository.findBySessionKey(
              cookieValidation.getCookieValue(request, "XA_ID"), key);
      if (sessionData != null) {
        if (sessionData.getDataType() == 5) {
          session.setAttribute(key, sessionData.getJsonValue());

          return new JSONObjectMapperHelper().fromJSON(sessionData.getJsonValue(), clazz);
        }
      }
    } catch (Exception e) {
    }
    return null;
  }
 @Override
 public void getAllSessionAttributes(String appSessionId)
     throws SpartanPersistenceException, Exception {
   HttpServletRequest request =
       ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
   HttpSession session = request.getSession();
   // Iterate JSONObject
   List<SessionDataInterface> sessionData =
       loginSessionDataRepository.findByAppSessionId(appSessionId);
   for (SessionDataInterface sessiondata : sessionData) {
     if (sessiondata.getBooleanValue() != null) {
       session.setAttribute(sessiondata.getSessionKey(), sessiondata.getBooleanValue());
     }
     if (sessiondata.getNumberValue() != null) {
       session.setAttribute(sessiondata.getSessionKey(), sessiondata.getNumberValue());
     }
     if (sessiondata.getDateTimeValue() != null) {
       session.setAttribute(sessiondata.getSessionKey(), sessiondata.getDateTimeValue());
     }
     if (sessiondata.getJsonValue() != null) {
       session.setAttribute(sessiondata.getSessionKey(), sessiondata.getJsonValue());
     }
     if (sessiondata.getStringValue() != null) {
       session.setAttribute(sessiondata.getSessionKey(), sessiondata.getStringValue());
     }
   }
 }
  @Override
  public Object getSessionData(String key) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    if (session.getAttribute(key) != null) {
      System.out.println("Returning session data from session for key: " + key);
      return session.getAttribute(key);
    } else {
      try {
        SessionDataInterface sessionData = null;
        sessionData =
            loginSessionDataRepository.findBySessionKey(
                cookieValidation.getCookieValue(request, "XA_ID"), key);
        if (sessionData != null) {
          if (sessionData.getDataType() == 1) {
            session.setAttribute(key, sessionData.getNumberValue());
          } else if (sessionData.getDataType() == 2) {
            session.setAttribute(key, sessionData.getDateTimeValue());

          } else if (sessionData.getDataType() == 3) {
            session.setAttribute(key, sessionData.getStringValue());

          } else if (sessionData.getDataType() == 4) {
            session.setAttribute(key, sessionData.getBooleanValue());
          } else if (sessionData.getDataType() == 5) {
            session.setAttribute(key, sessionData.getJsonValue());
          }
          return session.getAttribute(key);
        }

        return null;
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return null;
  }
  @Override
  public Object getSessionData(String key) {
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession();
    if (session.getAttribute(key) != null) {
      System.out.println("Returning session data from session for key: " + key);
      return session.getAttribute(key);
    } else {
      try {
        // LoginSessionInterface loginSession = null;
        SessionDataInterface sessionData = null;
        sessionData =
            loginSessionDataRepository.findBySessionKey(
                cookieValidation.getCookieValue(request, "XA_ID"), key);
        if (sessionData != null) {
          // loginSession =
          // loginSessionInterfaceRepository.findById(session.getAttribute("usidHash").toString());
          if (sessionData.getDataType() == 1) {
            session.setAttribute(key, sessionData.getNumberValue());
          } else if (sessionData.getDataType() == 2) {
            session.setAttribute(key, sessionData.getDateTimeValue());

          } else if (sessionData.getDataType() == 3) {
            session.setAttribute(key, sessionData.getStringValue());

          } else if (sessionData.getDataType() == 4) {
            session.setAttribute(key, sessionData.getBooleanValue());
          } else if (sessionData.getDataType() == 5) {
            session.setAttribute(key, sessionData.getJsonValue());
          }
          /*if (loginSession != null) {
          String sessionData = loginSession.getSessionData();
          JSONObject sessionDataObject = new JSONObject(sessionData);
          if (sessionDataObject.has(key)) {
          	 Put the value in Http session
          	session.setAttribute(key, sessionDataObject.get(key));
          	System.out.println("Returning session data from db for key: " + key);
          	return sessionDataObject.get(key);
          }*/
          return session.getAttribute(key);
        }

        return null;
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return null;
  }