Subversion Repositories bacoAlunos

Rev

Rev 1051 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.sigesimports;

import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitSummary;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.ipportalegre.siges.web.services.ArrayOfAula;
import pt.ipportalegre.siges.web.services.Aula;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import javax.xml.namespace.QName;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

/**
 * @author Jorge Machado
 * @date 11/May/2008
 * @time 12:51:32
 * @see pt.estgp.estgweb
 */

public class LoadSumariesToPDF implements IService
{

    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(LoadSumariesToPDF.class);

    private static final int MAX_COMMIT = 100;

    private List<Long> newSummaries = new ArrayList<Long>();

    public ILogMessages load(long courseUnitId)
    {


        DefaultLogMessages logMessages = new DefaultLogMessages();
        logMessages.addMessage(new DefaultLogMessage("import.summaries", LogMessageTypeEnum.INFO, "courseunit id:" + courseUnitId));
        SiGesWEB service;
        try
        {
            //service = new SiGesWEB(new URL(Globals.SIGES_WEBSERVICE_WSDL), new QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
            service = new SiGesWEB(new 1.5.0/docs/api/java/net/URL.html">URL("http://127.0.0.1:8080/SigesWeb/SiGesWEB.asmx?wsdl"), new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
        }
        catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e)
        {
            logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
            logger.fatal(e, e);
            return logMessages;
        }
        AbstractDao.getCurrentSession().beginTransaction();
        CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
        ArrayOfAula arrayOfAulas = service.getSiGesWEBSoap().getAulas(new 1.5.0/docs/api/java/math/BigDecimal.html">BigDecimal(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()), c.getImportYear(),c.getCode(),c.getSemestre(),c.getCourse().getCode());

        if(arrayOfAulas != null && arrayOfAulas.getAula() != null)
        {
            List<CourseUnitSummary> summaries = new ArrayList<CourseUnitSummary>();
            logMessages.setSummaries(summaries);
            for(Aula aula: arrayOfAulas.getAula())
            {
                CourseUnitSummary s = DomainObjectFactory.createCourseUnitSummaryImpl();
                summaries.add(s);

                s.setCodigoSumario(""+aula.getCodigoSumario().intValue());
                s.setCodigoAula(""+aula.getSumNumeroAula().intValue());
                s.setNumeroAula(aula.getSumNumeroAula().intValue());
                s.setDataAula(aula.getData().toGregorianCalendar().getTime());
                s.setTipoAula(aula.getSumTipoAula());
                s.setCodigoSalaAula("" + aula.getAulaCodigoSalaAula().intValue());
                s.setAlunosPresentes(aula.getSumNumeroAlunos().intValue());
                s.setTitulo(aula.getSumTitulo());
                s.setDescricao(aula.getSumDescricao());
                s.setcEstado(""+aula.getSumCdEstado().intValue());
                s.setNumeroHoras("" + aula.getNumeroCelulas().intValue());
            }
        }
        else
            logger.error("Summaries come null in unit:" + c.getCode());

        AbstractDao.getCurrentSession().getTransaction().commit();
        return logMessages;
    }
    public ILogMessages run(1.5.0/docs/api/java/lang/String.html">String year) throws ServiceException
    {
        DefaultLogMessages logMessages = new DefaultLogMessages();
        logMessages.addMessage(new DefaultLogMessage("import.summaries", LogMessageTypeEnum.INFO, "instituicao " + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()));
        logger.info("starting summaries import");
        try
        {
            AbstractDao.getCurrentSession().beginTransaction();
            1.5.0/docs/api/java/lang/String.html">String WSDL = DaoFactory.getConfigurationDaoImpl().getSigesWebServicesWsdl();
            SiGesWEB service;
            try
            {
                service = new SiGesWEB(new 1.5.0/docs/api/java/net/URL.html">URL(WSDL), new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
            }
            catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e)
            {
                logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
                logger.fatal(e, e);
                return logMessages;
            }

            int i = 0;
            List<Long> cUs = DaoFactory.getCourseUnitDaoImpl().loadIds(year,DatesUtils.getSemestre());
            for(1.5.0/docs/api/java/lang/Long.html">Long cId: cUs)
            {
                if (i++ > MAX_COMMIT)
                {
                    i = 0;
                    AbstractDao.getCurrentSession().getTransaction().commit();
                    AbstractDao.getCurrentSession().beginTransaction();
                }
                CourseUnit c = DaoFactory.getCourseUnitDaoImpl().load(cId);
                logMessages.addMessage(new DefaultLogMessage("import.info","","Importing Summaries to CourseUnit: " + c.getCode() + ": course: " + c.getCourse().getCode(), LogMessageTypeEnum.INFO));
                logger.info("Importing Summaries to CourseUnit: " + c.getName() + " ("  + c.getCode() + ") course " + c.getCourse().getName() +  " (" + c.getCourse().getCode() + ")");

                int tries = 3;
                ArrayOfAula arrayOfAulas = null;
                while(tries > 0)
                {
                        //comentario de teste
                    try
                    {
                        arrayOfAulas = service.getSiGesWEBSoap().getAulas(new 1.5.0/docs/api/java/math/BigDecimal.html">BigDecimal(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()), year,c.getCode(),DatesUtils.getSemestre(),c.getCourse().getCode());
                        break;
                    }
                    catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable t)
                    {
                        if(tries-- == 0)
                        {
                            logger.error("Giving up of courseUnit:" + cId + " ( " + c.getName() + " ) ",t);
                            break;
                        }

                        logger.error("WebService Fail, trying " + tries + " times sleeping a while");
                        1.5.0/docs/api/java/lang/Thread.html">Thread.sleep(5000);
                    }
                }
                if(arrayOfAulas != null && arrayOfAulas.getAula() != null)
                {
                    HashMap<String, CourseUnitSummary> map = new HashMap<String, CourseUnitSummary>();
                    if(c.getSummaries() != null && c.getSummaries().size() > 0)
                        for(CourseUnitSummary s: c.getSummaries())
                            map.put(s.getCodigoAula() + ":" + s.getCodigoSumario(),s);
                    else
                        c.setSummaries(new HashSet<CourseUnitSummary>());
                    for(Aula aula: arrayOfAulas.getAula())
                    {
                        CourseUnitSummary s = map.get(aula.getSumNumeroAula() + ":" + aula.getCodigoSumario());
                        if(s == null)
                        {
                            s = DomainObjectFactory.createCourseUnitSummaryImpl();
                            s.setCourseUnit(c);
                            c.getSummaries().add(s);
                            DaoFactory.getCourseUnitSummaryDaoImpl().save(s);
                            newSummaries.add(s.getId());
                        }
                        s.setCodigoSumario(""+aula.getCodigoSumario().intValue());
                        s.setCodigoAula(""+aula.getSumNumeroAula().intValue());
                        s.setNumeroAula(aula.getSumNumeroAula().intValue());
                        s.setDataAula(aula.getData().toGregorianCalendar().getTime());
                        s.setTipoAula(aula.getSumTipoAula());
                        s.setCodigoSalaAula("" + aula.getAulaCodigoSalaAula().intValue());
                        s.setAlunosPresentes(aula.getSumNumeroAlunos().intValue());
                        s.setTitulo(aula.getSumTitulo());
                        s.setDescricao(aula.getSumDescricao());
                        s.setcEstado(""+aula.getSumCdEstado().intValue());
                    }
                }
                else
                    logger.error("Summaries come null in unit:" + c.getCode());
            }
            sendEmail(null);
            AbstractDao.getCurrentSession().getTransaction().commit();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            AbstractDao.getCurrentSession().getTransaction().rollback();
            logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
            throw new ServiceException(e.toString(), e);
        }

        logMessages.addMessage(new DefaultLogMessage("import.summaries.terminating", LogMessageTypeEnum.INFO));
        logger.info("terminating summaries import");
        return logMessages;
    }


    public static SendEmailService sendEmailService = new SendEmailService();

    private void sendEmail(UserSession userSession)
    {
        if(Globals.EMAIL_SUMMARIES && newSummaries.size() > 0)
        {
            for(long id: newSummaries)
            {
                CourseUnitSummary summary = DaoFactory.getCourseUnitSummaryDaoImpl().load(id);
                List<String> emails = DaoFactory.getCourseUnitSummaryDaoImpl().getStudentsEmails(summary.getId());
                if(emails == null)
                    logger.warn("No students emails in unit: code:" + summary.getCourseUnit().getCode() + " " + summary.getCourseUnit().getName());
                EMAILJob emailJob = new EMAILJob(sendEmailService.getSummaryEmail(emails,summary,summary.getCourseUnit(), LangEnum.PORTUGUESE));
                JobScheduleService.getInstance().scheduleNow(emailJob,"New Summary EMAIL from: " + summary.getCourseUnit().getName() + " aula: " +summary.getNumeroAula() ,userSession);
            }
        }
    }

    /**
     * Testar por aqui poi requer Super Role e assim e' autmatico
     *
     *
     * @param args of main
     * @throws pt.estgp.estgweb.services.expceptions.ServiceException on error
     */

    /*public static void main(String[] args) throws ServiceException
    {
        String year = DatesUtils.getImportYear();
        if(args != null && args.length > 0)
            year = args[0];
        new LoadSumariesToPDF().run(year);
    }*/

    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws ServiceException
    {

        ILogMessages m = new LoadSumariesToPDF().load(4136);
        List<CourseUnitSummary> su = m.getSummaries();
        for(CourseUnitSummary s: su)
        {
            1.5.0/docs/api/java/lang/System.html">System.out.println(s.toString());
        }
        //m.toString();


    }



}