Subversion Repositories bacoAlunos

Rev

Rev 1453 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.email.impl;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;

import javax.mail.Transport;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by jorgemachado on 13/06/16.
 */

public class EmailTransportPool
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(EmailTransportPool.class);

    private List<EmailTransport> pool = new ArrayList<EmailTransport>();

    //SINGLETON INSTANCE
    static EmailTransportPool instance = new EmailTransportPool();

    public static EmailTransportPool getInstance(){
        return instance;
    }

    1.5.0/docs/api/java/lang/String.html">String[] serverEmails;

    private EmailTransportPool()
    {
        serverEmails = new 1.5.0/docs/api/java/lang/String.html">String[Globals.EMAIL_SERVER_USER_COUNT];
        for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++)
        {
            serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX;
        }

        if(Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN)
        {
            for(1.5.0/docs/api/java/lang/String.html">String emailFrom: serverEmails)
            {
                1.5.0/docs/api/java/lang/String.html">String pass = Globals.EMAIL_SERVER_PASSWORD;
                logger.info("POOL: Adding to POOL " + emailFrom + " with pass: " + pass);
                createTransport(emailFrom,emailFrom,pass);
            }
        }
        else
        {
            logger.info("POOL: Will use only system mail box");
            createTransport(Globals.SYSTEM_EMAIL_BOX,Globals.SYSTEM_EMAIL_BOX,Globals.EMAIL_SERVER_PASSWORD);
        }
    }

    private void createTransport(1.5.0/docs/api/java/lang/String.html">String identifier, 1.5.0/docs/api/java/lang/String.html">String emailFrom, 1.5.0/docs/api/java/lang/String.html">String emailServerPassword)
    {
        EmailTransport emailTransport = new EmailTransport(identifier,emailFrom,emailServerPassword);
        pool.add(emailTransport);
    }

    int indexPool = -1;

    public EmailTransport getAvailableTransportFromPool()
    {
        int tries = pool.size();
        while(tries > 0)
        {
            tries--;

            indexPool++;

            if(indexPool >= pool.size())
                indexPool = 0;

            EmailTransport emailTransport = pool.get(indexPool);
            indexPool++;
            Transport transport = emailTransport.getEmailTransport();
            if(transport.isConnected())
            {
                return emailTransport;
            }
            else
            {
                logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is not connected, will try another");
            }
        }
        logger.warn("EMAIL POOL: Transport (There are no available transports)");
        return null;
    }

}