/**
* 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/>.
*/
package org.squale.welcom.taglib.aide;
import java.util.Hashtable;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Classe contenant plusieurs Aide Ressource en fonction de la locale 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 Aide
{
/** logger */
private static Log log = LogFactory.getLog( Aide.class );
/** l'instance pour le singleton */
private static Aide instance = null;
/** hashtable pour stocker l'aide ressource en fonction de la locale */
private final Hashtable hAideLocale = new Hashtable();
/** le nom du fichier */
private String fileBundle = null;
/** le prefixage de l'url */
private String prefixURL = null;
/**
* Constructeur prive pour le singleton
*/
private Aide()
{
}
/**
* Retourne l'instance de l'aide
*
* @return l'instance
*/
public static Aide getInstance()
{
if ( instance == null )
{
instance = new Aide();
}
return instance;
}
/**
* Ajoute une Aideressource pour une locale donn�e
*
* @param locale la locale
* @throws AideException l'exception susceptible d'etre levee
*/
public void addAideRessource( final Locale locale )
throws AideException
{
if ( fileBundle != null )
{
hAideLocale.put( locale, new AideRessource( fileBundle, locale ) );
log.info( "Chargement de l'aide pour la locale : " + locale.getCountry() + "_" + locale.getLanguage() );
}
else
{
throw new AideException( "Nom du fichier Bundle d'Aide vide" );
}
}
/**
* Recupere un Aide Ressource en fonction de la Locale
*
* @param locale la locale
* @return un aide ressource
*/
public AideRessource getAideRessource( final Locale locale )
{
return (AideRessource) hAideLocale.get( locale );
}
/**
* Retourne la valeur d'une clef en fonction de sa Locale
*
* @param key la cle
* @param locale la locale
* @return la valeur retournee
* @throws AideException l'exception susceptible d'etre levee
*/
public String getString( final String key, final Locale locale )
throws AideException
{
try
{
final ResourceBundle ressourceBundle = java.util.ResourceBundle.getBundle( fileBundle, locale );
String value = "";
try
{
value = ressourceBundle.getString( key );
}
catch ( final MissingResourceException e )
{
// Trappe l'execption pour quelle ne remonte pas trop Haut
// Elle est trait� dans le finnaly
}
finally
{
if ( ( value == null ) || value.equals( "" ) || value.equals( "DEFAULT" ) )
{
throw new AideException( "Pas de valeur associ� a la clef " + key + " pour la locale " + locale
+ "!!!" );
}
}
// String value = getAideRessource(locale).getString(key);
log.info( "Pour la Locale (" + locale.getCountry() + "_" + locale.getLanguage() + ") Key : " + key
+ " Value :" + value );
return value;
}
catch ( final AideException ae )
{
// La clef n'est pas trouver essaye l'url par default
return Aide.getInstance().getUrlDefault( key, locale );
}
}
/**
* retourne l'url d'une aide
*
* @param key la cle
* @param locale la locale
* @return l'url d'aide
* @throws AideException l'exception susceptible d'etre levee
*/
public static String getUrlAide( final String key, final Locale locale )
throws AideException
{
return Aide.getInstance().getPrefixURL() + locale.getLanguage() + "/"
+ Aide.getInstance().getString( key, locale );
}
/**
* Initialise l'aide
*
* @param fileBundle le nom du fichier
* @param prefixURL le prefixage de l'url
* @throws AideException l'exception susceptible d'etre levee
*/
public static void openAide( final String fileBundle, final String prefixURL )
throws AideException
{
// Stocke le nom du fichier
Aide.getInstance().setFileBundle( fileBundle );
// Initialise l'aide par la locale par default
Aide.getInstance().addAideRessource( Locale.getDefault() );
// Stocke le prefixage de l'url;
Aide.getInstance().setPrefixURL( prefixURL );
}
/**
* Accesseur
*
* @param pFileBundle file bundle
*/
public void setFileBundle( final String pFileBundle )
{
fileBundle = pFileBundle;
}
/**
* Accesseur
*
* @param key la cle
* @param locale la locale
* @return le default url
* @throws AideException exception susceptible d'etre levee
*/
public String getUrlDefault( final String key, final Locale locale )
throws AideException
{
String value = "";
try
{
// if (getAideRessource(locale)==null)
// {
// addAideRessource(locale);
// }
final ResourceBundle ressourceBundle = java.util.ResourceBundle.getBundle( fileBundle, locale );
try
{
value = ressourceBundle.getString( AideRessource.KEY_DEFAULT );
}
catch ( final MissingResourceException e )
{
// Catch de l'exception pour pas quelle soir gere par le systeme
// cf finnnaly
}
finally
{
if ( ( value == null ) || value.equals( "" ) )
{
throw new AideException( "Pas de valeur associ� a la clef " + key + " pour la locale " + locale
+ "!!!" );
}
}
// String value = getAideRessource(locale).getString(AideRessource.KEY_DEFAULT);
log.warn( "NOTFOUND : use key :" + AideRessource.KEY_DEFAULT + ", pour la Locale (" + locale.getCountry()
+ "_" + locale.getLanguage() + ") Key : " + key + " Value :" + value );
}
catch ( final AideException ae )
{
log.warn( "NOTFOUND : default key :" + AideRessource.KEY_DEFAULT
+ ", impossible d'afficher une page d'aide" );
throw new AideException( "Aide non disponible" );
}
return value;
}
/**
* Accesseur
*
* @param pPrefixURL le nouveau prefixUrl
*/
public void setPrefixURL( final String pPrefixURL )
{
prefixURL = pPrefixURL;
}
/**
* Accesseur
*
* @return le prefixUrl
*/
public String getPrefixURL()
{
return prefixURL;
}
}