/**
* 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.squaleweb.resources;
import java.util.Locale;
import java.util.Observable;
import java.util.Observer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.MessageResourcesFactory;
import org.squale.jraf.commons.exception.JrafEnterpriseException;
import org.squale.jraf.helper.AccessDelegateHelper;
import org.squale.jraf.spi.accessdelegate.IApplicationComponent;
import org.squale.squaleweb.messages.MessageProvider;
import org.squale.squaleweb.transformer.message.MessagesDTOTransformer;
/**
* Proxy des ressources struts Les messages affich�s sous struts proviennent de deux sources : les messages statiqques
* d�finis dans un fichier de propri�t�s les messages dynamiques d�finis dans la base de donn�es
*/
public class MessageResourcesProxy
extends MessageResources
implements Observer
{
/**
* Logger
*/
private static Log log = LogFactory.getLog( MessageResourcesProxy.class );
/** Ressources dans le fichier de configuration */
private MessageResources mMessageResources;
/**
* Constructeur
*
* @param factory factory
* @param config configuration
* @param pMessageResources messages struts
*/
public MessageResourcesProxy( MessageResourcesFactory factory, String config, MessageResources pMessageResources )
{
super( factory, config );
mMessageResources = pMessageResources;
IApplicationComponent ac;
DataBaseMessages.registerObserver( this );
try
{
ac = AccessDelegateHelper.getInstance( "Messages" );
MessageProvider messages = MessagesDTOTransformer.transform( ac.execute( "getMessages" ) );
DataBaseMessages.update( messages );
}
catch ( JrafEnterpriseException e )
{
log.error( e, e );
}
}
/**
* @see org.apache.struts.util.MessageResources#getMessage(java.util.Locale, java.lang.String) {@inheritDoc}
*/
public String getMessage( Locale locale, String key )
{
String result = mMessageResources.getMessage( locale, key );
// R�cup�ration du message dans la base de donn�es
if ( result == null )
{
result = DataBaseMessages.getMessage( locale, key );
}
return result;
}
/**
* @see java.util.Observer#update(java.util.Observable, java.lang.Object) {@inheritDoc}
*/
public void update( Observable o, Object arg )
{
// On reinitialise la map interne des formats g�r�e par struts
// Cette map contient un ensemble de MessageFormat
synchronized ( formats )
{
formats.clear();
}
}
}