From 9f9508298b70bcb6ebb141b60bebfa68404affd6 Mon Sep 17 00:00:00 2001 From: Frederico Palma Date: Fri, 15 Nov 2013 16:47:44 +0000 Subject: [PATCH] git-svn-id: https://svn.coded.pt/svn/SIPRP@1823 bb69d46d-e84e-40c8-a05a-06db0d633741 --- .../src/phaselistener/PAContextListener.java | 140 +++++++++ .../phaselistener/PAMainPhaseListener.java | 275 ++++++++++++++++++ .../src/phaselistener/PASessionListener.java | 33 +++ 3 files changed, 448 insertions(+) create mode 100644 trunk/PlanosActuacao/src/phaselistener/PAContextListener.java create mode 100644 trunk/PlanosActuacao/src/phaselistener/PAMainPhaseListener.java create mode 100644 trunk/PlanosActuacao/src/phaselistener/PASessionListener.java diff --git a/trunk/PlanosActuacao/src/phaselistener/PAContextListener.java b/trunk/PlanosActuacao/src/phaselistener/PAContextListener.java new file mode 100644 index 00000000..3f5c3a3b --- /dev/null +++ b/trunk/PlanosActuacao/src/phaselistener/PAContextListener.java @@ -0,0 +1,140 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package phaselistener; + +import com.evolute.module.updater.Updater; +import com.evolute.properties.EvoAbstractPropertiesLoader; +import com.evolute.utils.date.DateUtils; +import com.evolute.utils.error.ErrorLogger; +import com.evolute.utils.timer.TimedEvent; +import com.evolute.utils.timer.Timer; +import db.DBConstants.DB; +import db.providers.EvoBaseProvider; +import java.text.SimpleDateFormat; +import java.util.Date; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import shst.companydataloaders.SIPRPPropertiesLoader; +import updates.PAUpdatesListProvider; +import utils.PlanosActuacaoLogger; + +/** + * + * @author dneves + */ +public class PAContextListener implements ServletContextListener +{ + private static final int IMPORT_INTERVAL = 300; + + private long startedTime = 0L; + + private TimedEvent importEvent = null; + + @Override + public void contextInitialized( ServletContextEvent sce ) + { + startedTime = System.currentTimeMillis(); + System.out.println( "\n\ncontextInitialized : " + startedTime ); + + try + { + System.out.println( "\nInitializing PA logger ..." ); + PlanosActuacaoLogger.init(); + } + catch ( Throwable e ) + { + e.printStackTrace( System.err ); + } + + try + { + System.out.println( "\n\tReading app.properties ..." ); + EvoAbstractPropertiesLoader.forceEncryptedPropertiesFile = false; + SIPRPPropertiesLoader props = SIPRPPropertiesLoader.getInstance(); + props.load(); + } + catch ( Exception e ) + { +// ErrorLogger.logException( e ); + System.out.println( "\n\n<---- ERROR ! " + e.getMessage() ); + } + + try + { + System.out.println( "\nInitializing db ..." ); + EvoBaseProvider.getInstance(); + } + catch ( Exception e ) + { + ErrorLogger.logException( e ); + } + + try + { + System.out.println( "\nExecuting db updates ..." ); + Updater.setDBUserForUpdate( EvoBaseProvider.getInstance().getUrl(), EvoBaseProvider.getInstance().getUsername(), EvoBaseProvider.getInstance().getPassword() ); + Updater.getInstance().executeUpdates( false, PAUpdatesListProvider.getInstance().getUpdates() ); + } + catch ( Exception e ) + { + ErrorLogger.logException( e ); + } + + +// System.out.println( "\nScheduling Import Event ... " ); +// importEvent = new TimedEvent() +// { +// @Override +// public void executeAction() throws Exception +// { +// try +// { +// PlanosActuacao planos = new PlanosActuacao(); +// } +// catch ( Exception e ) +// { +// ErrorLogger.logException( e ); +// } +// Timer.resetEvent( this ); +// } +// }; +// Timer.scheduleEvent( importEvent, IMPORT_INTERVAL ); +// System.out.println( "\tExecuting Import each " + ( IMPORT_INTERVAL / 60 ) + " minutes." ); + } + + @Override + public void contextDestroyed( ServletContextEvent sce ) + { + System.out.println( "\ncontextDestroyed() : " ); + + if ( importEvent != null ) + { + System.out.println( "\tStopping import timer ..." ); + Timer.abortEvent( importEvent ); + } + + try + { + System.out.println( "\nClosing provider connections" ); + EvoBaseProvider.getInstance().getProvider( DB.SIPRP ).close(); + EvoBaseProvider.getInstance().getProvider( DB.SIPRP_LOCAL ).close(); + EvoBaseProvider.getInstance().getDbManager( DB.SIPRP_LOCAL ).close(); + EvoBaseProvider.getInstance().getDbManager( DB.SIPRP ).close(); + } + catch ( Exception e ) + { + ErrorLogger.logException( e ); + } + + long endTime = System.currentTimeMillis(); + SimpleDateFormat D_F = new SimpleDateFormat( "dd-MM-yyyy HH:mm:ss" ); + Date startDate = new Date( startedTime ); + Date endDate = new Date( endTime ); + String timePassed = DateUtils.getTimePassed( startedTime, endTime ); + System.out.println( "\trunning for: " + D_F.format( startDate ) + " -> " + D_F.format( endDate ) + " = " + ( (endTime - startedTime) / 1000 ) + " s ; " + timePassed ); + } +} diff --git a/trunk/PlanosActuacao/src/phaselistener/PAMainPhaseListener.java b/trunk/PlanosActuacao/src/phaselistener/PAMainPhaseListener.java new file mode 100644 index 00000000..61ca9c4b --- /dev/null +++ b/trunk/PlanosActuacao/src/phaselistener/PAMainPhaseListener.java @@ -0,0 +1,275 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package phaselistener; + +import com.evolute.utils.error.ErrorLogger; +import db.entidades.Utilizador; +import db.providers.UtilizadoresDataProvider; +import java.text.SimpleDateFormat; +import java.util.Date; +import utils.Global; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import javax.faces.component.UIViewRoot; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; +import javax.faces.event.PhaseEvent; +import javax.faces.event.PhaseId; +import javax.faces.event.PhaseListener; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import planosactuacao.SessionBean1; +import utils.JSFHTTPUtils; +import utils.JSFUtils; +import utils.Logos; + +/** + * + * @author lluis + */ +public class PAMainPhaseListener implements PhaseListener +{ + private static final SimpleDateFormat DT_F = new SimpleDateFormat( "yyyy-MM-dd - HH:mm:ss.S", new Locale( "pt", "PT" ) ); + private boolean firstEntry = true; + + @Override + public void afterPhase( PhaseEvent pe ) + { + if ( pe.getPhaseId() == PhaseId.RENDER_RESPONSE ) + { + FacesContext fc = pe.getFacesContext(); + String view = fc.getViewRoot().getViewId(); + System.out.println( "\nafterPhase . RENDER RESPONSE VIEW : " + view ); + } + } + + @Override + public void beforePhase(PhaseEvent event) + { + if ( event.getPhaseId() == PhaseId.RENDER_RESPONSE ) + { + System.out.println( DT_F.format( new Date() ) ); + FacesContext fc = event.getFacesContext(); + UIViewRoot view = fc.getViewRoot(); + String viewID = view.getViewId(); + ExternalContext ec = fc.getExternalContext(); + + try + { + SessionBean1 session = JSFUtils.getSessionBean( fc ); + String referer = JSFHTTPUtils.getReferer( fc ); + + HttpServletRequest req = ( HttpServletRequest ) ec.getRequest(); + + if ( referer != null && referer.contains( "/AnaliseAcidentesTrabalho/" ) ) + { + HttpSession reqSession = ( HttpSession ) ec.getSession( false ); + ServletContext paContext = reqSession.getServletContext(); + ServletContext aatContext = paContext.getContext( "/AnaliseAcidentesTrabalho" ); + + String sessionID = req.getParameter( "sessionID" ); + + Map< String, Object > paData = new HashMap< String, Object >(); + paData.put( "session", reqSession ); + paContext.setAttribute( sessionID, paData ); + + Map< String, Object > mapData = ( Map< String, Object > ) aatContext.getAttribute( sessionID ); + Integer userID = ( Integer ) mapData.get( "userID" ); + if ( userID != null ) + { + Utilizador currentUser = UtilizadoresDataProvider.getInstance().getUtilizador( userID ); + session.setCurrentUser( currentUser ); + session.setLoggedIn( true ); + session.setAatSessionID( sessionID ); + setupPages( fc, session, viewID ); + } + else + { + gotoLogin( fc, viewID ); + } + } + else + { + if ( session.isLoggedIn() && session.getCurrentUser() != null ) + { + setupPages( fc, session, viewID ); + } + else + { + gotoLogin( fc, viewID ); + } + } + } + catch ( Exception e ) + { + gotoLogin( fc, viewID ); + } + } + } + + +// public void beforePhase( PhaseEvent pe ) +// { +// if ( pe.getPhaseId() == PhaseId.RENDER_RESPONSE ) +// { +// System.out.println( "beforePhase() : " ); +// +// FacesContext fc = pe.getFacesContext(); +// SessionBean1 session = JSFUtils.getSessionBean( fc ); +// String referer = JSFHTTPUtils.getReferer( pe.getFacesContext() ); +// System.out.println( "\tReferer : " + referer ); +// +// UIViewRoot view = fc.getViewRoot(); +// System.out.println( "\tView : " + view ); +// String viewID = view.getViewId(); +// System.out.println( "\t\tView ID :" + viewID ); +// +// +// if ( referer != null && referer.contains( "/AnaliseAcidentesTrabalho/" ) ) +// { +// +// ExternalContext ec = fc.getExternalContext(); +// if ( ec != null ) +// { +// HttpSession reqSession = ( HttpSession ) ec.getSession( false ); +// System.out.println( "\treqSession : " + reqSession ); +// +// ServletContext thisContext = reqSession.getServletContext(); +// System.out.println( "\tthisContext : " + thisContext ); +// +// ServletContext otherContext = thisContext.getContext( "/AnaliseAcidentesTrabalho" ); +// System.out.println( "\totherContext : " + otherContext ); +// +// String sessionID = ( String ) otherContext.getAttribute( "sessionID" ); +// Map< String, Object > mapData = ( Map< String, Object > ) otherContext.getAttribute( sessionID ); +// Integer userID = ( Integer ) mapData.get( "userID" ); +// +// System.out.println( "\n\tsessionID : " + sessionID ); +// System.out.println( "\tuserID : " + userID ); +// +// if ( userID != null ) +// { +// try +// { +// Utilizador currentUser = UtilizadoresDataProvider.getInstance().getUtilizador( userID ); +// session.setCurrentUser( currentUser ); +// +// setupPages( fc, session, viewID ); +// } +// catch ( Exception e ) +// { +// ErrorLogger.logException( e ); +// gotoLogin( fc, viewID ); +// } +// } +// else +// { +// gotoLogin( fc, viewID ); +// } +// } +// } +// else +// { +// +// HttpServletRequest req = ( HttpServletRequest ) fc.getExternalContext().getRequest(); +// boolean sessionValid = req.isRequestedSessionIdValid(); +// System.out.println( "\tSessionValid : " + sessionValid ); +// +// boolean loggedIn = session.isLoggedIn(); +// System.out.println( "\tLogged In : " + loggedIn ); +// +// if ( sessionValid && loggedIn ) +// { +// System.out.println( "\t---> session IS valid && user IS logged in." ); +// +// setupPages( fc, session, viewID ); +// } +// else +// { +// gotoLogin( fc, viewID ); +// } +// } +// } +// } + + @Override + public PhaseId getPhaseId() + { + return PhaseId.ANY_PHASE; + } + + private void gotoLogin( FacesContext fc, String viewID ) + { + if ( viewID.compareTo( "/Login.jsp" ) != 0 ) + { + try + { + String url = Global.ANALISE_ACIDENTES_URL + "Login.jsp"; + JSFUtils.redirect( fc, url ); + } + catch ( Exception e ) + { + ErrorLogger.logException( e ); + System.out.println( "\n\t\t\tERROR REDIRECTING TO LOGIN !" ); + } + } + } + + private void setupPages( FacesContext fc, SessionBean1 session, String viewID ) + { + //disable/enable EditarPlano menu ??? + session.setRenderTopMenuImages( true ); + session.setRenderSubHeader( false ); + session.setDisableMenuEstatisticas( false ); + + Utilizador currentUser = session.getCurrentUser(); + int userType = currentUser == null ? -1 : currentUser.getTipo() == null ? -1 : currentUser.getTipo().intValue(); + if ( viewID.matches( "/EditarPlano.jsp" ) || viewID.matches( "/EnviarCorrecao.jsp" ) || viewID.matches( "/ViewPlano.jsp" ) || viewID.matches( "/Estatistica.jsp" ) ) + { + session.setDisableMenu( false ); + session.setDisableMenuPlanos( false ); + if ( viewID.matches( "/ViewPlano.jsp" ) ) + { + session.setDisableMenuUtilizadores( userType != Global.DIRECTOR_SIPRP ); + session.setDisableMenuDadosUtilizador( false ); + session.setRenderTopMenuImages( false ); + session.setRenderSubHeader( true ); + } + else if ( viewID.matches( "/EditarPlano.jsp" ) ) + { + session.setDisableMenuPlanos( false ); + session.setRenderTopMenuImages( false ); + session.setRenderSubHeader( true ); + } + else if( viewID.matches( "/Estatistica.jsp" ) ) + { + session.setDisableMenuPlanos( false ); + session.setRenderTopMenuImages( false ); + session.setDisableMenuEstatisticas( true ); + } + } + else + { + session.setDisableMenu(false); + if ( viewID.matches( "/ListaPlanos.jsp" ) ) + { + if ( userType == Global.RH || userType == Global.GESTOR ) + { + session.setDisableMenuUtilizadores( true ); + } + session.setDisableMenuPlanos( true ); + } + } + + //insert logos + Integer empresaId = currentUser != null ? currentUser.getEmpresa_id() : null; + Logos logos = new Logos(); + String logourl = logos.getLogo( fc, empresaId ); + session.setLogoEmpresaUrl( logourl ); + } +} diff --git a/trunk/PlanosActuacao/src/phaselistener/PASessionListener.java b/trunk/PlanosActuacao/src/phaselistener/PASessionListener.java new file mode 100644 index 00000000..7cbbabe7 --- /dev/null +++ b/trunk/PlanosActuacao/src/phaselistener/PASessionListener.java @@ -0,0 +1,33 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package phaselistener; + +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; + +/** + * + * @author dneves + */ +public class PASessionListener implements HttpSessionListener +{ + + @Override + public void sessionCreated( HttpSessionEvent se ) + { + HttpSession session = se.getSession(); + System.out.println( "PlanosActuacao : new Session Created : " + session.getId() ); + } + + @Override + public void sessionDestroyed( HttpSessionEvent se ) + { + HttpSession session = se.getSession(); + System.out.println( "PlanosActuacao : session destroyed : " + session.getId() ); + } + +}