package com.oopdev.io.core.web.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.oopdev.io.core.app.IOCoreConstants;
import com.oopdev.io.core.app.IOProjectType;
import com.oopdev.io.core.component.loader.IOComponentLoader;
import com.oopdev.io.core.context.IOWebContext;
import com.oopdev.io.util.exceptions.IOUtilException;
import com.oopdev.io.util.logger.IOLogger;
/**
*
* @author kamilbukum
*
*/
public class IOContextListener extends IOCoreConstants implements ServletContextListener,HttpSessionListener,ServletRequestListener{
static IOLogger logger=IOLogger.getIOLogger(IOCoreConstants.IO_CORE_LOG_PATH,ServletContextListener.class);
@Override
/**
* IO framework initalize method
*/
public void contextInitialized(ServletContextEvent sce) {
// Project type is web or console
logger.info("com.oopdev.io.core.web.listener.IOContextListener.contextInitialized.init");
IOCoreConstants.IO_PROJECT_TYPE=IOProjectType.WEB.getProjectType();
IOWebContext.setApplication(sce.getServletContext());
IOCoreConstants.IO_APPLICATION_PACKAGES_VALUE=IOWebContext.getApplication().getInitParameter(IOCoreConstants.IO_APPLICATION_PACKAGES_KEY);
String characterEncoding=IOWebContext.getApplication().getInitParameter(IOCoreConstants.IO_CHARACTER_ENCODING_KEY);
if(characterEncoding!=null){
IOCoreConstants.IO_CHARACTER_ENCODING_VALUE=characterEncoding;
}
try {
IOComponentLoader.loadComponents(IOCoreConstants.IO_APPLICATION_PACKAGES_VALUE);
} catch (IOUtilException e) {
throw new RuntimeException(e);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
logger.info("com.oopdev.io.core.web.listener.IOContextListener.contextDestroyed");
}
public static ServletContext getServletContext() {
return IOWebContext.getApplication();
}
@Override
public void sessionCreated(HttpSessionEvent event) {
if(IOWebContext.getCurrentInstance()==null){
IOWebContext context=new IOWebContext();
context.setSession(event.getSession());
IOWebContext.setCurrentInstance(context);
}
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
}
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
}
@Override
public void requestInitialized(ServletRequestEvent event) {
if(event.getServletRequest() instanceof HttpServletRequest){
if(IOWebContext.getCurrentInstance()==null){
IOWebContext context=new IOWebContext();
IOWebContext.setApplication(event.getServletContext());
IOWebContext.setCurrentInstance(context);
}
HttpServletRequest request=(HttpServletRequest)event.getServletRequest();
IOWebContext.getCurrentInstance().setRequest(request);
IOWebContext.getCurrentInstance().setSession(request.getSession());
}
}
}