Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.email;

import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.authenticate.AuthenticateService;
import pt.estgp.estgweb.services.jobs.JobHandler;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Jorge Machado
 * @date 11/Jul/2008
 * @see pt.estgp.estgweb.services.sms
 */

public class EMAILJobPersonalizedCertificated implements JobHandler, 1.5.0/docs/api/java/io/Serializable.html">Serializable
{
    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(EMAILJobPersonalizedCertificated.class);

    private EmailPersonalizedCertificated email;




    public EMAILJobPersonalizedCertificated(EmailPersonalizedCertificated email)
    {
        this.email = email;
    }


    private static final int pauseTime = 1000;


    public void runJob()
    {
        final EmailPersonalizedCertificated cloned = email.cloneEmailForJob();


        logger.info("Opening new Thread to send emails");
        new 1.5.0/docs/api/java/lang/Thread.html">Thread(
                new 1.5.0/docs/api/java/lang/Runnable.html">Runnable() {
                    @1.5.0/docs/api/java/lang/Override.html">Override
                    public void run() {
                        if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail())
                        {
                            1.5.0/docs/api/java/lang/String.html">String warn = "System in TEST Environement - will not send EMAIL";
                            logger.warn(warn);
                            return;
                        }
                        try
                        {
                            1.5.0/docs/api/java/lang/String.html">String URL_PREFIX = cloned.getUrlPatternWithoutCetificate();
                            if(URL_PREFIX.indexOf("?") <  0)
                                URL_PREFIX = URL_PREFIX + "?certificate=";
                            else
                                URL_PREFIX = URL_PREFIX + "&certificate=";

                            cloned.setRecipients(new ArrayList<String>());

                            for(long userId: cloned.getUserIds())
                            {

                                try{
                                    AbstractDao.getCurrentSession().beginTransaction();
                                    AbstractDao.getCurrentSession().clear();
                                    User user = DaoFactory.getUserDaoImpl().load(userId);
                                    1.5.0/docs/api/java/lang/String.html">String certificate = new AuthenticateService().createCertificate(user);
                                    1.5.0/docs/api/java/lang/String.html">String emailStr = user.getEmail();
                                    1.5.0/docs/api/java/lang/String.html">String outEmail = user.getOutEmail();
                                    1.5.0/docs/api/java/lang/String.html">String preferrefEmail = user.getPreferrefEmail();
                                    1.5.0/docs/api/java/lang/String.html">String toEmail = null;

                                    if(preferrefEmail != null && Email.validEmail(preferrefEmail))
                                        toEmail = preferrefEmail;
                                    else if(emailStr != null && Email.validEmail(emailStr))
                                        toEmail = emailStr;
                                    else if(outEmail != null && Email.validEmail(outEmail))
                                        toEmail = outEmail;
                                    1.5.0/docs/api/java/lang/String.html">String nome = user.getName();
                                    AbstractDao.getCurrentSession().getTransaction().commit();

                                    if(toEmail != null)
                                    {
                                        List<String> ccEmails = new ArrayList<String>();
                                        if(emailStr != null && Email.validEmail(emailStr) && !toEmail.equals(emailStr))
                                            ccEmails.add(emailStr);
                                        if(outEmail != null && Email.validEmail(outEmail) && !toEmail.equals(outEmail))
                                            ccEmails.add(outEmail);


                                        cloned.setRecipientsCC(ccEmails);
                                        cloned.getRecipients().clear();
                                        cloned.getRecipients().add(toEmail);

                                        1.5.0/docs/api/java/lang/String.html">String finalUrl = URL_PREFIX + certificate;

                                        new SendEmailService().sendEmail(cloned,finalUrl,nome);

                                        try {
                                            logger.info("Watting to send another email: sent to" + toEmail);
                                            //Thread.sleep(pauseTime);
                                            1.5.0/docs/api/java/lang/Thread.html">Thread.sleep(pauseTime);
                                        } catch (1.5.0/docs/api/java/lang/InterruptedException.html">InterruptedException e) {
                                            logger.error(e,e);
                                        }
                                    }


                                }catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
                                {
                                    logger.error(e,e);
                                }

                            }

                            logger.info("No more user ids to send email. exiting");


                        }
                        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
                        {
                            logger.error("Sending EMAIL:" + e.toString(),e);
                        }
                    }
                }
        ).start();
    }



}