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
);
Transport transport = emailTransport.
getEmailTransport();
if(transport.
isConnected())
{
logger.
warn("EMAIL POOL: Transport (" + emailTransport.
getIdentifier() +
") is OK connected, will return this one");
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;
}
}