/**
* 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 25 juil. 05
*
* 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.addons.config;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.config.ModuleConfig;
import org.squale.welcom.addons.access.WAddOnsAccessManager;
import org.squale.welcom.addons.message.WAddOnsMessageManager;
import org.squale.welcom.addons.spell.WAddOnsSpellManager;
import org.squale.welcom.outils.Util;
import org.squale.welcom.outils.WelcomConfigurator;
import org.squale.welcom.outils.jdbc.WJdbc;
import org.squale.welcom.outils.jdbc.WJdbcMagic;
import org.squale.welcom.outils.jdbc.WStatement;
import org.squale.welcom.outils.jdbc.wrapper.ResultSetUtils;
import org.squale.welcom.struts.plugin.WelcomContext;
/**
* @author M327837 Pour changer le mod�le de ce commentaire de type g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
public class AddonsConfig
{
/** logger */
private static Log logStartup = LogFactory.getLog( "Welcom" );
/** Sql code de table not found */
public final static int SQL_CODE_TABLE_NOT_FOUND = 942;
/** Table pour la gestion des plugins */
public final static String WEL_ADDONS = WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_TABLE_NAME );
/** Table de droits d'acc�s */
public final static String WEL_ACCESSKEY =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_ACCESS_MANAGER_TABLE_ACCESSKEY );
/** Table de profil */
public final static String WEL_PROFILE =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_ACCESS_MANAGER_TABLE_PROFILE );
/** Table de droits d'acc�es par profil (referentiel) */
public final static String WEL_PROFILE_ACCESSKEY_INT =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_ACCESS_MANAGER_TABLE_PROFILEACCESSKEYINT );
/** Table de droits d'acc�es par profil (utilisateur) */
public final static String WEL_PROFILE_ACCESSKEY =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_ACCESS_MANAGER_TABLE_PROFILEACCESSKEY );
/** Table de droits d'acc�es par profil (utilisateur) */
public final static String WEL_MSGLIBELLE =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_MESSAGE_MANAGER_TABLE_LIBELLES );
/** Liste des addons */
private final ArrayList listAddons = new ArrayList();
/** pseudo singleton pour le clonnage */
private static HashMap htSingleton = new HashMap();
/**
* @return Pseudo Singleton /recupere sous la clef JNDI : java:comp/env/welcomConfContext
*/
public static AddonsConfig getInstance()
{
AddonsConfig ac;
final String welcomContextName = WelcomContext.getWelcomContextName();
synchronized ( htSingleton )
{
ac = (AddonsConfig) htSingleton.get( welcomContextName );
if ( ac == null )
{
ac = new AddonsConfig();
htSingleton.put( welcomContextName, ac );
}
}
return ac;
}
/**
* @return la liste des addons
*/
private ArrayList getListAddons()
{
return listAddons;
}
/**
* @see org.squale.welcom.WIAddOns#init()
*/
public static void init( final ActionServlet servlet, final ModuleConfig config )
{
// Initialise les differents Addons
final String accessManagerEnabled =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_ACCESS_MANAGER_ENABLED );
if ( Util.isTrue( accessManagerEnabled ) )
{
try
{
AddonsConfig.getInstance().initAddons( WAddOnsAccessManager.class, servlet, config );
}
catch ( final AddonsException e )
{
logStartup.info( "Erreur du le chargement de l'addons : " + e.getMessage() );
}
}
final String messageManagerEnabled =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_MESSAGE_MANAGER_ENABLED );
if ( Util.isTrue( messageManagerEnabled ) )
{
try
{
AddonsConfig.getInstance().initAddons( WAddOnsMessageManager.class, servlet, config );
}
catch ( final AddonsException e )
{
logStartup.info( "Erreur du le chargement de l'addons : " + e.getMessage() );
}
}
final String spellManagerEnabled =
WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_SPELL_MANAGER_ENABLED );
if ( Util.isTrue( spellManagerEnabled ) )
{
try
{
AddonsConfig.getInstance().initAddons( WAddOnsSpellManager.class, servlet, config );
}
catch ( final AddonsException e )
{
logStartup.info( "Erreur du le chargement de l'addons : " + e.getMessage() );
}
}
}
/**
* Initialisation de l'addons
*
* @param addonsClass : Classe de l'addons
* @param servlet : Servlet
* @param config : Config
* @throws AddonsException : Probleme de chargement
*/
public void initAddons( final Class addonsClass, final ActionServlet servlet, final ModuleConfig config )
throws AddonsException
{
WIAddOns addons = null;
try
{
addons = (WIAddOns) addonsClass.newInstance();
}
catch ( final InstantiationException e1 )
{
throw new AddonsException( e1.getMessage() );
}
catch ( final IllegalAccessException e1 )
{
throw new AddonsException( e1.getMessage() );
}
logStartup.info( "-> Init Addons : " + addons.getDisplayName() );
saveAddons( addons );
addons.init( servlet, config );
listAddons.add( addons );
}
/**
* (
*
* @see org.squale.welcom.addons.config.WIAddOns#registredAddons(org.squale.welcom.outils.jdbc.WJdbc)
*/
public void registredAddons( final WJdbc jdbc, final WIAddOns addons )
throws SQLException
{
final WStatement sta = jdbc.getWStatement();
sta.add( "INSERT INTO " + WEL_ADDONS + " (NAME,DISPLAYNAME,VERSION)" );
sta.add( "values (" );
sta.addParameter( "?,", addons.getName() );
sta.addParameter( "?,", addons.getDisplayName() );
sta.addParameter( "?", addons.getVersion() );
sta.add( ")" );
sta.executeUpdate();
sta.close();
}
/**
* Recupere la config d'un addons
*
* @param addons : Classe Addons
* @throws AddonsException : Probleme de chargement
*/
public void saveAddons( final WIAddOns addons )
throws AddonsException
{
WJdbcMagic jdbc = null;
try
{
jdbc = new WJdbcMagic();
saveAddons( jdbc, addons );
}
catch ( final SQLException sqle )
{
throw new AddonsException( sqle.getMessage() );
}
finally
{
if ( ( jdbc != null ) && !jdbc.isClosed() )
{
jdbc.close();
}
}
}
/**
* Recupere la config d'un addons
*
* @param jdbc : connexion jdbc
* @param addons : Classe Addons
* @throws AddonsException : Probleme de chargement
*/
public void saveAddons( final WJdbc jdbc, final WIAddOns addons )
throws AddonsException
{
try
{
final WStatement sta = jdbc.getWStatement();
/*
* sta.add("drop table WEL_ADDONS"); sta.executeUpdate(); sta.close(); sta = jdbc.getWStatement();
*/
sta.add( "select * from " + WEL_ADDONS );
sta.addParameter( "where NAME=?", addons.getName() );
final ResultSet rs = sta.executeQuery();
if ( ( rs != null ) && rs.next() )
{
ResultSetUtils.populate( addons, rs );
}
else
{
registredAddons( jdbc, addons );
jdbc.commit();
}
sta.close();
}
catch ( final SQLException sqle )
{
// 1146 : MYSQL , 20000 : DERBY
if ( ( sqle.getErrorCode() == SQL_CODE_TABLE_NOT_FOUND ) || ( sqle.getErrorCode() == 1146 )
|| ( sqle.getErrorCode() == 20000 ) )
{
try
{
createTablesAddons( jdbc );
}
catch ( final SQLException e )
{
throw new AddonsException( e.getMessage() );
}
saveAddons( jdbc, addons );
}
else
{
throw new AddonsException( sqle.getMessage() );
}
}
}
/**
* CREATE TABLE WEL_ADDONS ( NAME VARCHAR2 (30), DISPLAYNAME VARCHAR2 (255), VERSION VARCHAR2 (6), DATE DATETIME) ;
*
* @param jdbc : Connection JDBC
* @throws SQLException : Probleme sql
*/
public void createTablesAddons( final WJdbc jdbc )
throws SQLException
{
final WStatement sta = jdbc.getWStatement();
sta.add( "CREATE TABLE " + WEL_ADDONS + " (" );
sta.add( "NAME VARCHAR (30)," );
sta.add( "DISPLAYNAME VARCHAR (255)," );
sta.add( "VERSION VARCHAR (6)," );
sta.add( "PARAMETERS VARCHAR (255))" );
sta.executeUpdate();
sta.close();
}
/**
* Appelle la methode destroy sur tout les addons de welcom
*
* @see org.squale.welcom.WIAddOns#destroy()
*/
public static void destroy()
{
final Iterator iter = AddonsConfig.getInstance().getListAddons().iterator();
while ( iter.hasNext() )
{
final WIAddOns element = (WIAddOns) iter.next();
logStartup.info( "-> Arret de l'addons '" + element.getDisplayName() + "'" );
element.destroy();
}
}
}