Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.courseunits;

import jomm.utils.PdfUtils;
import org.apache.fop.apps.FOPException;
import org.apache.log4j.Logger;
import org.dom4j.*;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitProgramView;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.utils.StringsUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */


/**
 * @author Jorge Machado
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

public class SaveCourseUnitProgram implements IService
{

    RepositoryService repositoryService = new RepositoryService();
    LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements();

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

    public CourseUnitProgramView run(CourseUnitProgramView cupv, 1.5.0/docs/api/java/lang/Long.html">Long coursUnitId, UserSession usession) throws ServiceException, 1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException, 1.5.0/docs/api/java/io/IOException.html">IOException, FOPException {
        CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(coursUnitId);

        CourseUnitProgram program = c.getCourseUnitProgram();
        if(program == null)
        {
            program = new CourseUnitProgramImpl();
            DaoFactory.getCourseUnitProgramDaoImpl().save(program);
            program.setCourseUnitProgramPart2(new CourseUnitProgramPart2Impl());
            DaoFactory.getCourseUnitProgramPart2DaoImpl().save(program.getCourseUnitProgramPart2());
            c.setCourseUnitProgram(program);
        }
//
        if(usession.getUser().isSuperuserOrAdmin())
        {
            cupv.persistViewInObjectAdministrator(program);
            cupv.persistViewInObjectCoordinator(program);
            cupv.persistViewInObjectTeacher(program);
        }
        if(usession.getUser() instanceof Teacher && (((Teacher)(usession.getUser())).isTeacherOfCourseUnit(c.getId(),true)))
        {
            cupv.persistViewInObjectTeacher(program);
        }
        if(usession.getUser() instanceof Teacher
                && (((usession.getUser())).hasRole(c.getCourse().getValidationRole())
                ||
                ((usession.getUser()) == c.getCourse().getCoordinator()))
                )
        {
            cupv.persistViewInObjectCoordinator(program);
        }
        List<String> errors = new ArrayList<String>();
        createPdf(c,errors,usession);

        if(usession.getUser() instanceof Teacher)
            DirectedCoordinatedUnitsService.sendNotificationsEditedInterestedPeople(c,usession);
        else
        {
            logger.info("Nao vai informar docentes");
        }
       
        return cupv;
    }



    public void createPdf(CourseUnit cu, List<String> errors) throws 1.5.0/docs/api/java/io/IOException.html">IOException, 1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException, FOPException {
        createPdf(cu,errors,null);
    }
    public void createPdf(CourseUnit cu, List<String> errors,UserSession u) throws 1.5.0/docs/api/java/io/IOException.html">IOException, 1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException, FOPException {

        ((CourseUnitProgramImpl)cu.getCourseUnitProgram()).consistNullValues();
        5+0%2Fdocs%2Fapi+Document">Document responseDoc = DocumentHelper.createDocument();
        Namespace namespace = new Namespace("uc", "http://baco.estgp.pt/schemas/courseunits/program/");
        responseDoc.setXMLEncoding("ISO-8859-1");

        1.5.0/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat sdf = new 1.5.0/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat("dd-MM-yyyy");
        5+0%2Fdocs%2Fapi+Element">Element curriculum = responseDoc.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("UnidadeCurricular", namespace));
        curriculum.addAttribute(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("data",namespace),sdf.format(new java.util.5+0%2Fdocs%2Fapi+Date">Date()));

        5+0%2Fdocs%2Fapi+Element">Element curso = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("curso",namespace));
        if(cu.getCourseName() == null)
        {
            if(cu.getCourse() == null)
            {
                1.5.0/docs/api/java/lang/System.html">System.out.println("Unidade nao tem curso");
                curso.setText("Desactualizado");
            }
            else
            {
                1.5.0/docs/api/java/lang/System.html">System.out.println("Unidade nao tem nome no curso a actualizar com " + cu.getCourse().getName());
                curso.setText(cu.getCourse().getName());
                cu.setCourseName(cu.getCourse().getName());
            }
        }
        else
            curso.setText(cu.getCourseName());

        5+0%2Fdocs%2Fapi+Element">Element anoLectivo = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("anoLectivo",namespace));
        anoLectivo.setText(DatesUtils.getImportYearPrograms(cu.getImportYear()));

        5+0%2Fdocs%2Fapi+Element">Element unidadeCurricular = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("unidadeCurricular",namespace));
        unidadeCurricular.setText(cu.getName());

        if(cu.getResponsableTeacher() != null)
        {
            5+0%2Fdocs%2Fapi+Element">Element responsavel = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("responsavel",namespace));

            if(cu.getResponsableTeacher().getName()==null)
            {
                errors.add("Erro a carregar docente responsavel da unidade " + cu.getCode());
                responsavel.setText("erro");
            }
            else
                responsavel.setText(StringsUtils.getNormalizedName(cu.getResponsableTeacher().getName()));

            5+0%2Fdocs%2Fapi+Element">Element responsavelEmail = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("responsavelEmail",namespace));
            if(cu.getResponsableTeacher().getEmail()==null)
            {
                logger.warn("Teacher don't has email: " + cu.getResponsableTeacher().getSigesCode() + " - " + cu.getResponsableTeacher().getName());
                try {
                    1.5.0/docs/api/java/lang/Thread.html">Thread.sleep(3000);
                } catch (1.5.0/docs/api/java/lang/InterruptedException.html">InterruptedException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }
                responsavelEmail.setText("");
            }
            else
                responsavelEmail.setText(cu.getResponsableTeacher().getEmail());
        }



        5+0%2Fdocs%2Fapi+Element">Element apresentacaoObjectivos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("objetivosDaAprendizagem",namespace));
        apresentacaoObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos());


        int docenteNumber = 1;
        for(Teacher t : cu.getTeachers())
        {
            5+0%2Fdocs%2Fapi+Element">Element codigoSIGESDocente1 = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("codigoSIGESDocente" + docenteNumber,namespace));
            codigoSIGESDocente1.setText(t.getSigesCode()+"");
            5+0%2Fdocs%2Fapi+Element">Element outroDocente1 = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("outroDocente" + docenteNumber,namespace));
            if(t.getName()==null)
            {
                errors.add("Erro a carregar docente da unidade " + cu.getCode());
                outroDocente1.setText("erro");
            }
            else
                outroDocente1.setText(StringsUtils.getNormalizedName(t.getName()));
            5+0%2Fdocs%2Fapi+Element">Element docenteEmail1 = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("docenteEmail" + docenteNumber,namespace));

            if(t.getEmail()==null)
            {
                logger.warn("Teacher don't has email: " + t.getSigesCode() + " - " + t.getName());
                try {
                    1.5.0/docs/api/java/lang/Thread.html">Thread.sleep(3000);
                } catch (1.5.0/docs/api/java/lang/InterruptedException.html">InterruptedException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }
                docenteEmail1.setText("");
            }
            else
                docenteEmail1.setText(t.getEmail());

            docenteNumber++;
        }


        5+0%2Fdocs%2Fapi+Element">Element conteudosProgramaticos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("conteudosProgramaticos",namespace));
        conteudosProgramaticos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getConteudos());

        5+0%2Fdocs%2Fapi+Element">Element demonstracaoCoerenciaConteudosObjectivos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("demonstracaoCoerenciaConteudosObjectivos",namespace));
        demonstracaoCoerenciaConteudosObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getDemonstracaoCoerenciaConteudos());

        5+0%2Fdocs%2Fapi+Element">Element metodologiasEnsino = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("metodologiasEnsino",namespace));
        metodologiasEnsino.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getMetodologiasEnsino());

        5+0%2Fdocs%2Fapi+Element">Element alunosOrdinariosPorFrequencia = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("alunosOrdinariosPorFrequencia",namespace));
        alunosOrdinariosPorFrequencia.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoOrdinariosFrequencia());

        5+0%2Fdocs%2Fapi+Element">Element alunosOrdinariosPorExame = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("alunosOrdinariosPorExame",namespace));
        alunosOrdinariosPorExame.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoOrdinariosExame());

        5+0%2Fdocs%2Fapi+Element">Element alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia",namespace));
        alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoEspeciaisFrequencia());

        5+0%2Fdocs%2Fapi+Element">Element alunosMobilidadeAlunosComEstatutoEspecialPorExame = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("alunosMobilidadeAlunosComEstatutoEspecialPorExame",namespace));
        alunosMobilidadeAlunosComEstatutoEspecialPorExame.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoEspeciaissExame());


        5+0%2Fdocs%2Fapi+Element">Element demonstracaoDaCoerenciaMetodologiasObjectivos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("demonstracaoDaCoerenciaMetodologiasObjectivos",namespace));
        demonstracaoDaCoerenciaMetodologiasObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getDemonstracaoObjectivosMetodologia());


        5+0%2Fdocs%2Fapi+Element">Element bibliografiaPrincipal = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("bibliografiaPrincipal",namespace));
        bibliografiaPrincipal.setText(cu.getCourseUnitProgram().getBibliografia());

        5+0%2Fdocs%2Fapi+Element">Element bibliografiaComplementar = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("bibliografiaComplementar",namespace));
        bibliografiaComplementar.setText(cu.getCourseUnitProgram().getBibliografiaComplementar());

        5+0%2Fdocs%2Fapi+Element">Element adaptacaoMetodologiasObjectivos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("adaptacaoMetodologiasObjectivos",namespace));
        adaptacaoMetodologiasObjectivos.setText(cu.getCourseUnitProgram().getAdaptacaoObjectivosMetodologia());

        5+0%2Fdocs%2Fapi+Element">Element verificacaoCargaECTS = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("verificacaoCargaECTS",namespace));
        verificacaoCargaECTS.setText(cu.getCourseUnitProgram().getDemonstracaoCargaEcts());

        5+0%2Fdocs%2Fapi+Element">Element avaliacaoFuncaoObjectivos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("avaliacaoFuncaoObjectivos",namespace));
        avaliacaoFuncaoObjectivos.setText(cu.getCourseUnitProgram().getGarantiaAvaliacaoFuncaObjectivos());

        5+0%2Fdocs%2Fapi+Element">Element metodologiasFacilitamParticipacaoCientificas = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("metodologiasFacilitamParticipacaoCientificas",namespace));
        metodologiasFacilitamParticipacaoCientificas.setText(cu.getCourseUnitProgram().getMetodologiasActividadeCientifica());

        5+0%2Fdocs%2Fapi+Element">Element ects = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("ects",namespace));
        ects.setText(cu.getCourseUnitProgram().getEcts());


        5+0%2Fdocs%2Fapi+Element">Element preRequisitos = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("preRequisitos",namespace));
        preRequisitos.setText(cu.getCourseUnitProgram().getPrerequisitos());

        5+0%2Fdocs%2Fapi+Element">Element obrigatoria = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("obrigatoria",namespace));
        obrigatoria.setText(cu.getCourseUnitProgram().getObrigatoria());

        5+0%2Fdocs%2Fapi+Element">Element lingua1 = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("lingua1",namespace));
        lingua1.setText(cu.getCourseUnitProgram().getLingua1());

        5+0%2Fdocs%2Fapi+Element">Element lingua2 = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("lingua2",namespace));
        lingua2.setText(cu.getCourseUnitProgram().getLingua1());

        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaT = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaT",namespace));
        cargaHorariaT.setText(cu.getCourseUnitProgram().getCargaHorariaT());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaTP = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaTP",namespace));
        cargaHorariaTP.setText(cu.getCourseUnitProgram().getCargaHorariaTP());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaPL = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaPL",namespace));
        cargaHorariaPL.setText(cu.getCourseUnitProgram().getCargaHorariaPL());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaS = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaS",namespace));
        cargaHorariaS.setText(cu.getCourseUnitProgram().getCargaHorariaS());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaTC = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaTC",namespace));
        cargaHorariaTC.setText(cu.getCourseUnitProgram().getCargaHorariaTC());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaO = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaO",namespace));
        cargaHorariaO.setText(cu.getCourseUnitProgram().getCargaHorariaO());
        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaOT = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaOT",namespace));
        cargaHorariaOT.setText(cu.getCourseUnitProgram().getCargaHorariaOT());

        5+0%2Fdocs%2Fapi+Element">Element cargaHorariaTotal = curriculum.addElement(new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName("cargaHorariaTotal",namespace));
        cargaHorariaTotal.setText(cu.getCourseUnitProgram().getCargaHorariaTotal());











//        Dom4jUtil.writeSout(responseDoc);
        1.5.0/docs/api/java/lang/System.html">System.out.println("");

        1.5.0/docs/api/java/lang/String.html">String path = Globals.TMP_DIR + 1.5.0/docs/api/java/io/File.html">File.separator + cu.getCode() + "-" + cu.getName() + ".pdf";
        1.5.0/docs/api/java/io/FileOutputStream.html">FileOutputStream teste = new 1.5.0/docs/api/java/io/FileOutputStream.html">FileOutputStream(path);
        Map<String,Object> params = new HashMap<String,Object>();
        params.put("site", Globals.SITE_URL);
        if(cu.isValidProgram())
            params.put("validadoCC", "true");
        else
            params.put("validadoCC", "false");
        if(u != null && u.getUser() != null)
            params.put("revisor", u.getUser().getName());


        PdfUtils.createPdfFromXml(new 1.5.0/docs/api/javax/xml/transform/dom/DOMSource.html">DOMSource(Dom4jUtil.toW3c(responseDoc)), "pt/estgp/estgweb/services/courseunits/courseunitprogram.fo.xsl", teste,params);
        teste.flush();
        teste.close();


        RepositoryService repositoryService = new RepositoryService();
        User owner;
        if(cu.getTeachers() != null && cu.getTeachers().size() > 0)
            owner = cu.getTeachers().iterator().next();
        else
            owner = DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1));
        if(owner.getUsername() == null)
        {
            errors.add("Docente: " + owner.getName() + " ( " + owner.getId()  + " ) don't have username check that situation");
//            owner.setUsername("UKNOWN");
        }
        if(cu.getProgramStreamId() == null)
        {
            1.5.0/docs/api/java/lang/String.html">String identifier = repositoryService.storeRepositoryFile(new 1.5.0/docs/api/java/io/FileInputStream.html">FileInputStream(path), "application/pdf", "pdf",((int) new 1.5.0/docs/api/java/io/File.html">File(path).length()), cu.getCode() + ".pdf", "courseunit.program.description" + cu.getName(), ResourceAccessControlEnum.publicDomain,owner);
            cu.setProgramStreamId(identifier);
        }
        else
        {
            repositoryService.updateRepositoryFile(cu.getProgramStreamId(), new 1.5.0/docs/api/java/io/FileInputStream.html">FileInputStream(path),  "application/pdf", "pdf", ((int)new 1.5.0/docs/api/java/io/File.html">File(path).length()),cu.getCode() + ".pdf", "courseunit.program.description " + cu.getName(), ResourceAccessControlEnum.publicDomain);
        }
        cu.setObjectives(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos());
        //Obrigar a ser falso

    }
}