Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.domain;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.services.courses.CoursesService;
import pt.estgp.estgweb.services.courses.xsd.Curso;
import pt.estgp.estgweb.services.courses.xsd.UnidadeImpl;
import pt.estgp.estgweb.services.courses.xsd.UnidadeType;
import pt.estgp.estgweb.utils.ConfigProperties;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Jorge Machado
 * @date 2/Mar/2008
 * @time 10:27:25
 * @see pt.estgp.estgweb.domain
 */

public class CourseImpl extends Course
{

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

    public 1.5.0/docs/api/java/io/Serializable.html">Serializable getSerializable()
    {
        return getId();
    }

    public boolean isFromCourseCommission(UserSession userSession)
    {
        return isFromCourseCommission(userSession.getUser());
    }

    public boolean isFromCourseCommission(User user)
    {
        return user != null &&
                (
                        user.hasRole(getValidationRole())
                        ||
                                (getDirector() != null && user.getId() == getDirector().getId())
                        ||
                                (getCoordinator() != null && user.getId() == getCoordinator().getId()));
    }

    public 1.5.0/docs/api/java/lang/String.html">String getDegreeForJsonApi()
    {
        return ConfigProperties.getProperty("course." + getDegree());
    }

    public void setDegreeForJsonApi()
    {
        //is needed for Genson generation
    }

    public 1.5.0/docs/api/java/lang/String.html">String getDegreeForJsonApiEn()
    {
        return ConfigProperties.getProperty("course." + getDegree() + ".en");
    }

    public void setDegreeForJsonApiEn()
    {
        //is needed for Genson generation
    }

    public 1.5.0/docs/api/java/lang/String.html">String getDegreeForJsonApiEs()
    {
        return ConfigProperties.getProperty("course." + getDegree()+ ".es");
    }

    public void setDegreeForJsonApiEs()
    {
        //is needed for Genson generation
    }

    public 1.5.0/docs/api/java/lang/String.html">String getDegreeForJsonApiFr()
    {
        return ConfigProperties.getProperty("course." + getDegree()+ ".fr");
    }

    public void setDegreeForJsonApiFr()
    {
        //is needed for Genson generation
    }





    public 1.5.0/docs/api/java/lang/String.html">String getStatusForJsonApi()
    {
        if(isShowStudiesPlan())
        {
            return "active";
        }
        else
            return "inactive";
    }

    public void setStatusForJsonApi()
    {
       //is needed for Genson generation
    }

    public 1.5.0/docs/api/java/lang/String.html">String getSchoolForJsonApi()
    {
        return ConfigProperties.getProperty("institution.code.prefix." + getInstitutionalCode());
    }

    public void setSchoolForJsonApi()
    {
        //is needed for Genson generation
    }

    //Auxiliary method fot manual load
    List<Teacher> courseComission;

    public void setCourseComission(List<Teacher> courseComission) {
        this.courseComission = courseComission;
    }

    public List<Teacher> getCourseComission() {
        return courseComission;
    }


    /**
     * Services
     */


    /*
      Os identificadores sao formados por codigo-siges + $ + semestreId (S1,S2,A,T1,T2,T3,T4)
      Isto foi feito assim porque no caso de uma unidade existir nos dois semestres S1 e S2
      nao existem duvidas da qual se trata

      Ou seja imagine-se um plano em que uma unidade 123 esta' em S2 (corresponde a S2 no siges ano 1) e
      tambem em S3 (corresponde a S1 no siges ano 2)
      No caso dos questionarios cada questionario esta associado ou a S1 ou S2 ou a A, no momento da invocacao
      deste servico, dependendo do semestre requisitado assim vai
      ser a unidade devolvida, ou seja se o invocador pedir 123 S1 o ano fornecido sera 2 caso seja 123 S2 o ano
      devolvido sera 1

      */

    private Map<String,Integer> sigesAnoPlano = null;
    private Map<String,String> sigesPeriodoPlano = null;
    private Map<String,Integer> sigesSemestrePlanoConvertido = null;
    //private Map<String,Integer> sigesSemestrePlanoAbsoluto = null;


    /**
     * Require Opened Transaction
     */


    public CourseStudiesPlan getStudiesPlanLastVersion()
    {
        if(getStudiesPlans() != null && getStudiesPlans().size() > 0)
        {
            return getStudiesPlans().iterator().next();
        }
        return null;
    }


    /**
     * Este serviço inicializa mapas de correspondencia entre unidades dado o seu codigo siges
     * e o periodo siges onde estão inseridas e as suas posicoes no plano de estudo
     *
     * Exemplo dado 12344 e S1
     * Podemos ter que a unidade está em periodo plano S3, anoPlano 2 semestre convertido 3 e semestre absoluto 1
     *
     * Exemplo para 12345 e T7
     * Podemos ter que a unidade está em periodo plano T7, anoPlano 2 semestre convertido 4 e semestre absoluto 2
     */

    public void initUnitsAnosFromStudiesPlan()
    {

        sigesAnoPlano = new HashMap<String, Integer>();
        sigesPeriodoPlano = new HashMap<String, String>();
        sigesSemestrePlanoConvertido = new HashMap<String, Integer>();
        //sigesSemestrePlanoAbsoluto = new HashMap<String, Integer>();

        CoursesService coursesService = new CoursesService();

        CourseStudiesPlanImpl lastVersion = (CourseStudiesPlanImpl) getStudiesPlanLastVersion();
        if(lastVersion != null)
        {

            Curso curso = coursesService.loadCursoPlanoFromXml(lastVersion.getXml());
            if(curso == null)
            {
                logger.error("Cant init course units anos from studies plan because JaxB parse from Xml return null (see more in CoursesService().loadCursoPlanoFromXml())");
                return;
            }
            for(Curso.Semestre semestre: curso.getSemestre())
            {

                1.5.0/docs/api/java/lang/String.html">String periodoSiges = UnidadeImpl.getPeriodoSiges(semestre.getId());
                if(periodoSiges == null)
                {
                    logger.info("Semestre provavelmente opcional ignorado " + semestre.getId());
                }
                else
                {
                    1.5.0/docs/api/java/lang/Integer.html">Integer anoPlano = UnidadeImpl.getAnoFromPlano(semestre.getId());
                    1.5.0/docs/api/java/lang/Integer.html">Integer semestrePlanoConvertido = UnidadeImpl.getSemestreConvertido(semestre.getId());
                    //Integer semestrePlanoAbsoluto = UnidadeImpl.getSemestreAbsoluto(semestre.getId());

                    for(Curso.Semestre.Perfil perfil: semestre.getPerfil())
                    {
                        for(UnidadeType unidade: perfil.getUnidade())
                        {
                            sigesAnoPlano.put(unidade.getSiges() + "$" + periodoSiges,anoPlano);
                            sigesPeriodoPlano.put(unidade.getSiges() + "$" + periodoSiges,semestre.getId());
                            sigesSemestrePlanoConvertido.put(unidade.getSiges() + "$" + periodoSiges,semestrePlanoConvertido);
                            //sigesSemestrePlanoAbsoluto.put(unidade.getSiges() + "$" + periodoSiges,semestrePlanoAbsoluto);
                        }
                    }
                    for(UnidadeType unidade: semestre.getUnidade())
                    {
                        sigesAnoPlano.put(unidade.getSiges() + "$" + periodoSiges,anoPlano);
                        sigesPeriodoPlano.put(unidade.getSiges() + "$" + periodoSiges,semestre.getId());
                        sigesSemestrePlanoConvertido.put(unidade.getSiges() + "$" + periodoSiges,semestrePlanoConvertido);
                        //sigesSemestrePlanoAbsoluto.put(unidade.getSiges() + "$" + periodoSiges,semestrePlanoAbsoluto);
                    }
                }

            }

        }

    }

    /**
     * require open transaction
     * @param periodoSiges
     * @param sigesCode
     * @return 1, 2, 3, 4
     */

    public 1.5.0/docs/api/java/lang/Integer.html">Integer getUnidadeAnoPlano(1.5.0/docs/api/java/lang/String.html">String periodoSiges,1.5.0/docs/api/java/lang/String.html">String sigesCode)
    {
        if(sigesAnoPlano == null)
            initUnitsAnosFromStudiesPlan();
        return sigesAnoPlano.get(sigesCode + "$" + periodoSiges);
    }


    /**
     * require open transaction
     * @param periodoSiges
     * @param sigesCode
     * @return S1, .., S8, T1 .. T8, A1 .. A4
     */

    public 1.5.0/docs/api/java/lang/String.html">String getUnidadePeriodoPlano(1.5.0/docs/api/java/lang/String.html">String periodoSiges,1.5.0/docs/api/java/lang/String.html">String sigesCode)
    {
        if(sigesPeriodoPlano == null)
            initUnitsAnosFromStudiesPlan();
        return sigesPeriodoPlano.get(sigesCode + "$" + periodoSiges);
    }


    /**
     * require open transaction
     * @param periodoSiges
     * @param sigesCode
     * @return  S1 = 1, S2 = 2,S3 = 3,S4 = 4 ...T1 e T2 = 1, T2 e T3 = 2, T4 e T5 = 3 ...
     *
     */

    public 1.5.0/docs/api/java/lang/Integer.html">Integer getUnidadeSemestrePlanoConvertido(1.5.0/docs/api/java/lang/String.html">String periodoSiges,1.5.0/docs/api/java/lang/String.html">String sigesCode)
    {
        if(sigesSemestrePlanoConvertido == null)
            initUnitsAnosFromStudiesPlan();
        return sigesSemestrePlanoConvertido.get(sigesCode + "$" + periodoSiges);
    }


    /**
     * require open transaction
     * @param periodoSiges
     * @param sigesCode
     * @return S1 = 1, S2 = 2, S3 = 1, S4 = 2 ... T1 e T2 = 1,  T2 e T3 = 2, T4 e T5 = 1, T6 e T7 = 2
     */

    /*public Integer getUnidadeSemestrePlanoAbsoluto(String periodoSiges,String sigesCode)
    {
        if(sigesSemestrePlanoAbsoluto == null)
            initUnitsAnosFromStudiesPlan();
        return sigesSemestrePlanoAbsoluto.get(sigesCode + "$" + periodoSiges);
    }*/




}