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());
}
/**
* !!!!!!!!!!!!!
* @trace !!!!!!requirment METODO REPLICADO NA CourseView quando alterar aqui altera em CourseView
* !!!!!!!!!!!!!
*
* @param user
* @return
*/
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." + getDepartment
().
getCourseSchool().
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);
}*/
}