/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ /* * Cr�� le 21 sept. 04 * * Pour changer le mod�le de ce fichier g�n�r�, allez � : * Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires */ package org.squale.welcom.struts.plugin; import java.io.File; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.MessageResources; import org.apache.struts.util.MessageResourcesFactory; import org.apache.struts.util.RequestUtils; import org.squale.welcom.addons.config.AddonsConfig; import org.squale.welcom.addons.message.WMessageResourcesControleur; import org.squale.welcom.outils.Util; import org.squale.welcom.outils.WelcomConfigurator; import org.squale.welcom.outils.jdbc.WConnectionPool; import org.squale.welcom.outils.jdbc.WConnectionString; import org.squale.welcom.outils.jdbc.wrapper.ConnectionPool; import org.squale.welcom.outils.pdf.PDFFontUtil; import org.squale.welcom.struts.util.WConstants; /** * Classe d'appel aux fonctions d'initialisations de Welcom pour la compatibilit� avec JRAF. */ public class Welcom { /** logger */ private static Log logStartup = LogFactory.getLog( "Welcom" ); /** * Cherche le mode d'initilisation de Welcom * * @param servlet : Servlet * @param useMode : Flag */ public static void initUseMode( final ActionServlet servlet, final String useMode ) { servlet.getServletContext().setAttribute( WConstants.WELCOM_USE_MODE, useMode ); logStartup.info( "Utilisation de welcom en mode : " + useMode ); } /** * Initilisation du module jdbc * * @param dataSourceName : Nom de la data source * @param bdPassword : Password bd * @param bdUser : user bd */ public static void initJdbc( final String dataSourceName, final String bdPassword, final String bdUser ) { // Initialisation des param�tres de connection de la base de donn�es ConnectionPool.initDataSource( dataSourceName, bdPassword, bdUser ); } /** * Initilisation du module JDBC * * @param connectionString : Chaine de connexion */ public static void initJdbc( final WConnectionString connectionString ) { // Initialisation des param�tres de connection de la base de donn�es WConnectionPool.initDataSource( connectionString ); } /** * Initisalistion du fichier de conf de welcom * * @param propertiesFile Nom du fichier properties */ public static void initWelcom( final String propertiesFile ) { WelcomConfigurator.init( propertiesFile ); } /** * Initisalise le repertoire de font pour le PDF * * @param servlet : Servlet */ public static void initFontPDF( final ActionServlet servlet ) { if ( PDFFontUtil.init( servlet ) && PDFFontUtil.isSpecificRealFontPath() ) { logStartup.info( "Ajout du chemin des polices pour le PDF : " + WelcomConfigurator.getMessage( WelcomConfigurator.FONT_PATH ) ); } } /** * Ajoute la factory * * @param messageResourceClass : Nom de la factory */ public static void initMessageFactory( final String messageResourceClass ) { if ( !org.apache.commons.validator.GenericValidator.isBlankOrNull( messageResourceClass ) ) { WMessageResourcesControleur.setClassPersistance( messageResourceClass ); logStartup.info( "Ajout de la classe de persitance pour les messages: " + messageResourceClass ); } } /** * Ajoute le forward d'erreur * * @param servlet : Servlet * @param config : Config Struts */ public static void initForward( final ActionServlet servlet, final ModuleConfig config ) { final String forwardError = WelcomConfigurator.getMessage( WelcomConfigurator.ERROR_PAGE_JSP ); // Verification de l'existance de la page d'erreur final String fullPathError = servlet.getServletContext().getRealPath( forwardError ); final File f = new File( fullPathError ); if ( !f.exists() && !org.apache.commons.validator.GenericValidator.isBlankOrNull( forwardError ) ) { logStartup.info( "ATTENTION pas de forward, page d'erreur non trouv� : " + forwardError ); } else { final ActionForward fc = new ActionForward(); fc.setRedirect( false ); fc.setContextRelative( false ); fc.setName( "error" ); fc.setPath( forwardError ); config.addForwardConfig( fc ); logStartup.info( "Ajout des forwards 'error', pour gestion des erreurs natives sur " + forwardError ); } } /** * Ajout des diffrents mapping de nos servlets * * @param config : Config Struts */ public static void initMapping( final ModuleConfig config ) { initMapping( config, "" ); final ActionConfig[] actionConfigs = config.findActionConfigs(); final ArrayList listPath = new ArrayList(); for ( int i = 0; i < actionConfigs.length; i++ ) { final String path = actionConfigs[i].getPath(); final int index = path.lastIndexOf( "/" ); if ( index > 0 ) { final String actionContext = path.substring( 0, index ); if ( !listPath.contains( actionContext ) ) { listPath.add( actionContext ); initMapping( config, actionContext ); } } } } /** * Ajout des diffrents mapping de nos servlets * * @param config : Config Struts * @param actionContext : le context */ private static void initMapping( final ModuleConfig config, final String actionContext ) { try { Class.forName( config.getActionMappingClass() ); ActionMapping mapping; try { // Table forward mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/tableForward" ); mapping.setType( "org.squale.welcom.struts.action.WForwardAction" ); config.addActionConfig( mapping ); logStartup.info( "Ajout du mapping '/tableForward.do' pour la navigation des listes" ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/css" ); mapping.setType( "org.squale.welcom.struts.action.WGzipAction" ); config.addActionConfig( mapping ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/js" ); mapping.setType( "org.squale.welcom.struts.action.WGzipAction" ); config.addActionConfig( mapping ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/img" ); mapping.setType( "org.squale.welcom.struts.action.WGzipAction" ); config.addActionConfig( mapping ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/html" ); mapping.setType( "org.squale.welcom.struts.action.WGzipAction" ); config.addActionConfig( mapping ); logStartup.info( "Ajout du mapping '" + actionContext + "/css.do','" + actionContext + "/js.do','" + actionContext + "/img.do','" + actionContext + "/html.do' pour la recherche des pages en interne" ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/printforward" ); mapping.setType( "org.squale.welcom.struts.action.WForwardAction" ); mapping.addForwardConfig( new ActionForward( "apercuPDF", WelcomConfigurator.getMessage( WelcomConfigurator.PATH_JSP_APERCU_PDF ), false ) ); mapping.addForwardConfig( new ActionForward( "apercuPDFExterne", WelcomConfigurator.getMessage( WelcomConfigurator.PATH_JSP_APERCU_PDFEXTERNE ), false ) ); mapping.addForwardConfig( new ActionForward( "preparationImpressionPDF", WelcomConfigurator.getMessage( WelcomConfigurator.PATH_JSP_PREPARATION_IMPRESSION_PDF ), false ) ); mapping.addForwardConfig( new ActionForward( "success", WelcomConfigurator.getMessage( WelcomConfigurator.PATH_JSP_SUCCESS ), false ) ); config.addActionConfig( mapping ); logStartup.info( "Ajout du mapping '" + actionContext + "/printforward.do' pour l'aper�u avant impression" ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/lazyLoading" ); mapping.setType( "org.squale.welcom.struts.action.WLazyLoadingAction" ); config.addActionConfig( mapping ); logStartup.info( "Ajout du mapping '" + actionContext + "/lazyLoading.do' pour le chargement a la vol�e" ); mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( actionContext + "/easyComplete" ); mapping.setType( "org.squale.welcom.struts.action.WEasyCompleteAction" ); config.addActionConfig( mapping ); logStartup.info( "Ajout du mapping '" + actionContext + "/easyComplete.do' pour la compl�tion facile de la saisie" ); } catch ( final InstantiationException e1 ) { logStartup.error( e1, e1 ); } catch ( final IllegalAccessException e1 ) { logStartup.error( e1, e1 ); } } catch ( final ClassNotFoundException e ) { logStartup.error( e, e ); } } /** * Ecrit la config de la JVM */ public static void dumpConfigJVM() { if ( Util.isTrue( WelcomConfigurator.getMessage( WelcomConfigurator.DEBUG_CONFIG_JVM ) ) ) { final Properties p = System.getProperties(); final Enumeration enumeration = p.keys(); while ( enumeration.hasMoreElements() ) { final String key = (String) enumeration.nextElement(); logStartup.info( key + " : " + p.getProperty( key ) ); } } } /** * Mise en place de la gestion d'exception par default * * @param servlet : Servlet * @param config : Config Struts */ public static void initException( final ActionServlet servlet, final ModuleConfig config ) { final String forwardError = WelcomConfigurator.getMessage( WelcomConfigurator.ERROR_PAGE_JSP ); // Verification de l'existance de la page d'erreur final String fullPathError = servlet.getServletContext().getRealPath( forwardError ); final File f = new File( fullPathError ); if ( !f.exists() && !org.apache.commons.validator.GenericValidator.isBlankOrNull( forwardError ) ) { logStartup.info( "ATTENTION pas de gestion d'exception,page d'erreur non trouv� : " + forwardError ); } else { try { // Ajout du mapping final ActionMapping mapping = (ActionMapping) RequestUtils.applicationInstance( config.getActionMappingClass() ); mapping.setPath( "/error" ); mapping.setForward( forwardError ); config.addActionConfig( mapping ); } catch ( final InstantiationException e1 ) { logStartup.error( e1, e1 ); } catch ( final IllegalAccessException e1 ) { logStartup.error( e1, e1 ); } catch ( final ClassNotFoundException e ) { logStartup.error( e, e ); } // Ajout de l'erreur gen�rique ExceptionConfig ec; if ( config.findExceptionConfig( "java.lang.Exception" ) == null ) { ec = new ExceptionConfig(); ec.setType( "java.lang.Exception" ); ec.setKey( "welcom.internal.error.msg" ); ec.setPath( "/error.do" ); config.addExceptionConfig( ec ); logStartup.info( "Ajout de la gestion d'exception java.lang.Exception, sur /error.do" ); } // Ajout de l'erreur Type TimeOut if ( config.findExceptionConfig( "org.squale.welcom.struts.action.TimeOutException" ) == null ) { ec = new ExceptionConfig(); ec.setType( "org.squale.welcom.struts.action.TimeOutException" ); ec.setKey( "welcom.internal.error.msg" ); ec.setPath( "/error.do" ); config.addExceptionConfig( ec ); logStartup.info( "Ajout de la gestion d'exception org.squale.welcom.struts.action.TimeOutException, sur /error.do" ); } } } /** * Initialisation des addons * * @param servlet : Servlet * @param config : Config Struts */ public static void initAddons( final ActionServlet servlet, final ModuleConfig config ) { AddonsConfig.init( servlet, config ); } /** * detruit les addons */ public static void destroyAddons() { AddonsConfig.destroy(); } /** * Initialisation des addons * * @param servlet : Servlet * @param config : Config Struts */ public static void initParameter( final ActionServlet servlet, final ModuleConfig config ) { final ActionConfig[] ac = config.findActionConfigs(); for ( int i = 0; i < ac.length; i++ ) { if ( org.apache.commons.validator.GenericValidator.isBlankOrNull( ac[i].getParameter() ) ) { ac[i].setParameter( "action" ); } } final MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for ( int i = 0; i < mrcs.length; i++ ) { if ( ( mrcs[i].getFactory() != null ) && ( mrcs[i].getParameter() != null ) && ( mrcs[i].getFactory().equals( "org.apache.struts.util.PropertyMessageResourcesFactory" ) ) && ( mrcs[i].getKey().equals( Globals.MESSAGES_KEY ) ) ) { mrcs[i].setFactory( "org.squale.welcom.struts.message.WPropertyMessageResourcesFactory" ); final String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass( factory ); final MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); final MessageResources resources = factoryObject.createResources( mrcs[i].getParameter() ); resources.setReturnNull( mrcs[i].getNull() ); servlet.getServletContext().removeAttribute( mrcs[i].getKey() + config.getPrefix() ); servlet.getServletContext().setAttribute( mrcs[i].getKey() + config.getPrefix(), resources ); } } } /** * Initilisation du request Processor, permet la gestion des dates * * @param servlet : Servlet * @param config : config */ public static void initRequestProcessor( final ActionServlet servlet, final ModuleConfig config ) { if ( config.getControllerConfig().getProcessorClass().equals( "org.apache.struts.action.RequestProcessor" ) ) { config.getControllerConfig().setProcessorClass( "org.squale.welcom.struts.action.WRequestProcessor" ); } else { logStartup.warn( "Attention, vous n'utilisez pas le RequestProcessor de Welcom, risque possible de probl�me avec la gestion des dates, et des war multiple" ); } } /** * Initialise les rederers de la charte graphique */ public static void initRender() { logStartup.info( "Charte : " + WelcomConfigurator.getCharte() ); } /** * Initilise les defaults */ public static void initDefaults() { // Positionne les Dates en GMT, et le format Date/Heure if ( !Util.isEquals( WelcomConfigurator.getMessage( WelcomConfigurator.DEFAULT_TIMEZONE ), "none" ) ) { logStartup.info( "Le TimeZone est forc� a la valeur (Clef : default.timezone dans le WelcomResource) : " + WelcomConfigurator.getMessage( WelcomConfigurator.DEFAULT_TIMEZONE ) ); java.util.TimeZone.setDefault( java.util.TimeZone.getTimeZone( WelcomConfigurator.getMessage( WelcomConfigurator.DEFAULT_TIMEZONE ) ) ); } // Init du package Util Util.initialize(); } /** * @return retourne la version de Welcom. */ public static String about() { return "Version 2.4.4 - 06/11/2007 09:19"; } }