package gcom.gui;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.log4j.Logger;
public class SessaoHttpListener implements HttpSessionListener ,HttpSessionAttributeListener{
private static Map<String, HttpSession> listaSessoesAtivas = new HashMap<String, HttpSession>();
public static Map<String, HttpSession> listaSessoesAtivasGis = new HashMap<String, HttpSession>();
public static Logger log;
static {
log = Logger.getLogger("GSAN");
}
public void sessionCreated(HttpSessionEvent e) {
}
public void sessionDestroyed(HttpSessionEvent e) {
//if (!listaSessoesAtivas.isEmpty()) {
HttpSession session = e.getSession();
String loginUsuarioSessao = (String) session
.getAttribute("loginUsuarioSessao");
if (loginUsuarioSessao != null
&& !loginUsuarioSessao
.contentEquals("USUARIO_SEGUNDA_VIA_INTERNET")) {
listaSessoesAtivas.remove(loginUsuarioSessao);
}
session = null;
//}
}
public static void registrarAcessoUsuario(HttpSession session,
SistemaParametro sistemaParametro) {
if (sistemaParametro.getIndicadorLoginUnico() != null
&& sistemaParametro.getIndicadorLoginUnico().equals(
ConstantesSistema.SIM)) {
String loginUsuarioSessao = (String) session
.getAttribute("loginUsuarioSessao");
if (loginUsuarioSessao != null
&& !loginUsuarioSessao
.contentEquals("USUARIO_SEGUNDA_VIA_INTERNET")) {
HttpSession sessaoUsuarioJaExistente = listaSessoesAtivas
.get(loginUsuarioSessao);
if (sessaoUsuarioJaExistente != null) {
// Derruba a sess�o j� existente
listaSessoesAtivas.remove(loginUsuarioSessao);
try {
sessaoUsuarioJaExistente.invalidate();
} catch (IllegalStateException e) {
}
}
}
listaSessoesAtivas.put(loginUsuarioSessao, session);
}
}
public void attributeAdded(HttpSessionBindingEvent se) {
HttpSession session = se.getSession();
String marcadorGis = se.getName();
if(marcadorGis != null && marcadorGis.equals("gis")){
Usuario usuarioSessao = (Usuario) session
.getAttribute("usuarioLogado");
listaSessoesAtivasGis.put(usuarioSessao.getLogin(), session);
}
if (se.getValue() instanceof Collection && ((Collection)se.getValue()).size() > 10) {
String mensagem = se.getName()+":"+((Collection)se.getValue()).size();
log.debug(mensagem);
}
}
public void attributeRemoved(HttpSessionBindingEvent se) {
if (!listaSessoesAtivasGis.isEmpty()) {
HttpSession session = se.getSession();
String nomeAtributo = se.getName();
Usuario usuarioSessao = null;
try {
usuarioSessao = (Usuario) session.getAttribute("usuarioLogado");
} catch (IllegalStateException e) {
}
if (usuarioSessao != null && nomeAtributo.equals("gis")) {
listaSessoesAtivasGis.remove(usuarioSessao.getLogin());
}
}
}
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}