/**
* 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.addons.message.action;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.squale.welcom.addons.config.AddonsConfig;
import org.squale.welcom.addons.message.MessageResourcesAddons;
import org.squale.welcom.addons.message.WAddOnsMessageManager;
import org.squale.welcom.addons.message.bean.MessageBean;
import org.squale.welcom.addons.message.bean.MessagesBean;
import org.squale.welcom.outils.WelcomConfigurator;
import org.squale.welcom.outils.jdbc.WJdbcMagic;
import org.squale.welcom.outils.jdbc.WStatement;
import org.squale.welcom.struts.action.WDispatchAction;
/*
* Cr�� le 25 mai 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
*/
/**
* @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 WMessageListeAction
extends WDispatchAction
{
/**
* @see org.apache.struts.actions.DispatchAction#unspecified(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public ActionForward unspecified( final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response )
throws Exception
{
MessagesBean messagesBean = (MessagesBean) form;
String localesStr = WelcomConfigurator.getMessage( WelcomConfigurator.ADDONS_MESSAGE_MANAGER_LOCALES );
ArrayList locales = new ArrayList();
if ( locales != null )
{
StringTokenizer tokenizer = new StringTokenizer( localesStr, "," );
while ( tokenizer.hasMoreTokens() )
{
locales.add( tokenizer.nextToken() );
}
}
if ( locales.size() < 1 )
{
throw new ServletException( "La variable addons.messageManager.locales doit etre renseign�e" );
}
// associe a un messageKey, le messageBean associe
HashMap messageMap = new HashMap();
MessageResourcesAddons messageResourcesAddons = ( (MessageResourcesAddons) getResources( request ) );
Enumeration enumeration = messageResourcesAddons.getDefaultPropertiesKeys();
ArrayList list = new ArrayList();
while ( enumeration.hasMoreElements() )
{
String key = (String) enumeration.nextElement();
String value = messageResourcesAddons.getDefaultProperty( key );
MessageBean messageBean = new MessageBean();
messageBean.setMessageKey( key );
messageBean.setDefaultValue( value );
messageMap.put( key, messageBean );
list.add( messageBean );
}
WJdbcMagic jdbc = null;
try
{
jdbc = new WJdbcMagic();
WStatement sta = jdbc.getWStatement();
sta.add( "select * from " + AddonsConfig.WEL_MSGLIBELLE );
ResultSet rs = sta.executeQuery();
if ( rs != null )
{
while ( rs.next() )
{
MessageBean bean = (MessageBean) messageMap.get( rs.getString( "MESSAGEKEY" ) );
if ( bean == null )
{
MessageBean messageBean = new MessageBean();
messageBean.setMessageKey( rs.getString( "MESSAGEKEY" ) );
messageBean.setValue( rs.getString( "LOCALE" ), rs.getString( "MESSAGE" ) );
messageBean.setDefaultValue( rs.getString( "MESSAGE" ) );
messageMap.put( messageBean.getMessageKey(), messageBean );
}
else
{
bean.setValue( rs.getString( "LOCALE" ), rs.getString( "MESSAGE" ) );
}
}
rs.close();
}
sta.close();
messagesBean.setListMessages( list );
messagesBean.setListLocales( locales );
// Pour l'autocomplete de la recherche
request.getSession().setAttribute( "listMessages", list );
return mapping.findForward( "success" );
}
catch ( SQLException sqle )
{
throw new ServletException( sqle.getMessage() );
}
finally
{
if ( jdbc != null )
{
jdbc.close();
}
}
}
/**
* Action Modifier
*
* @param mapping le mapping
* @param form l'actionform
* @param request la request
* @param response la response
* @return l'actionForward retourn�
* @throws Exception exception pouvant etre levee
*/
public ActionForward modifier( final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response )
throws Exception
{
final MessagesBean messagesBean = (MessagesBean) form;
final ArrayList locales = messagesBean.getListLocales();
final ArrayList messages = messagesBean.getListMessages();
String locale;
String value;
WJdbcMagic jdbc = null;
try
{
jdbc = new WJdbcMagic();
WStatement sta = null;
for ( int loc = 0; loc < locales.size(); loc++ )
{
locale = (String) locales.get( loc );
for ( int i = 0; i < messages.size(); i++ )
{
sta = jdbc.getWStatement();
final MessageBean message = (MessageBean) messages.get( i );
if ( message.isChanged( locale ) )
{
value = message.getValueNew( locale );
if ( GenericValidator.isBlankOrNull( value ) )
{
// DELETE
sta.add( "delete from " + AddonsConfig.WEL_MSGLIBELLE + " where " );
sta.addParameter( "MESSAGEKEY=?", message.getMessageKey() );
sta.addParameter( "and LOCALE=?", locale );
sta.executeUpdate();
}
else
{
sta.add( "update " + AddonsConfig.WEL_MSGLIBELLE + " set" );
sta.addParameter( "MESSAGE=?", value );
sta.addParameter( "where MESSAGEKEY=?", message.getMessageKey() );
sta.addParameter( "and LOCALE=?", locale );
final int result = sta.executeUpdate();
if ( result == 0 )
{
sta.close();
sta = jdbc.getWStatement();
// La ligne n'existait pas, on la cree
sta.add( "insert into " + AddonsConfig.WEL_MSGLIBELLE
+ " (MESSAGEKEY,MESSAGE,LOCALE) values (" );
sta.addParameter( "?,", message.getMessageKey() );
sta.addParameter( "?,", value );
sta.addParameter( "?)", locale );
sta.executeUpdate();
}
}
sta.close();
}
}
}
// Met a jour le timestamp
sta = jdbc.getWStatement();
sta.add( "update WEL_ADDONS set" );
sta.addParameter( "PARAMETERS=?", new Date().getTime() );
sta.addParameter( "where NAME=?", WAddOnsMessageManager.ADDONS_MESSAGEMANAGER_NAME );
sta.executeUpdate();
sta.close();
jdbc.commit();
( (MessageResourcesAddons) getResources( request ) ).resetCache();
}
catch ( final SQLException sqle )
{
throw new ServletException( sqle.getMessage() );
}
finally
{
if ( jdbc != null )
{
jdbc.close();
}
}
return mapping.findForward( "success" );
}
/**
* Action recherce
*
* @param mapping le mapping
* @param form l'actionform
* @param request la request
* @param response la response
* @return l'actionForward retourn�
* @throws Exception exception pouvant etre levee
*/
public ActionForward recherche( final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response )
throws Exception
{
final MessagesBean messagesBean = (MessagesBean) form;
final String messageKeyFiltre = messagesBean.getMessageKeyFiltre();
final String messageFiltre = messagesBean.getMessageFiltre();
final ArrayList listSession = (ArrayList) request.getSession().getAttribute( "listMessages" );
ArrayList listRecherche = new ArrayList();
MessageBean messageBean;
if ( messageKeyFiltre.equals( "" ) && messageFiltre.equals( "" ) )
{
listRecherche = listSession;
}
for ( int i = 0; i < listSession.size(); i++ )
{
messageBean = (MessageBean) listSession.get( i );
if ( messageKeyFiltre.equals( "" ) && messageBean.contain( messageFiltre ) )
{
listRecherche.add( messageBean );
}
else if ( messageBean.getMessageKey().indexOf( messageKeyFiltre ) >= 0 )
{
if ( messageBean.contain( messageFiltre ) )
{ // true si le messageFiltre est vide
listRecherche.add( messageBean );
}
}
}
messagesBean.setListMessages( listRecherche );
return mapping.findForward( "success" );
}
}