package com.din.din.webapp.listeners;
import java.io.Serializable;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import com.din.din.webapp.beans.LoginBean;
public class LoginPhaseListener implements PhaseListener, Serializable {
private static final long serialVersionUID = -7810269454786215551L;
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
public static void addListener(LoginListener listener) {
FacesContext context = FacesContext.getCurrentInstance();
if(context != null) {
LoginBean sessionLoginInfo = getSessionLoginInfo(context);
if(sessionLoginInfo != null) {
sessionLoginInfo.addListener(listener);
}
}
}
public void beforePhase(PhaseEvent event) {
FacesContext context;
if (event.getPhaseId() == PhaseId.RESTORE_VIEW) {
context = event.getFacesContext();
LoginBean sessionLoginInfo = getSessionLoginInfo(context);
if(sessionLoginInfo != null) {
sessionLoginInfo.performCheck();
}
}
}
private static LoginBean getSessionLoginInfo(FacesContext context) {
Application application = context.getApplication();
ELContext elContext = context.getELContext();
ValueExpression ve = application.getExpressionFactory()
.createValueExpression(elContext,
LoginBean.ACCESSOR, LoginBean.class);
LoginBean sessionLoginInfo = (LoginBean)ve.getValue(elContext);
return sessionLoginInfo;
}
public void afterPhase(PhaseEvent event) {
}
public interface LoginListener {
public void onLogin();
public void onLogoff();
}
}