/**
* 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.squalecommon.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.squale.jraf.commons.exception.JrafEnterpriseException;
import org.squale.jraf.spi.accessdelegate.IApplicationComponent;
import org.squale.squalecommon.enterpriselayer.applicationcomponent.administration.LoginApplicationComponentAccess;
import org.squale.squalecommon.util.mail.IMailerProvider;
import org.squale.squalecommon.util.mail.MailException;
import org.squale.squalecommon.util.messages.CommonMessages;
/**
*
*/
public class SqualeCommonUtils
{
/**
* Logger
*/
private static Log log = LogFactory.getLog( SqualeCommonUtils.class );
/** champ permettant d'acc�der aux �l�ments */
private static LoginApplicationComponentAccess access = new LoginApplicationComponentAccess();
/**
* @param pProvider le fournisser de service mail
* @param pDestList la liste des destinataires
* @param pApplicationId l'id de l'application concern�e
* @param pObject l'objet du mail
* @param pContent le contenu du mail
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return true si le mail a bein �t� envoy�
*/
public static boolean notifyByEmail( IMailerProvider pProvider, String pDestList, Long pApplicationId,
String pObject, String pContent, boolean pUnsubscribed )
{
return notifyByEmail( pProvider, null, pDestList, pApplicationId, pObject, pContent, pUnsubscribed );
}
/**
* @param pProvider le fournisser de service mail
* @param pSender le nom de l'exp�diteur
* @param pDestList la liste des destinataires
* @param pApplicationId l'id de l'application concern�e
* @param pObject l'objet du mail
* @param pContent le contenu du mail
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return true si le mail a �t� envoy�
*/
public static boolean notifyByEmail( IMailerProvider pProvider, String pSender, String pDestList,
Long pApplicationId, String pObject, String pContent, boolean pUnsubscribed )
{
boolean sent = true;
Collection destColl = getDestEmails( pDestList, pApplicationId, pUnsubscribed );
// transformation le liste en tableau de String
String[] recipients = new String[destColl.size()];
recipients = (String[]) destColl.toArray( recipients );
// si on a r�ussi � identifier des destinataires
if ( recipients.length != 0 )
{
// Envoi du mail
try
{
pProvider.sendMail( pSender, recipients, pObject, pContent );
}
catch ( MailException e )
{
log.error( CommonMessages.getString( "exception.sendmail" ), e );
sent = false;
}
}
return sent;
}
/**
* @param pDestList indique quels utilisateurs sont concern�s (constante d�finie dans SqualeCommonConstants)
* @param pApplicationId l'id de l'application concern�e
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return la liste des destinataires
*/
private static Collection getDestEmails( String pDestList, Long pApplicationId, boolean pUnsubscribed )
{
Collection destColl = new ArrayList();
if ( pDestList.equals( SqualeCommonConstants.ONLY_ADMINS ) )
{
// mail seulement pour les admins du portail
destColl = getAdminsEmails( pUnsubscribed );
}
else
{
if ( pDestList.equals( SqualeCommonConstants.ONLY_MANAGERS ) )
{
// mail seulement pour les managers de l'application
destColl = getManagersEmails( pApplicationId, pUnsubscribed );
}
else
{
if ( pDestList.equals( SqualeCommonConstants.MANAGERS_AND_ADMINS ) )
{
// mail destin� � la fois aux admins du portail
// ainsi qu'aux gestionnaires de l'application
destColl = getAdminsAndManagersEmails( pApplicationId, pUnsubscribed );
}
else
{
if ( pDestList.equals( SqualeCommonConstants.MANAGERS_AND_READERS ) )
{
// mail destin� � la fois aux gestionnaires de l'application
// et aux diff�rents utilisateurs qui ont le droit de lecture
// sur les r�sultats de l'application
destColl = getManagersAndReadersEmails( pApplicationId, pUnsubscribed );
}
else
{
destColl.add( pDestList );
}
}
}
}
return destColl;
}
/**
* @param pId l'application dont on veut les managers
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return une collection contenant l'ensemble des admins du portail ainsi que les managers de l'application.
*/
private static Collection getAdminsAndManagersEmails( Long pId, boolean pUnsubscribed )
{
Collection managers = getManagersEmails( pId, pUnsubscribed );
Collection admins = getAdminsEmails( pUnsubscribed );
return merge( managers, admins );
}
/**
* @param pId l'application dont on veut les managers
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return une collection contenant l'ensemble des admins du portail ainsi que les managers de l'application.
*/
private static Collection getManagersAndReadersEmails( Long pId, boolean pUnsubscribed )
{
Collection managers = getManagersEmails( pId, pUnsubscribed );
Collection readers = getReadersEmails( pId, pUnsubscribed );
return merge( managers, readers );
}
/**
* Fusionne 2 collections d'emails en �vitant les doublons
*
* @param pColl1 la premi�re collection d'emails
* @param pColl2 la deuxi�me collection d'emails
* @return une collection r�sultat de la fusion sans doublons
*/
private static Collection merge( Collection pColl1, Collection pColl2 )
{
ArrayList result = new ArrayList( 0 );
result.addAll( pColl1 );
Iterator it = pColl2.iterator();
while ( it.hasNext() )
{
String currentMail = (String) it.next();
// on n'utilise pas la m�thode contains car on veut juste v�rifier les emails
boolean needToAdd = true;
for ( int i = 0; needToAdd && i < result.size(); i++ )
{
String comparedEmail = ( (String) result.get( i ) );
if ( currentMail.equals( comparedEmail ) )
{
needToAdd = false;
}
}
if ( needToAdd )
{
result.add( currentMail );
}
}
return result;
}
/**
* @param pId l'id de l'application confirm�e
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return la liste des emails des managers de l'application
*/
private static Collection getManagersEmails( Long pId, boolean pUnsubscribed )
{
// On cherche les utilisateurs avec le profil gestionnaire de l'application
IApplicationComponent ac;
Collection coll = new ArrayList( 0 );
try
{
// Obtention de la liste des administrateurs
coll = access.getManagersEmails( pId, new Boolean( pUnsubscribed ) );
}
catch ( JrafEnterpriseException e )
{
log.error( CommonMessages.getString( "exception.sendmail" ), e );
}
return coll;
}
/**
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return la liste des emails des administrateurs
*/
private static Collection getAdminsEmails( boolean pUnsubscribed )
{
// On cherche les utilisateurs avec le profil administrateur
IApplicationComponent ac;
String[] recipients = null;
Collection coll = new ArrayList( 0 );
try
{
// Obtention de la liste des administrateurs
coll = access.getAdminsEmails( new Boolean( pUnsubscribed ) );
}
catch ( JrafEnterpriseException e )
{
log.error( CommonMessages.getString( "exception.sendmail" ), e );
}
return coll;
}
/**
* @param pId l'id de l'application confirm�e
* @param pUnsubscribed true si on veut r�cup�rer aussi les utilisateur qui se sont d�sabonn�s de l'envoi
* automatique d'email.
* @return la liste des emails des utilisateurs ayant un droit de lecture sur l'application
*/
private static Collection getReadersEmails( Long pId, boolean pUnsubscribed )
{
// On cherche les utilisateurs avec le profil administrateur
IApplicationComponent ac;
String[] recipients = null;
Collection coll = new ArrayList( 0 );
try
{
// Obtention de la liste des administrateurs
coll = access.getReadersEmails( pId, new Boolean( pUnsubscribed ) );
}
catch ( JrafEnterpriseException e )
{
log.error( CommonMessages.getString( "exception.sendmail" ), e );
}
return coll;
}
}