/**
* 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.squalix.messages;
import java.util.TreeMap;
import java.util.Iterator;
import java.util.LinkedList;
import org.squale.squalix.messages.Messages;
public class MessageMailManager
{
/**
* Corps du message
*/
private TreeMap<String, String> mBody;
/**
* Validit� des parties du message par langue
*/
private TreeMap<String, Boolean> mValidity;
/**
* Liste des langues
*/
private String[] mLanguages;
/**
* Historique des cl�s de message demand�es
*/
private LinkedList<TreeMap<String, String[]>> mHistory;
/**
* Constructeur public
*/
public MessageMailManager()
{
getLanguages();
mValidity = new TreeMap<String, Boolean>();
mBody = new TreeMap<String, String>();
mHistory = new LinkedList<TreeMap<String, String[]>>();
initValidity();
}
/**
* Initialise la liste des langues
*/
private void getLanguages()
{
// R�cup�ration de la liste des langues
String param = Messages.getString( "mail.squalix.language" );
mLanguages = param.split( "," );
}
/**
* Initialise le tableau de validit� par langue
*/
private void initValidity()
{
// boucle sur les diff�rents langues
for ( int i = 0; i < mLanguages.length; i++ )
{
mValidity.put( mLanguages[i], true );
}
}
/**
* Rajoute du contenu (s�par� par langue) identifi�e par la cl�
* @param pKey la cl� identifiant le contenu � rajouter
* @param pValues les �ventuelles valeurs � suppl�er dans le contenu
*/
public void addContent( String pKey, String[] pValues )
{
TreeMap<String, String[]> historique = new TreeMap<String, String[]>();
historique.put( pKey, pValues );
mHistory.add( historique );
for ( int i = 0; i < mLanguages.length; i++ )
{
// Si la cl� existe, on va le rajouter sinon on indique l'invalidit� pour le langage
if ( Messages.existString( pKey + "." + mLanguages[i] ).booleanValue() )
{
// R�cup�ration de la cl� pour le langue
addData( mLanguages[i], Messages.getMessage( pKey + "." + mLanguages[i], pValues ) );
}
else
{
mValidity.put( mLanguages[i], false );
}
}
}
/**
* Rajoute des donn�es dans le Body suivant les langues
*
* @param pLanguage la langue
* @param pData les donn�es � rajouter
*/
private void addData( String pLanguage, String pData )
{
if ( mBody.containsKey( pLanguage ) )
{
mBody.put( pLanguage, mBody.get( pLanguage ) + pData );
}
else
{
mBody.put( pLanguage, pData );
}
}
/**
* Construit le contenu du mail en fonction de la validit�
*
* @return le contenu du mail
*/
public String getContent()
{
// S'il manque une valeur pour un langage, on construit le mail classique
if ( mValidity.containsValue( false ) )
{
return buildMixedContent();
}
else
{
return buildSeparateContent();
}
}
/**
* Construit le contenu du mail avec un m�lange FR/EN
* @return le contenu du mail
*/
private String buildMixedContent()
{
String result = "";
Iterator<TreeMap<String, String[]>> it = mHistory.iterator();
while ( it.hasNext() )
{
TreeMap<String, String[]> reference = it.next();
result += Messages.getMessage( reference.firstKey(), reference.get( reference.firstKey() ) );
}
return result;
}
/**
* Construit le contenu du mail par langue avec un s�parateur
* @return le contenu du mail format� par langue
*/
private String buildSeparateContent()
{
String result = "";
String separator = Messages.getString( "mail.squalix.language.separator" );
for ( int i = 0; i < mLanguages.length; i++ )
{
result += mBody.get( mLanguages[i] ).trim();
if ( i != ( mLanguages.length - 1 ) )
{
result += separator;
}
}
return result;
}
}