Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 728 → Rev 751

/impl/importRoutines.xml
29,4 → 29,12
<target name="setOfficeExtMainArea">
<java fork="true" classname="pt.estgp.estgweb.services.profile.SetUserAreaOfficeExtFromCSV" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
<target name="importPrograms">
<java fork="true" classname="pt.estgp.estgweb.domain.CourseUnitProgramImpl" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
<arg value="APM.20.dez.12.xml"/>
<arg value="true"/>
</java>
</target>
</project>
/impl/conf/language/MessageResourcesComunicationFolder.properties
New file
0,0 → 1,12
################################################################################
#
# ANNOUNCEMENTS MESSAGE RESOURCES
#
################################################################################
module.ComunicationFolder=Pastas de Comunicação
 
comunicationfolder.name=Nome
 
comunicationfolder.code=Code
 
 
/impl/conf/language/MessageResourcesCourse.properties
20,8 → 20,8
course.importYear=Ano de Importação
course.institutionalCode=Código de Instituição
course.description=Descrição
course.coordinator=Presidente do Departamento
course.director=Director(a) de Curso
course.coordinator=Coordenador de Curso
course.director=Director de Departamento
course.studies.plan=Plano de Estudos (XML válido no planoEstudos.xsd)
course.studies.plan.users=Plano de Estudos
course.studies.plan.not.available=Não disponivel
77,7 → 77,7
course.pagina.nao.disponivel=De momento a página à qual acedeu não se encontra disponivel, pedimos desculpa por qualquer incómodo que isto lhe possa causar, a administração foi informada deste facto e irá resolver o problema o mais depressa possivel.
courseunit.programfile.valid=programa <u>Aprovado</u> pela pela comissão de curso
 
course.courseunit.program.validate.todo={0} Unidades por aprovar (programa)
course.courseunit.program.validate.todo={0} Unidades com ficha curricular por aprovar.
 
course.menu.home=Inicio
course.menu.studiesplan=Plano de Estudos
/impl/conf/language/MessageResources.properties
126,8 → 126,7
user.role.oldStudent=Antigos Alunos
user.role.studentAssociation=Associação de Estudantes
user.role.computerCenter=Centro Informático
user.role.courseCoordinator=Coordenador
user.role.courseDirector=Director de Curso
user.role.courseDirector=Presidente de Departamento
user.role.identifiersManager=Utilizador de Gestão de Identificadores
user.role.identifiersCollectionCreator=Administrador de Colecções de Identificadores
user.role.studentsID=Alunos de Informação e Documentação
420,17 → 419,14
 
departamento=Departamento
departamentos.all=Todos os departamentos
departamento=Departamento
 
departamentos=Departamentos
user.role.validate.ei=Comissão de Curso de Engenharia Informática
 
area.td=Departamento de Tecnologia e Design
area.cesh=Departamento de Ciencias Empresariais Sociais e Humanas
 
top.menu.area.td=Tecnologia e Design
top.menu.area.cesh=Ciencias Empresariais Sociais e Humanas
 
 
 
user.role.courseValidateProgramCET_TD=Comissão de Curso de CETS de TD
user.role.courseValidateProgramEI=Comissão de Curso de EI
user.role.courseValidateProgramEC=Comissão de Curso de EC
443,7 → 439,9
user.role.courseValidateProgramMI=Comissão de Curso de MI
user.role.courseValidateProgramEGPMEestranho=Comissão de Curso de EPGME
 
user.role.courseValidatePrograms=Validação de Programas
 
 
user.role.courseValidateProgramCET_CESH=Comissão de Curso de CETS de CESH
user.role.courseValidateProgramAPM=Comissão de Curso de APM
user.role.courseValidateProgramAA=Comissão de Curso de AA
/impl/conf/language/MessageResourcesCourseUnits.properties
4,16 → 4,18
#
################################################################################
module.CourseUnits=Unidades Curriculares
course={0} &gt
course={0} &gt
courseunit={0}
 
course.nav.without.arrow={0}
 
course.nav.without.arrow={0}
courseunit.security.not.implemented=Não implementado por razões de segurança
courseunit.removed=Unidade Removida com sucesso
courseunit.menu.unit.old.units=Anos anteriores
courseunit.menu.unit.other.units=Outros Anos
courseunit.menu.unit=Unidade
courseunit.teachers=Corpo Docente
courseunit.objectives=Objectivos da Unidade
courseunit.programfile.invalid=O programa encontra-se submetido pela administração mas não está validado pela Comissão de Curso
courseunit.programfilepath=Programa Curricular
courseunit.programfilepath.not.available=O Programa Curricular não está disponivel
courseunit.objectives.not.available=Os objectivos não estão disponiveis
57,7 → 59,7
courseunit.teacher.situation.withNoTeachers=Sem Professor
courseunit.teacher.situation.all=Todos
courseunit.S1=1º Semestre
courseunit.S2=2ª Semestre
courseunit.S2=2ª Semestre
courseunit.ALL=Todos os Semestres
courseunit.assignement.delivered.date=Data de Entrega
courseunit.assignement.delivered.date.first.version=Data de Entrega da Primeira Versão
76,12 → 78,14
courseunit.assignement.deliver=Entregar Trabalho
courseunit.search=Procurar Unidade Curricular
courseunitwork.confirm.delete=Atenção: Todas as entregas de alunos serão também removidas. Pode Invalidar o trabalho para este não ficar visivel aos alunos e desta forma mantém a informação relativa a entregas. De certeza que pretende apagar o Trabalho selecionado?
courseunit.assignement.deliver.sucess=Trabalho {0} entregue com sucesso
courseunit.assignement.deliver.sucess=Trabalho {0} entregue com sucesso
errors.courseunit.assignement.deliver.file=O Ficheiro que escolheu não existe ou estão vazio
errors.courseunit.assignement.deliver.zip=Por favor escolha um ficheiro comprimido em formato ZIP
errors.courseunit.assignement.file.type=Por favor escolha um ficheiro comprimido em formato ZIP
courseunit.students=Estudantes
courseunit.students.count=Total de estudantes inscritos
courseunit.program=Ficha Curricular
courseunit.edit.program=Editar Programa
 
courseunit.assignement.deliver.time=Entregue
courseunit.assignement.deliver.time.ok=Entregue a Horas
112,7 → 116,7
courseunits.backups=Criar cópia de Segurança de todos das Unidades Curriculares em todos os cursos
courseunits.backups.actual.year=Criar cópia de Segurança (apenas do ano corrente) de todos das Unidades Curriculares em todos os cursos
courseunits.actual.year.backup=Backup do ano corrente
courseunits.all.backup=Backup de todos os anos (Este serviço pode demorar alguns minutos a executar)
courseunits.all.backup=Backup de todos os anos (Este serviço pode demorar alguns minutos a executar)
 
 
 
123,22 → 127,45
 
 
 
courseunit.responsable=Professor responsável
 
 
 
 
courseunits.contentsGrants=Permissões de Consulta dos Ficheiros de Conteúdos
courseunits.contentsGrants.PUBLIC=PUBLICAS
courseunits.contentsGrants.PRIVATE=PRIVADOS A ESTUDANTES E DOCENTES DA UNIDADE
courseunits.contentsGrants.INTERNAL=COMUNIDADE ACADÉMICA
 
 
courseunit.program.objectivos=Objetivos da aprendizagem (conhecimentos, aptidões e competências) a desenvolver pelos estudantes, operacionalização dos objetivos e medição do seu grau de cumprimento)
courseunit.program.conteudosProgramaticos=Conteúdos
courseunit.program.prerequisitos=Pré-requisitos
courseunit.program.demonstracaoCoerenciaConteudosObjectivos=Demonstração da coerência dos conteúdos programáticos com os objectivos da unidade curricular
courseunit.program.metodologiasEnsino=Metodologias de ensino e Aprendizagem
courseunit.program.demonstracaoDaCoerenciaMetodologiasObjectivos=Demonstração da coerência das metodologias de ensino com os objectivos da aprendizagem da unidade curricular
courseunit.program.lingua1=Língua de ensino
courseunit.program.lingua2=Língua de ensino 2
courseunit.program.avaliacao=Avaliação <br/>[indicar os componentes d sistema de avaliação, tipo, matéria e peso de cada componente na classificação final]
courseunit.program.alunosOrdinariosPorFrequencia=Avaliação por frequência
courseunit.program.alunosOrdinariosPorExame=Avaliação por Exame
courseunit.program.bibliografia=Bibliografia
courseunit.program.bibliografiaPrincipal=Bibliografia Principal
courseunit.program.bibliografiaComplementar=Bibliografia Complementar
courseunit.program.avaliacao.especial=Alunos em mobilidade e alunos com estatuto especial
courseunit.program.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia=Avaliação por frequência
courseunit.program.alunosMobilidadeAlunosComEstatutoEspecialPorExame=Avaliação por Exame
courseunit.program.ects.title=ECTS/tempo de trabalho (horas)
courseunit.program.ects=ECTS
courseunit.program.ects.cargaHorariaTotal=Total
courseunit.program.cargaHorariaT=T
courseunit.program.cargaHorariaTP=TP
courseunit.program.cargaHorariaPL=PL
courseunit.program.cargaHorariaS=S
courseunit.program.cargaHorariaTC=TC
courseunit.program.cargaHorariaO=O
courseunit.program.cargaHorariaOT=OT
 
 
 
 
 
 
 
 
 
/impl/conf/WEB-INF/struts/struts-courseunits.xml
8,6 → 8,7
 
<form-beans>
<form-bean type="pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm" name="CourseUnitsForm"/>
<form-bean type="pt.estgp.estgweb.web.form.courseunits.CourseUnitProgramForm" name="CourseUnitProgramForm"/>
</form-beans>
 
<global-exceptions>
23,7 → 24,7
 
<action path="/startTeste2" forward="page.separators.home"/>
 
 
<action path="/startLoadCourseUnitProgram" forward="/courseUnitProgramController.do?dispatch=editProgram"/>
<action path="/startLoadCourseUnitStudents" forward="/courseUnitController.do?dispatch=loadStudents"/>
<action path="/startCourseUnitBlog" forward="/courseUnitController.do?dispatch=startBlog"/>
<action path="/startLoadCourseUnitWorks" forward="/courseUnitController.do?dispatch=loadWorks"/>
43,8 → 44,20
<forward name="load.students" path="page.load.courseunit.students"/>
<forward name="load.teacher" path="page.load.courseunit.teacher"/>
<forward name="load.student" path="page.load.courseunit.student"/>
<forward name="edit.program" path="page.edit.courseunit.program"/>
</action>
 
<action path="/courseUnitProgramController"
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController"
name="CourseUnitProgramForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.welcome">
<forward name="load" path="page.load.courseunit"/>
<forward name="edit.program" path="page.edit.courseunit.program"/>
</action>
 
<!--<action path="/user/startLoadCourseUnitFromHome" forward="page.load.courseunit.from.home"/>-->
 
<action path="/user/startLoadCourseUnitRootFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadRoot&amp;from=Home"/>
/impl/conf/WEB-INF/struts/tiles-courseunits.xml
19,6 → 19,13
<put name="navigation" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunitworks.jsp"/>
</definition>
 
<definition name="page.edit.courseunit.program" extends="base.layout1">
<put name="title" value="Ficha da Unidade Curricular"/>
<put name="topnav" value="/public/courseunits/topnavCourseUnitProgram.jsp"/>
<put name="navigation" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunitProgram.jsp"/>
</definition>
<definition name="page.load.courseunit.blog" extends="base.layout1">
<put name="title" value="Blog da Unidade Curricular"/>
<put name="topnav" value="/public/courseunits/topnavCourseUnitBlog.jsp"/>
/impl/conf/app.properties
50,6 → 50,12
email.summary.subject.en=Sumário lançado em {0}
 
 
email.unidade.edicao.subject.pt=Ficha em edição {0}
email.unidade.edicao.subject.en=Unit in edition {0}
email.unidade.editada.subject.pt=Ficha editada {0}
email.unidade.editada.subject.en=Unit edited {0}
email.unidade.validade.subject.pt=Ficha Validada {0}
email.unidade.validada.subject.en=Unit validated {0}
##################################################
# Modules usage
#
179,11 → 185,11
user.role.77=courseValidateProgramEGPMEestranho
 
 
user.role.78=courseValidatePrograms
 
 
 
 
 
#########################################################################
#
# Modules
/impl/conf/template/email/unidadeValidada_pt.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Caro docente
 
O BACO informa-o de que a ficha curricular da unidade de {0}
foi aprovada pela comissão de curso
 
Com os melhores cumprimentos
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/unidadeEditada_en.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Caro membro da comissão de curso de {0}
 
O BACO informa-o de que a ficha curricular da unidade de {1}
foi editada
 
Com os melhores cumprimentos
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/unidadeValidada_en.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Dear teacher
 
The courseunit program of {0}
was approved by course comission
 
Best Regards
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/unidadeEdicao_pt.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Caro docente
 
O BACO informa-o de que a ficha curricular da unidade de {0}
se encontra disponivel para edição
 
Com os melhores cumprimentos
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/unidadeEditada_pt.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Caro membro da comissão de curso de {0}
 
O BACO informa-o de que a ficha curricular da unidade de {1}
foi editada
 
Com os melhores cumprimentos
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/unidadeEdicao_en.txt
New file
0,0 → 1,11
#Email unidade ficha em edicao
Dear teacher
 
The courseunit program of {0}
is available for edition
 
Best Regards
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/berserk/sd.xml
89,7 → 89,18
</filterChains>
</service>
 
<service>
<name>LoadTeachers</name>
<implementationClass>pt.estgp.estgweb.services.users.LoadUsersService</implementationClass>
<description>Load user of some class</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadTeachers</defaultMethod>
<filterChains>
<chain name="Logger"/>
</filterChains>
</service>
 
 
<!--URL Statistics-->
<service>
<name>UpdateUrlStatistics</name>
751,6 → 762,19
<chain name="OwnersEdit"/>
</filterChains>
</service>
 
<service>
<name>DeleteCourseUnit</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.UpdateCourseUnitService</implementationClass>
<description>Update course unit objectives and program file</description>
<isTransactional>true</isTransactional>
<defaultMethod>delete</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Supers"/>
</filterChains>
</service>
<service>
<name>LoadCourseUnit</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass>
761,7 → 785,31
<chain name="Session"/>
</filterChains>
</service>
 
<service>
<name>LoadCourseUnitViewAndCourse</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass>
<description>Load course unit</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadCourseUnitViewAndCourse</defaultMethod>
 
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>SaveCourseUnitProgram</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.SaveCourseUnitProgram</implementationClass>
<description>Save course unit program</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
 
<service>
<name>LoadCourseUnitsBySigesCodes</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitsBySigesCodesService</implementationClass>
<description>Load course old units</description>
/impl/conf/berserk/berserk.properties
1,6 → 1,7
#WARNING: Be carefull with spaces (' '). Please be sure that all classes names ends with a new line !
 
 
 
#This is the berserk configuration file
#If you don't provide a configuration file in your application classpath, default options will be used
#To make editable rows more visible I added a <---- int the previous row.
/impl/conf/berserk/fcd.xml
36,7 → 36,7
</filterChain>
<filterChain>
<name>DirectorsCoordinators</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("courseDirector") || RoleUsers("courseCoordinator"))</expression>
<expression>AuthenticatedUsers</expression>
<description>Validate if a user is coordinator or director</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
/impl/src/java/jomm/dao/utils/HibernateUtils.java
1,17 → 1,16
package jomm.dao.utils;
 
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.apache.log4j.Logger;
 
import java.sql.SQLException;
 
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.dao.impl.CourseDao;
 
import java.sql.SQLException;
 
public class HibernateUtils implements Runnable{
 
// private static Session session;
/impl/src/java/pt/estgp/estgweb/utils/StringsUtils.java
38,4 → 38,34
return l;
}
 
//TODO ARRANJAR ISTO
public static String getNormalizedName(String nome)
{
try{
if(nome != null)
{
String[] partes = nome.split(" ");
StringBuilder sb = new StringBuilder();
for(String n : partes)
{
n = n.toLowerCase();
n = (""+n.charAt(0)).toUpperCase() + n.substring(1);
sb.append(n).append(" ");
}
return sb.toString().trim();
}
return nome;
}catch(Exception e)
{
return nome;
}
 
 
}
 
public static void main(String [] args)
{
System.out.println(getNormalizedName("JORGE MIGUEL MACHADO"));
 
}
}
/impl/src/java/pt/estgp/estgweb/Globals.java
291,6 → 291,25
public static final String EMAIL_NEW_GRADES_TEMPLATE_PT = "newGrades_pt.txt";
public static final String EMAIL_NEW_GRADES_TEMPLATE_EN = "newGrades_en.txt";
 
public static final String EMAIL_UNDADE_EDICAO_TEMPLATE_PT = "unidadeEdicao_pt.txt";
public static final String EMAIL_UNDADE_EDICAO_TEMPLATE_EN = "unidadeEdicao_en.txt";
 
public static final String EMAIL_UNDADE_EDITADA_TEMPLATE_PT = "unidadeEditada_pt.txt";
public static final String EMAIL_UNDADE_EDITADA_TEMPLATE_EN = "unidadeEditada_en.txt";
 
public static final String EMAIL_UNDADE_VALIDADA_TEMPLATE_PT = "unidadeValidada_pt.txt";
public static final String EMAIL_UNDADE_VALIDADA_TEMPLATE_EN = "unidadeValidada_en.txt";
 
 
public static final String EMAIL_UNDADE_EDICAO_SUBJECT_PT = "email.unidade.edicao.subject.pt";
public static final String EMAIL_UNDADE_EDICAO_SUBJECT_EN = "email.unidade.edicao.subject.en";
 
public static final String EMAIL_UNDADE_EDITADA_SUBJECT_PT = "email.unidade.editada.subject.pt";
public static final String EMAIL_UNDADE_EDITADA_SUBJECT_EN = "email.unidade.editada.subject.en";
 
public static final String EMAIL_UNDADE_VALIDADA_SUBJECT_PT = "email.unidade.validade.subject.pt";
public static final String EMAIL_UNDADE_VALIDADA_SUBJECT_EN = "email.unidade.validada.subject.en";
 
public static final String EMAIL_SUMMARY_TEMPLATE_PT = "summary_pt.txt";
public static final String EMAIL_SUMMARY_TEMPLATE_EN = "summary_en.txt";
 
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedUnitsService.java
1,14 → 1,23
package pt.estgp.estgweb.services.courseunits;
 
import org.apache.fop.apps.FOPException;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.utils.AreasBelongUtils;
import pt.estgp.estgweb.utils.CourseViewComparator;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.AreasBelongUtils;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.xml.transform.TransformerException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
20,6 → 29,8
*/
public class DirectedCoordinatedUnitsService implements IService
{
private static final Logger logger = Logger.getLogger(DirectedCoordinatedUnitsService.class);
 
public DirectedCoordinatedCourses loadForUserSession(String importYear, UserSession userSession)
{
return loadForUser(userSession.getUser().getId(),importYear, userSession);
99,17 → 110,17
}
/**
* If is a student can see only his course
// ALTERACAO PARA TODOS VEREM TODOS OS PROGRAMAS
// ALTERACAO PARA TODOS VEREM TODOS OS PROGRAMAS
 
if (userSession.getUser() != null && userSession.getUser() instanceof Student)
{
StudentImpl sigesUser = (StudentImpl) userSession.getUser();
if (sigesUser.getSubscribedUnits() != null && sigesUser.getSubscribedUnits().size() > 0)
{
Course course = sigesUser.getSubscribedUnits().iterator().next().getCourse();
courseId = course.getId();
}
}
if (userSession.getUser() != null && userSession.getUser() instanceof Student)
{
StudentImpl sigesUser = (StudentImpl) userSession.getUser();
if (sigesUser.getSubscribedUnits() != null && sigesUser.getSubscribedUnits().size() > 0)
{
Course course = sigesUser.getSubscribedUnits().iterator().next().getCourse();
courseId = course.getId();
}
}
*/
 
List<Course> courses;
211,8 → 222,7
}
}
 
public DirectedCoordinatedCourses update(DirectedCoordinatedCourses directedCoordinatedCourses, UserSession userSession)
{
public DirectedCoordinatedCourses update(DirectedCoordinatedCourses directedCoordinatedCourses, UserSession userSession) throws NotAuthorizedException, TransformerException, IOException, FOPException {
int counter = 0;
for(CourseView courseView: directedCoordinatedCourses.getMerge())
{
222,12 → 232,13
// if(userSession.getUser().getId() == c.getCoordinator().getId())
if(courseView.getId() == 2)
System.out.println(courseView.getValidationRole());
if(userSession.getUser().hasRole(c.getValidationRole())) //NOVO para validação por programas
 
if(userSession.getUser().isAdmin() || userSession.getUser().hasRole("courseValidatePrograms") || userSession.getUser().hasRole(c.getValidationRole())) //NOVO para validação por programas
{
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS2());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS2());
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS1(),userSession);
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS2(),userSession);
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS1(),userSession);
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS2(),userSession);
}
}
}
235,27 → 246,102
return directedCoordinatedCourses;
}
 
private int updateList(List<CourseUnitView> views)
{
private int updateList(List<CourseUnitView> views, UserSession usession) throws NotAuthorizedException, TransformerException, IOException, FOPException {
int counter = 0;
for(CourseUnitView courseUnitView: views)
{
 
 
 
 
if(courseUnitView != null && courseUnitView.getId()>0)
{
if(courseUnitView.getProgramStreamId() != null && courseUnitView.getProgramStreamId().length() > 0)
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().load(courseUnitView.getId());
if(courseUnit.isValidProgram() != courseUnitView.isValidProgram())
if(usession.getUser().isAdmin() || usession.getUser().hasRole("courseValidatePrograms") || usession.getUser().hasRole(courseUnit.getCourse().getValidationRole()))
{
courseUnit.setValidProgram(courseUnitView.isValidProgram());
counter++;
if(courseUnit.isValidProgram() != courseUnitView.isValidProgram())
{
courseUnit.setValidProgram(courseUnitView.isValidProgram());
counter++;
new SaveCourseUnitProgram().createPdf(courseUnit,null);
 
 
if(courseUnitView.isValidProgram())
sendNotificationsValidadaInterestedPeople(courseUnit,usession);
else
sendNotificationsEditionInterestedPeople(courseUnit,usession);
 
}
}
else
{
throw new NotAuthorizedException("Não pode editar estado da unidade " + courseUnit.getCode());
}
}
}
}
return counter;
}
 
public static void sendNotificationsValidadaInterestedPeople(CourseUnit courseUnit,UserSession u)
{
try{
SendEmailService sendEmailService = new SendEmailService();
List<String> emails = getEmailJobNotifications(courseUnit);
EMAILJob emailJob = new EMAILJob(sendEmailService.getUnidadeValidadaEmail(emails,courseUnit,LangEnum.PORTUGUESE));
JobScheduleService.getInstance().scheduleNow(emailJob,"New Notification EMAIL unit state changed to courseComission and teachers " ,u);
}catch(Throwable t)
{
logger.error(t,t);
}
}
 
public static void sendNotificationsEditionInterestedPeople(CourseUnit courseUnit,UserSession u)
{
try{
SendEmailService sendEmailService = new SendEmailService();
List<String> emails = getEmailJobNotifications(courseUnit);
EMAILJob emailJob = new EMAILJob(sendEmailService.getUnidadeEdicaoEmail(emails,courseUnit,LangEnum.PORTUGUESE));
JobScheduleService.getInstance().scheduleNow(emailJob,"New Notification EMAIL unit state changed to courseComission and teachers " ,u);
}catch(Throwable t)
{
logger.error(t,t);
}
}
public static void sendNotificationsEditedInterestedPeople(CourseUnit courseUnit,UserSession u)
{
try{
SendEmailService sendEmailService = new SendEmailService();
List<String> emails = getEmailJobNotifications(courseUnit);
EMAILJob emailJob = new EMAILJob(sendEmailService.getUnidadeEditadaEmail(emails,courseUnit,LangEnum.PORTUGUESE));
JobScheduleService.getInstance().scheduleNow(emailJob,"New Notification EMAIL unit state changed to courseComission and teachers " ,u);
}catch(Throwable t)
{
logger.error(t,t);
}
}
 
public static List<String> getEmailJobNotifications(CourseUnit courseUnit) {
List<String> emails = DaoFactory.getCourseUnitDaoImpl().getTeachersEmails(courseUnit.getId());
if(emails == null)
emails = new ArrayList<String>();
if(courseUnit.getCourse().getCoordinator() != null && courseUnit.getCourse().getCoordinator().getEmail()!=null)
emails.add(courseUnit.getCourse().getCoordinator().getEmail());
if(courseUnit.getResponsableTeacher() != null && courseUnit.getResponsableTeacher().getEmail() != null && !emails.contains(courseUnit.getResponsableTeacher().getEmail()))
{
emails.add(courseUnit.getResponsableTeacher().getEmail());
}
List<User> courseComission = DaoFactory.getUserDaoImpl().loadRoleUsers(courseUnit.getCourse().getValidationRole());
for(User cc: courseComission)
{
if(cc.getEmail() != null)
emails.add(cc.getEmail());
}
return emails;
}
 
public static enum TeachersSituationEnum
{
withTeachers,
/impl/src/java/pt/estgp/estgweb/services/courseunits/SaveCourseUnitProgram.java
New file
0,0 → 1,322
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 Logger logger = Logger.getLogger(SaveCourseUnitProgram.class);
 
public CourseUnitProgramView run(CourseUnitProgramView cupv, Long coursUnitId, UserSession usession) throws ServiceException, TransformerException, 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 IOException, TransformerException, FOPException {
createPdf(cu,errors,null);
}
public void createPdf(CourseUnit cu, List<String> errors,UserSession u) throws IOException, TransformerException, FOPException {
 
((CourseUnitProgramImpl)cu.getCourseUnitProgram()).consistNullValues();
Document responseDoc = DocumentHelper.createDocument();
Namespace namespace = new Namespace("uc", "http://baco.estgp.pt/schemas/courseunits/program/");
responseDoc.setXMLEncoding("ISO-8859-1");
 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Element curriculum = responseDoc.addElement(new QName("UnidadeCurricular", namespace));
curriculum.addAttribute(new QName("data",namespace),sdf.format(new java.util.Date()));
 
Element curso = curriculum.addElement(new QName("curso",namespace));
if(cu.getCourseName() == null)
{
if(cu.getCourse() == null)
{
System.out.println("Unidade nao tem curso");
curso.setText("Desactualizado");
}
else
{
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());
 
Element anoLectivo = curriculum.addElement(new QName("anoLectivo",namespace));
anoLectivo.setText(DatesUtils.getImportYearPrograms(cu.getImportYear()));
 
Element unidadeCurricular = curriculum.addElement(new QName("unidadeCurricular",namespace));
unidadeCurricular.setText(cu.getName());
 
if(cu.getResponsableTeacher() != null)
{
Element responsavel = curriculum.addElement(new QName("responsavel",namespace));
responsavel.setText(cu.getResponsableTeacher().getName());
 
Element responsavelEmail = curriculum.addElement(new QName("responsavelEmail",namespace));
if(cu.getResponsableTeacher().getEmail()==null)
{
logger.warn("Teacher don't has email: " + cu.getResponsableTeacher().getSigesCode() + " - " + cu.getResponsableTeacher().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
responsavelEmail.setText("");
}
else
responsavelEmail.setText(cu.getResponsableTeacher().getEmail());
}
 
 
 
Element apresentacaoObjectivos = curriculum.addElement(new QName("objetivosDaAprendizagem",namespace));
apresentacaoObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos());
 
 
int docenteNumber = 1;
for(Teacher t : cu.getTeachers())
{
Element codigoSIGESDocente1 = curriculum.addElement(new QName("codigoSIGESDocente" + docenteNumber,namespace));
codigoSIGESDocente1.setText(t.getSigesCode()+"");
Element outroDocente1 = curriculum.addElement(new QName("outroDocente" + docenteNumber,namespace));
outroDocente1.setText(StringsUtils.getNormalizedName(t.getName()));
Element docenteEmail1 = curriculum.addElement(new QName("docenteEmail" + docenteNumber,namespace));
 
if(t.getEmail()==null)
{
logger.warn("Teacher don't has email: " + t.getSigesCode() + " - " + t.getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
docenteEmail1.setText("");
}
else
docenteEmail1.setText(t.getEmail());
 
docenteNumber++;
}
 
 
Element conteudosProgramaticos = curriculum.addElement(new QName("conteudosProgramaticos",namespace));
conteudosProgramaticos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getConteudos());
 
Element demonstracaoCoerenciaConteudosObjectivos = curriculum.addElement(new QName("demonstracaoCoerenciaConteudosObjectivos",namespace));
demonstracaoCoerenciaConteudosObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getDemonstracaoCoerenciaConteudos());
 
Element metodologiasEnsino = curriculum.addElement(new QName("metodologiasEnsino",namespace));
metodologiasEnsino.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getMetodologiasEnsino());
 
Element alunosOrdinariosPorFrequencia = curriculum.addElement(new QName("alunosOrdinariosPorFrequencia",namespace));
alunosOrdinariosPorFrequencia.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoOrdinariosFrequencia());
 
Element alunosOrdinariosPorExame = curriculum.addElement(new QName("alunosOrdinariosPorExame",namespace));
alunosOrdinariosPorExame.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoOrdinariosExame());
 
Element alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = curriculum.addElement(new QName("alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia",namespace));
alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoEspeciaisFrequencia());
 
Element alunosMobilidadeAlunosComEstatutoEspecialPorExame = curriculum.addElement(new QName("alunosMobilidadeAlunosComEstatutoEspecialPorExame",namespace));
alunosMobilidadeAlunosComEstatutoEspecialPorExame.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getAvaliacaoEspeciaissExame());
 
 
Element demonstracaoDaCoerenciaMetodologiasObjectivos = curriculum.addElement(new QName("demonstracaoDaCoerenciaMetodologiasObjectivos",namespace));
demonstracaoDaCoerenciaMetodologiasObjectivos.setText(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getDemonstracaoObjectivosMetodologia());
 
 
Element bibliografiaPrincipal = curriculum.addElement(new QName("bibliografiaPrincipal",namespace));
bibliografiaPrincipal.setText(cu.getCourseUnitProgram().getBibliografia());
 
Element bibliografiaComplementar = curriculum.addElement(new QName("bibliografiaComplementar",namespace));
bibliografiaComplementar.setText(cu.getCourseUnitProgram().getBibliografiaComplementar());
 
Element adaptacaoMetodologiasObjectivos = curriculum.addElement(new QName("adaptacaoMetodologiasObjectivos",namespace));
adaptacaoMetodologiasObjectivos.setText(cu.getCourseUnitProgram().getAdaptacaoObjectivosMetodologia());
 
Element verificacaoCargaECTS = curriculum.addElement(new QName("verificacaoCargaECTS",namespace));
verificacaoCargaECTS.setText(cu.getCourseUnitProgram().getDemonstracaoCargaEcts());
 
Element avaliacaoFuncaoObjectivos = curriculum.addElement(new QName("avaliacaoFuncaoObjectivos",namespace));
avaliacaoFuncaoObjectivos.setText(cu.getCourseUnitProgram().getGarantiaAvaliacaoFuncaObjectivos());
 
Element metodologiasFacilitamParticipacaoCientificas = curriculum.addElement(new QName("metodologiasFacilitamParticipacaoCientificas",namespace));
metodologiasFacilitamParticipacaoCientificas.setText(cu.getCourseUnitProgram().getMetodologiasActividadeCientifica());
 
Element ects = curriculum.addElement(new QName("ects",namespace));
ects.setText(cu.getCourseUnitProgram().getEcts());
 
 
Element preRequisitos = curriculum.addElement(new QName("preRequisitos",namespace));
preRequisitos.setText(cu.getCourseUnitProgram().getPrerequisitos());
 
Element obrigatoria = curriculum.addElement(new QName("obrigatoria",namespace));
obrigatoria.setText(cu.getCourseUnitProgram().getObrigatoria());
 
Element lingua1 = curriculum.addElement(new QName("lingua1",namespace));
lingua1.setText(cu.getCourseUnitProgram().getLingua1());
 
Element lingua2 = curriculum.addElement(new QName("lingua2",namespace));
lingua2.setText(cu.getCourseUnitProgram().getLingua1());
 
Element cargaHorariaT = curriculum.addElement(new QName("cargaHorariaT",namespace));
cargaHorariaT.setText(cu.getCourseUnitProgram().getCargaHorariaT());
Element cargaHorariaTP = curriculum.addElement(new QName("cargaHorariaTP",namespace));
cargaHorariaTP.setText(cu.getCourseUnitProgram().getCargaHorariaTP());
Element cargaHorariaPL = curriculum.addElement(new QName("cargaHorariaPL",namespace));
cargaHorariaPL.setText(cu.getCourseUnitProgram().getCargaHorariaPL());
Element cargaHorariaS = curriculum.addElement(new QName("cargaHorariaS",namespace));
cargaHorariaS.setText(cu.getCourseUnitProgram().getCargaHorariaS());
Element cargaHorariaTC = curriculum.addElement(new QName("cargaHorariaTC",namespace));
cargaHorariaTC.setText(cu.getCourseUnitProgram().getCargaHorariaTC());
Element cargaHorariaO = curriculum.addElement(new QName("cargaHorariaO",namespace));
cargaHorariaO.setText(cu.getCourseUnitProgram().getCargaHorariaO());
Element cargaHorariaOT = curriculum.addElement(new QName("cargaHorariaOT",namespace));
cargaHorariaOT.setText(cu.getCourseUnitProgram().getCargaHorariaOT());
 
Element cargaHorariaTotal = curriculum.addElement(new QName("cargaHorariaTotal",namespace));
cargaHorariaTotal.setText(cu.getCourseUnitProgram().getCargaHorariaTotal());
 
 
 
 
 
 
 
 
 
 
 
// Dom4jUtil.writeSout(responseDoc);
System.out.println("");
 
String path = Globals.TMP_DIR + File.separator + cu.getCode() + "-" + cu.getName() + ".pdf";
FileOutputStream teste = new 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 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 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)
{
String identifier = repositoryService.storeRepositoryFile(new FileInputStream(path), "application/pdf", "pdf",((int) new File(path).length()), cu.getCode() + ".pdf", "courseunit.program.description" + cu.getName(), ResourceAccessControlEnum.publicDomain,owner);
cu.setProgramStreamId(identifier);
}
else
{
repositoryService.updateRepositoryFile(cu.getProgramStreamId(), new FileInputStream(path), "application/pdf", "pdf", ((int)new File(path).length()),cu.getCode() + ".pdf", "courseunit.program.description " + cu.getName(), ResourceAccessControlEnum.publicDomain);
}
cu.setObjectives(cu.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos());
//Obrigar a ser falso
 
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/courseunitprogram.fo.xsl
2,7 → 2,9
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uc="http://baco.estgp.pt/schemas/courseunits/program/">
 
<xsl:param name="site">http://localhost/bacoTESTE</xsl:param>
<xsl:param name="revisor">automático</xsl:param>
<xsl:param name="validadoCC">false</xsl:param>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
60,8 → 62,17
<fo:table-row>
<fo:table-cell >
<fo:block>
 
<fo:external-graphic height="auto" width="auto"
content-height="30">
<!--<xsl:attribute name="src">url('http://www.ipportalegre.pt/imagens/Logos/ESTG/Logotipo%20ESTG.jpg')</xsl:attribute>-->
<xsl:attribute name="src">url('<xsl:value-of select="$site"/>/imgs/logoestg.gif')</xsl:attribute>
</fo:external-graphic>
</fo:block>
<xsl:if test="$validadoCC = 'false'">
<fo:block font-size="20pt">
(Documento ainda não validado pela Comissão de Curso)
</fo:block>
</xsl:if>
</fo:table-cell>
 
</fo:table-row>
76,34 → 87,36
<fo:static-content flow-name="footer">
 
<fo:table width="100%" table-layout="fixed" border-top="1px solid black" font-size="6.5pt" >
<fo:table-column column-width="20%"/>
<fo:table-column column-width="80%" />
<fo:table-column column-width="20%"/>
<fo:table-column column-width="80%" />
 
 
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-top="3pt">
<fo:block>
<xsl:value-of select="//uc:UnidadeCurricular/@uc:data"/> / Página <fo:page-number/>
</fo:block>
<fo:block font-size="5pt">
ESTG.SA.23-Rev.0
</fo:block>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-top="3pt">
<fo:block >
Revisto a <xsl:value-of select="//uc:UnidadeCurricular/@uc:data"/> por <xsl:value-of select="$revisor"/> / Página <fo:page-number/>
</fo:block>
<fo:block font-size="5pt">
ESTG.SA.23-Rev.1
</fo:block>
 
</fo:table-cell>
<fo:table-cell padding-top="3pt" >
<fo:block font-size="6pt" text-align="right">
http://www.estgp.pt | gerado pela plataforma baco® 2012
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-cell>
<fo:table-cell padding-top="3pt" >
<fo:block font-size="6pt" text-align="right">
http://www.estgp.pt | gerado pela plataforma baco® 2012
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
 
 
</fo:static-content>
<fo:flow flow-name="body">
 
<fo:block>
 
<xsl:apply-templates select="//uc:UnidadeCurricular"/>
</fo:block>
</fo:flow>
154,49 → 167,416
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Ano Lectivo</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:anoLectivo"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Curso</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:curso"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Unidade Curricular</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:unidadeCurricular"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Responsável</xsl:with-param>
<xsl:with-param name="label2">[nome completo e e-mail]</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:responsavel"/> / <xsl:value-of select="//uc:responsavelEmail"/></xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Objetivos da aprendizagem (conhecimentos, apetidões e competências) a desenvolver pelos estudantes, operacionalização dos objetivos e medição do seu grau de cumprimento)</xsl:with-param>
<xsl:with-param name="label">Objetivos da aprendizagem (conhecimentos, aptidões e competências) a desenvolver pelos estudantes, operacionalização dos objetivos e medição do seu grau de cumprimento)</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:objetivosDaAprendizagem"/></xsl:with-param>
</xsl:call-template>
 
 
 
 
<xsl:call-template name="ects"/>
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Docente(s)/contacto</xsl:with-param>-->
<!--<xsl:with-param name="label2">[nome completo e e-mail]</xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:responsavel"/> / <xsl:value-of select="//uc:responsavelEmail"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<xsl:if test="//uc:outroDocente1/text() != ''">
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Docente(s)/contacto</xsl:with-param>
<xsl:with-param name="label2">[nome completo e e-mail]</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente1"/> / <xsl:value-of select="//uc:docenteEmail1"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente2/text() != ''">
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente2"/> / <xsl:value-of select="//uc:docenteEmail2"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente3/text() != ''">
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente3"/> / <xsl:value-of select="//uc:docenteEmail3"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente4/text() != ''">
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente4"/> / <xsl:value-of select="//uc:docenteEmail4"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Requisitos Orientadores</xsl:with-param>
<xsl:with-param name="label2">[competências à entrada; pré-requisitos; precedências]</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:preRequisitos"/></xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Conteúdos</xsl:with-param>
<xsl:with-param name="label2">[estrutura de conteúdos a desenvolver para o total de horas previsto]</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:conteudosProgramaticos"/></xsl:with-param>
</xsl:call-template>
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Demonstração da coerência dos conteúdos programáticos com os objectivos da unidade curricular</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:demonstracaoCoerenciaConteudosObjectivos"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Metodologias de ensino e Aprendizagem</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:metodologiasEnsino"/></xsl:with-param>
</xsl:call-template>
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Demonstração da coerência das metodologias de ensino com os objectivos da aprendizagem da unidade curricular</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:demonstracaoDaCoerenciaMetodologiasObjectivos"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Língua de ensino</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:lingua1"/> <xsl:value-of select="//uc:lingua2"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine2Fields">
<xsl:with-param name="label">Avaliação</xsl:with-param>
<xsl:with-param name="label2">[indicar os componentes d sistema de avaliação, tipo, matéria e peso de cada componente na classificação final]</xsl:with-param>
<xsl:with-param name="field1">Avaliação por frequência</xsl:with-param>
<xsl:with-param name="field2">Avaliação por Exame</xsl:with-param>
<xsl:with-param name="value1"><xsl:value-of select="//uc:alunosOrdinariosPorFrequencia"/></xsl:with-param>
<xsl:with-param name="value2"><xsl:value-of select="//uc:alunosOrdinariosPorExame"/></xsl:with-param>
</xsl:call-template>
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Avaliação de Alunos ordinários por frequência</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:alunosOrdinariosPorFrequencia"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Avaliação de Alunos ordinários por exame</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:alunosOrdinariosPorExame"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Avaliação de Alunos em mobilidade e alunos com estatuto especial por frequência</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Avaliação de Alunos em mobilidade e alunos com estatuto especial por exame</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorExame"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Bibliografia Principal</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:bibliografiaPrincipal"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Bibliografia Complementar</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:bibliografiaComplementar"/></xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="tableWhiteLine2Fields">
<xsl:with-param name="label">Alunos em mobilidade e alunos com estatuto especial</xsl:with-param>
<xsl:with-param name="label2"></xsl:with-param>
<xsl:with-param name="field1">Avaliação por frequência</xsl:with-param>
<xsl:with-param name="field2">Avaliação por Exame</xsl:with-param>
<xsl:with-param name="value1"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia"/></xsl:with-param>
<xsl:with-param name="value2"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorExame"/></xsl:with-param>
</xsl:call-template>
 
 
 
 
 
 
 
<!---->
<!---->
<!---->
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Adaptação das metodologias de ensino e das didácticas aos objectivos de aprendizagem das unidades curriculares</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:adaptacaoMetodologiasObjectivos"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label"> </xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:verificacaoCargaECTS"/>Verificação de que a carga média de trabalho necessária aos estudantes corresponde ao estimado em ECTS</xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Formas de garantir que a avaliação da aprendizagem dos estudantes é feita em função dos objectivos de aprendizagem da unidade curricular</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:avaliacaoFuncaoObjectivos"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Metodologias de ensino que facilitam a participação dos estudantes nas actividades cientificas</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:metodologiasFacilitamParticipacaoCientificas"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Pré-requisitos</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:preRequisitos"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Natureza opcional ou obrigatória da unidade curricular</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:obrigatoria"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableWhiteLine">-->
<!--<xsl:with-param name="label">Língua de ensino 1</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:lingua1"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
<!--<xsl:call-template name="tableGrayLine">-->
<!--<xsl:with-param name="label">Língua de ensino 2</xsl:with-param>-->
<!--<xsl:with-param name="label2"></xsl:with-param>-->
<!--<xsl:with-param name="value"><xsl:value-of select="//uc:lingua2"/></xsl:with-param>-->
<!--</xsl:call-template>-->
 
 
 
 
</xsl:template>
 
<xsl:template name="ects">
<fo:table-row background-color="#FFFFFF">
 
<fo:table-cell border-bottom="1px solid gray" border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
ECTS/tempo de trabalho (horas)
</fo:block>
</fo:table-cell>
<fo:table-cell background-color="#FFF" color="#000" border-bottom="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt">
 
 
<fo:table table-layout="fixed" border="1px solid gray" margin="0.5em" font-size="8.5pt">
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray" />
<fo:table-column border="1px solid gray" />
<fo:table-column border="1px solid gray"/>
<fo:table-column border="1px solid gray"/>
<fo:table-body text-align="left">
<fo:table-row >
<fo:table-cell >
<fo:block text-align="right" padding="3pt" font-weight="bold">
ECTS
</fo:block>
</fo:table-cell>
<fo:table-cell padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
Total
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" number-columns-spanned="7">
<fo:block text-align="center" padding="3pt" font-weight="bold">
Horas de contacto semestral
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row >
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" number-rows-spanned="2" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:ects"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" number-rows-spanned="2" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTotal"/>
</fo:block>
</fo:table-cell>
 
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
T
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
TP
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
PL
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
S
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
TC
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
O
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
OT
</fo:block>
</fo:table-cell>
 
</fo:table-row>
 
 
<fo:table-row >
 
 
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaT"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTP"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaPL"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaS"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTC"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaO"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaOT"/>
</fo:block>
</fo:table-cell>
 
</fo:table-row>
</fo:table-body>
</fo:table>
 
 
</fo:block>
</fo:table-cell>
</fo:table-row>
 
 
</xsl:template>
 
<xsl:template name="tableWhiteLine">
<xsl:param name="label"/>
<xsl:param name="label2"/>
<xsl:param name="value"/>
<xsl:call-template name="tableLine">
<xsl:with-param name="label"><xsl:value-of select="$label"/></xsl:with-param>
<xsl:with-param name="label2"><xsl:value-of select="$label2"/></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="$value"/></xsl:with-param>
<xsl:with-param name="bgcolor">#FFF</xsl:with-param>
<xsl:with-param name="color">#000</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="tableGrayLine">
<xsl:template name="tableWhiteLine2Fields">
<xsl:param name="label"/>
<xsl:param name="label2"/>
<xsl:param name="field1"/>
<xsl:param name="field2"/>
<xsl:param name="value1"/>
<xsl:param name="value2"/>
<xsl:call-template name="tableLine2Fields">
<xsl:with-param name="label"><xsl:value-of select="$label"/></xsl:with-param>
<xsl:with-param name="label2"><xsl:value-of select="$label2"/></xsl:with-param>
<xsl:with-param name="field1"><xsl:value-of select="$field1"/></xsl:with-param>
<xsl:with-param name="field2"><xsl:value-of select="$field2"/></xsl:with-param>
<xsl:with-param name="value1"><xsl:value-of select="$value1"/></xsl:with-param>
<xsl:with-param name="value2"><xsl:value-of select="$value2"/></xsl:with-param>
<xsl:with-param name="bgcolor">#FFF</xsl:with-param>
<xsl:with-param name="color">#000</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="tableGrayLine">
<xsl:param name="label"/>
<xsl:param name="label2"/>
<xsl:param name="value"/>
<xsl:call-template name="tableLine">
<xsl:with-param name="label"><xsl:value-of select="$label"/></xsl:with-param>
<xsl:with-param name="label2"><xsl:value-of select="$label2"/></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="$value"/></xsl:with-param>
<xsl:with-param name="bgcolor">#AAA</xsl:with-param>
<xsl:with-param name="color">#FFF</xsl:with-param>
205,6 → 585,7
 
<xsl:template name="tableLine">
<xsl:param name="label"/>
<xsl:param name="label2"/>
<xsl:param name="value"/>
<xsl:param name="bgcolor"/>
<xsl:param name="color"/>
215,13 → 596,16
<xsl:attribute name="color">
<xsl:value-of select="$color"/>
</xsl:attribute>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:table-cell border-right="1px solid gray" border-bottom="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
<xsl:value-of select="$label"/>
</fo:block>
<fo:block text-align="right" padding="3pt" font-size="6pt">
<xsl:value-of select="$label2"/>
</fo:block>
</fo:table-cell>
<fo:table-cell background-color="#FFF" color="#000" border="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt">
<fo:table-cell background-color="#FFF" color="#000" border-bottom="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt" linefeed-treatment="preserve">
<xsl:value-of select="$value"/>
</fo:block>
</fo:table-cell>
231,8 → 615,52
 
 
 
<xsl:template name="tableLine2Fields">
<xsl:param name="label"/>
<xsl:param name="label2"/>
<xsl:param name="field1"/>
<xsl:param name="field2"/>
<xsl:param name="value1"/>
<xsl:param name="value2"/>
<xsl:param name="bgcolor"/>
<xsl:param name="color"/>
<fo:table-row >
<xsl:attribute name="background-color">
<xsl:value-of select="$bgcolor"/>
</xsl:attribute>
<xsl:attribute name="color">
<xsl:value-of select="$color"/>
</xsl:attribute>
<fo:table-cell border-right="1px solid gray" border-bottom="1px solid gray" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
<xsl:value-of select="$label"/>
</fo:block>
<fo:block text-align="right" padding="3pt" font-size="6pt">
<xsl:value-of select="$label2"/>
</fo:block>
</fo:table-cell>
<fo:table-cell background-color="#FFF" color="#000" border-bottom="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt" linefeed-treatment="preserve" font-weight="bold">
1 - <xsl:value-of select="$field1"/>
</fo:block>
<fo:block text-align="left" padding="3pt" linefeed-treatment="preserve">
<xsl:value-of select="$value1"/>
</fo:block>
<fo:block text-align="left" padding="3pt" linefeed-treatment="preserve" font-weight="bold">
2 - <xsl:value-of select="$field2"/>
</fo:block>
<fo:block text-align="left" padding="3pt" linefeed-treatment="preserve">
<xsl:value-of select="$value2"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
</xsl:template>
 
 
 
 
 
 
 
</xsl:stylesheet>
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitDirPackageService.java
116,6 → 116,7
courseUnit.setNormalizedName(normalizedName);
courseUnit.setPathIntranet(unitPath.substring(tmpDir.length()));
nowWriter.write(normalizedName);
System.out.println("GENERATING LINE: " + normalizedName);
 
if(courseUnit.getTeachers() != null)
{
133,8 → 134,12
nowWriter.write("\n");
}
}
confWriterSemestre1.flush();
confWriterSemestre2.flush();
confWriterA.flush();
confWriterSemestre1.close();
confWriterSemestre2.close();
confWriterA.close();
}
catch (IOException e)
{
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitService.java
1,20 → 1,22
package pt.estgp.estgweb.services.courseunits;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitSummary;
import pt.estgp.estgweb.domain.RepositoryFile;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.views.CourseUnitSummaryView;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.blogs.LoadBlogService;
import pt.estgp.estgweb.services.blogs.LoadBlogPostsService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import org.apache.log4j.Logger;
 
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
 
import jomm.utils.MyCalendar;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
73,4 → 75,17
}
return cV;
}
 
 
public CourseUnitView loadCourseUnitViewAndCourse(long id, boolean initTeachers, boolean initStudents, boolean initBlog, boolean initCourseView, UserSession userSession) throws ServiceException
{
 
CourseUnitView cV = run(id,initTeachers,initStudents,initBlog,userSession);
if(initCourseView)
{
CourseView coV = new CourseView(cV.getCourseUnit().getCourse());
cV.setCourseView(coV);
}
return cV;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/UpdateCourseUnitService.java
1,22 → 1,19
package pt.estgp.estgweb.services.courseunits;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.UserSession;
import jomm.utils.FilesUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.RepositoryFileImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
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.services.data.RepositoryService;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import org.apache.log4j.Logger;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.InputStream;
 
import jomm.utils.MessageResources;
import jomm.utils.MimeTypeGuesser;
import jomm.utils.FilesUtils;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
79,4 → 76,16
}
return loadCourseUnitService.run(cV.getId(),true,false,false,userSession);
}
 
 
public void delete(long id,
UserSession userSession)
throws ServiceException
{
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(id);
c.setStatus(false);
}
 
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/courseunitprogram.fo.xsl.rev0
New file
0,0 → 1,512
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uc="http://baco.estgp.pt/schemas/courseunits/program/">
 
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4Vertical" page-width="210mm" page-height="297mm"
margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"
reference-orientation="0">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
 
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="A4HorizontalRot" page-width="210mm" page-height="297mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm" margin-right="0.5cm"
reference-orientation="90">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="A4Horizontal" page-width="297mm" page-height="210mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm"
margin-right="0.5cm">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="15mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="pages" page-position="any"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
 
<!--LAYOUT DE PAGINA ESCOLHIDO-->
<fo:page-sequence master-reference="A4Vertical" initial-page-number="auto">
<xsl:call-template name="page"/>
</fo:page-sequence>
 
 
</fo:root>
</xsl:template>
 
 
<xsl:template name="page">
<fo:static-content flow-name="header">
 
<fo:block text-align="left" >
<fo:table width="100%" table-layout="fixed" border-bottom="1px solid black">
<fo:table-column column-width="100%"/>
 
 
<fo:table-body>
<fo:table-row>
<fo:table-cell >
<fo:block>
 
</fo:block>
</fo:table-cell>
 
</fo:table-row>
 
</fo:table-body>
</fo:table>
 
</fo:block>
 
 
</fo:static-content>
<fo:static-content flow-name="footer">
 
<fo:table width="100%" table-layout="fixed" border-top="1px solid black" font-size="6.5pt" >
<fo:table-column column-width="20%"/>
<fo:table-column column-width="80%" />
 
 
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-top="3pt">
<fo:block>
<xsl:value-of select="//uc:UnidadeCurricular/@uc:data"/> / Página <fo:page-number/>
</fo:block>
<fo:block font-size="5pt">
ESTG.SA.23-Rev.0
</fo:block>
 
</fo:table-cell>
<fo:table-cell padding-top="3pt" >
<fo:block font-size="6pt" text-align="right">
http://www.estgp.pt | gerado pela plataforma baco® 2012
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
 
 
</fo:static-content>
<fo:flow flow-name="body">
<fo:block>
<xsl:apply-templates select="//uc:UnidadeCurricular"/>
</fo:block>
</fo:flow>
</xsl:template>
 
<xsl:template match="/uc:UnidadeCurricular">
<fo:table table-layout="fixed" border="0px solid black" margin="0.5em" font-size="8.5pt">
<xsl:call-template name="gen_cols"/>
<fo:table-body text-align="left">
 
<xsl:call-template name="gen_header"/>
 
<xsl:call-template name="gen_line"/>
 
</fo:table-body>
</fo:table>
</xsl:template>
 
<xsl:template name="gen_cols">
<fo:table-column column-width="15em" />
<fo:table-column/>
</xsl:template>
 
 
 
 
<xsl:template name="gen_header">
<!--<fo:table-row background-color="#000" color="#FFF" height="7mm">-->
<!--<fo:table-cell border="1px solid black" display-align="center" >-->
<!--<fo:block text-align="center" >Pos</fo:block>-->
<!--</fo:table-cell>-->
<!--<fo:table-cell border="1px solid black" display-align="center" >-->
<!--<fo:block text-align="center">Pos. Esc.</fo:block>-->
<!--</fo:table-cell>-->
<!--</fo:table-row>-->
</xsl:template>
 
 
 
 
 
 
 
 
 
 
<xsl:template name="gen_line">
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Ano Lectivo</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:anoLectivo"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Curso</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:curso"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Unidade Curricular</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:unidadeCurricular"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Responsável</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:responsavel"/> / <xsl:value-of select="//uc:responsavelEmail"/></xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Objetivos da aprendizagem (conhecimentos, apetidões e competências) a desenvolver pelos estudantes, operacionalização dos objetivos e medição do seu grau de cumprimento)</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:objetivosDaAprendizagem"/></xsl:with-param>
</xsl:call-template>
 
 
 
 
<xsl:call-template name="ects"/>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Docente(s)/contacto</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:responsavel"/> / <xsl:value-of select="//uc:responsavelEmail"/></xsl:with-param>
</xsl:call-template>
 
<xsl:if test="//uc:outroDocente1/text() != ''">
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente1"/> / <xsl:value-of select="//uc:docenteEmail1"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente2/text() != ''">
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente2"/> / <xsl:value-of select="//uc:docenteEmail2"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente3/text() != ''">
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente3"/> / <xsl:value-of select="//uc:docenteEmail3"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
<xsl:if test="//uc:outroDocente4/text() != ''">
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label"></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:outroDocente4"/> / <xsl:value-of select="//uc:docenteEmail4"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
 
 
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Conteúdos Programáticos</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:conteudosProgramaticos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Demonstração da coerência dos conteúdos programáticos com os objectivos da unidade curricular</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:demonstracaoCoerenciaConteudosObjectivos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Metodologias de ensino</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:metodologiasEnsino"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Demonstração da coerência das metodologias de ensino com os objectivos da aprendizagem da unidade curricular</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:demonstracaoDaCoerenciaMetodologiasObjectivos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Avaliação de Alunos ordinários por frequência</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:alunosOrdinariosPorFrequencia"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Avaliação de Alunos ordinários por exame</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:alunosOrdinariosPorExame"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Avaliação de Alunos em mobilidade e alunos com estatuto especial por frequência</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Avaliação de Alunos em mobilidade e alunos com estatuto especial por exame</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:alunosMobilidadeAlunosComEstatutoEspecialPorExame"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Bibliografia Principal</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:bibliografiaPrincipal"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Bibliografia Complementar</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:bibliografiaComplementar"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Adaptação das metodologias de ensino e das didácticas aos objectivos de aprendizagem das unidades curriculares</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:adaptacaoMetodologiasObjectivos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label"> </xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:verificacaoCargaECTS"/>Verificação de que a carga média de trabalho necessária aos estudantes corresponde ao estimado em ECTS</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Formas de garantir que a avaliação da aprendizagem dos estudantes é feita em função dos objectivos de aprendizagem da unidade curricular</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:avaliacaoFuncaoObjectivos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Metodologias de ensino que facilitam a participação dos estudantes nas actividades cientificas</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:metodologiasFacilitamParticipacaoCientificas"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Pré-requisitos</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:preRequisitos"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Natureza opcional ou obrigatória da unidade curricular</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:obrigatoria"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableWhiteLine">
<xsl:with-param name="label">Língua de ensino 1</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:lingua1"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="tableGrayLine">
<xsl:with-param name="label">Língua de ensino 2</xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="//uc:lingua2"/></xsl:with-param>
</xsl:call-template>
 
 
 
 
</xsl:template>
 
<xsl:template name="ects">
<fo:table-row background-color="#FFFFFF">
 
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
ECTS
</fo:block>
</fo:table-cell>
<fo:table-cell background-color="#FFF" color="#000" border="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt">
 
 
<fo:table table-layout="fixed" border="1px solid black" margin="0.5em" font-size="8.5pt">
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black" />
<fo:table-column border="1px solid black" />
<fo:table-column border="1px solid black"/>
<fo:table-column border="1px solid black"/>
<fo:table-body text-align="left">
<fo:table-row >
<fo:table-cell>
<fo:block >
ECTS
</fo:block>
</fo:table-cell>
<fo:table-cell padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
Total
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" number-columns-spanned="7">
<fo:block text-align="center" padding="3pt" font-weight="bold">
Horas de contacto semestral
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row >
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" number-rows-spanned="2" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:ects"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" number-rows-spanned="2" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTotal"/>
</fo:block>
</fo:table-cell>
 
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
T
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
TP
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
PL
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
S
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
TC
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
O
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
OT
</fo:block>
</fo:table-cell>
 
</fo:table-row>
 
 
<fo:table-row >
 
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaT"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTP"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaPL"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaS"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaTC"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaO"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="center" padding="3pt" font-weight="bold">
<xsl:value-of select="//uc:cargaHorariaOT"/>
</fo:block>
</fo:table-cell>
 
</fo:table-row>
</fo:table-body>
</fo:table>
 
 
</fo:block>
</fo:table-cell>
</fo:table-row>
 
 
</xsl:template>
<xsl:template name="tableWhiteLine">
<xsl:param name="label"/>
<xsl:param name="value"/>
<xsl:call-template name="tableLine">
<xsl:with-param name="label"><xsl:value-of select="$label"/></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="$value"/></xsl:with-param>
<xsl:with-param name="bgcolor">#FFF</xsl:with-param>
<xsl:with-param name="color">#000</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="tableGrayLine">
<xsl:param name="label"/>
<xsl:param name="value"/>
<xsl:call-template name="tableLine">
<xsl:with-param name="label"><xsl:value-of select="$label"/></xsl:with-param>
<xsl:with-param name="value"><xsl:value-of select="$value"/></xsl:with-param>
<xsl:with-param name="bgcolor">#AAA</xsl:with-param>
<xsl:with-param name="color">#FFF</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="tableLine">
<xsl:param name="label"/>
<xsl:param name="value"/>
<xsl:param name="bgcolor"/>
<xsl:param name="color"/>
<fo:table-row >
<xsl:attribute name="background-color">
<xsl:value-of select="$bgcolor"/>
</xsl:attribute>
<xsl:attribute name="color">
<xsl:value-of select="$color"/>
</xsl:attribute>
<fo:table-cell border-right="1px solid black" padding-right="0.1em" display-align="center" >
<fo:block text-align="right" padding="3pt" font-weight="bold">
<xsl:value-of select="$label"/>
</fo:block>
</fo:table-cell>
<fo:table-cell background-color="#FFF" color="#000" border="1px solid gray" padding-right="0.1em" display-align="center">
<fo:block text-align="left" padding="3pt">
<xsl:value-of select="$value"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
</xsl:template>
 
 
 
 
 
 
 
</xsl:stylesheet>
/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java
3,6 → 3,7
import jomm.utils.TemplateUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.enums.LangEnum;
364,6 → 365,91
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public Email getUnidadeEdicaoEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
{
List<String> arguments = new ArrayList<String>();
 
 
String subject;
String template;
 
if(langEnum == LangEnum.PORTUGUESE)
{
template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_PT;
subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_PT;
}
else
{
template = Globals.EMAIL_UNDADE_EDICAO_TEMPLATE_EN;
subject = Globals.EMAIL_UNDADE_EDICAO_SUBJECT_EN;
}
subject = MessageFormat.format(ConfigProperties.getProperty(subject),new String[]{c.getName()});
 
arguments.add(c.getName());
 
List<String> recipients = new ArrayList<String>();
for(String email:emails)
recipients.add(email);
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public Email getUnidadeValidadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
{
List<String> arguments = new ArrayList<String>();
 
 
String subject;
String template;
 
if(langEnum == LangEnum.PORTUGUESE)
{
template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_PT;
subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_PT;
}
else
{
template = Globals.EMAIL_UNDADE_VALIDADA_TEMPLATE_EN;
subject = Globals.EMAIL_UNDADE_VALIDADA_SUBJECT_EN;
}
subject = MessageFormat.format(ConfigProperties.getProperty(subject),new String[]{c.getName()});
 
arguments.add(c.getName());
 
List<String> recipients = new ArrayList<String>();
for(String email:emails)
recipients.add(email);
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public Email getUnidadeEditadaEmail(List<String> emails, CourseUnit c, LangEnum langEnum)
{
List<String> arguments = new ArrayList<String>();
 
 
String subject;
String template;
 
if(langEnum == LangEnum.PORTUGUESE)
{
template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_PT;
subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_PT;
}
else
{
template = Globals.EMAIL_UNDADE_EDITADA_TEMPLATE_EN;
subject = Globals.EMAIL_UNDADE_EDITADA_SUBJECT_EN;
}
subject = MessageFormat.format(ConfigProperties.getProperty(subject),new String[]{c.getName()});
 
arguments.add(c.getCourseName());
arguments.add(c.getName());
 
List<String> recipients = new ArrayList<String>();
for(String email:emails)
recipients.add(email);
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public boolean sendNewGrades(List<String[]> grades, LangEnum langEnum, String studentEmail, String studentName)
{
try
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
2,6 → 2,7
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.NonUniqueResultException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.ConfigProperties;
148,7 → 149,14
for (Map.Entry<String, Disciplina> entry : set)
{
Disciplina d = entry.getValue();
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + d.getCodigo(), "" + d.getCodigoCurso(), semestre, year);
CourseUnit c;
try{
c = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + d.getCodigo(), "" + d.getCodigoCurso(), semestre, year);
}catch(NonUniqueResultException e)
{
logger.fatal("Unidade Repetida: (" + d.getCodigo() + ") curso: " + d.getCodigoCurso() + " " + semestre + " " + year);
throw e;
}
if (c == null)
{
c = DomainObjectFactory.createCourseUnitImpl();
/impl/src/java/pt/estgp/estgweb/services/users/LoadUsersService.java
1,27 → 1,20
package pt.estgp.estgweb.services.users;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.expceptions.FieldException;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.utils.DatesUtils;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Order;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
 
import jomm.utils.BytesUtils;
import jomm.dao.impl.AbstractDao;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
82,4 → 75,14
return null;
return UserView.getViews(users);
}
 
public List<UserView> loadTeachers() throws ServiceException
{
List<Teacher> users = DaoFactory.getTeacherDaoImpl().getAll();
if(users == null)
return null;
return UserView.getTeacherViews(users);
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryService.java
1,22 → 1,21
package pt.estgp.estgweb.services.data;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.impl.DefaultRepositoryFile;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
 
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Document;
 
/**
* @author Jorge Machado
* @date 4/Jun/2008
25,6 → 24,10
public class RepositoryService implements IService
{
 
public String storeRepositoryFile(InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession)
{
return storeRepositoryFile(stream,contentType,extension,size,name,description,accessControl,userSession.getUser());
}
/**
* @param stream .
* @param contentType .
33,16 → 36,16
* @param description .
* @param extension .
* @param accessControl .
* @param userSession .
* @param user .
* @return the identifier to retrieve the document
*/
public String storeRepositoryFile(InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession)
public String storeRepositoryFile(InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl, User user)
{
RepositoryFileImpl repositoryFile = DomainObjectFactory.createRepositoryFileImpl();
repositoryFile.setSaveDate(new Date());
repositoryFile.setDeleted(false);
repositoryFile.setAccessControl(accessControl.getKey());
repositoryFile.setOwner(userSession.getUser());
repositoryFile.setOwner(user);
DaoFactory.getRepositoryFileDaoImpl().save(repositoryFile);
 
RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
237,7 → 240,10
if (repositoryFile.getRepositoryFile().getOwner() instanceof User)
{
Element oUsername = DocumentFactory.getInstance().createElement("username");
oUsername.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getUsername());
if(((User) repositoryFile.getRepositoryFile().getOwner()).getUsername() == null)
oUsername.setText("UNKNOWN");
else
oUsername.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getUsername());
owner.add(oUsername);
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getEmail() != null)
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitProgramImpl.java
1,21 → 1,25
package pt.estgp.estgweb.domain;
 
import jomm.dao.utils.HibernateUtils;
import jomm.utils.PdfUtils;
import org.apache.fop.apps.FOPException;
import org.dom4j.*;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.hibernate.NonUniqueResultException;
import org.hibernate.Session;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.SaveCourseUnitProgram;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
35,57 → 39,138
return getId();
}
 
public CourseUnitProgramImpl() {
 
setBibliografia("");
setBibliografiaComplementar("");
setAdaptacaoObjectivosMetodologia("");
setDemonstracaoCargaEcts("");
setGarantiaAvaliacaoFuncaObjectivos("");
setMetodologiasActividadeCientifica("");
setEcts("");
setPrerequisitos("");
setObrigatoria("");
setLingua1("");
setLingua2("");
setCargaHorariaTotal("");
setCargaHorariaT("");
setCargaHorariaTP("");
setCargaHorariaPL("");
setCargaHorariaS("");
setCargaHorariaTC("");
setCargaHorariaO("");
setCargaHorariaOT("");
 
}
 
public void consistNullValues()
{
if(getBibliografia() == null)
setBibliografia("");
if(getBibliografiaComplementar() == null)
setBibliografiaComplementar("");
if(getAdaptacaoObjectivosMetodologia() == null)
setAdaptacaoObjectivosMetodologia("");
if(getDemonstracaoCargaEcts() == null)
setDemonstracaoCargaEcts("");
if(getGarantiaAvaliacaoFuncaObjectivos() == null)
setGarantiaAvaliacaoFuncaObjectivos("");
if(getMetodologiasActividadeCientifica() == null)
setMetodologiasActividadeCientifica("");
if(getEcts() == null)
setEcts("");
if(getPrerequisitos() == null)
setPrerequisitos("");
if(getObrigatoria() == null)
setObrigatoria("");
if(getLingua1() == null)
setLingua1("");
if(getLingua2() == null)
setLingua2("");
if(getCargaHorariaTotal() == null)
setCargaHorariaTotal("");
if(getCargaHorariaT() == null)
setCargaHorariaT("");
if(getCargaHorariaTP() == null)
setCargaHorariaTP("");
if(getCargaHorariaPL() == null)
setCargaHorariaPL("");
if(getCargaHorariaS() == null)
setCargaHorariaS("");
if(getCargaHorariaTC() == null)
setCargaHorariaTC("");
if(getCargaHorariaO() == null)
setCargaHorariaO("");
if(getCargaHorariaOT() == null)
setCargaHorariaOT("");
if(getCourseUnitProgramPart2() != null)
{
((CourseUnitProgramPart2Impl)getCourseUnitProgramPart2()).consistNullValues();
}
}
 
public static class CourseUnitInputLine
{
 
String codigoCurso;
String codigoCurso = "";
 
String codigoSIGESUnidade;
String ano;
String semestre;
String nomeUnidadeCurricular;
String codigoSIGESUnidade = "";
String ano = "";
String semestre = "";
String nomeUnidadeCurricular = "";
 
String codSIGESDocenteResponsavel;
String nomeDocenteResponsavel;
String emailDocenteResponsavel;
String codSIGESDocenteResponsavel = "";
String nomeDocenteResponsavel = "";
String emailDocenteResponsavel = "";
 
String codigoSIGESDocente1;
String outroDocente1;
String docenteEmail1;
String codigoSIGESDocente1 = "";
String outroDocente1 = "";
String docenteEmail1 = "";
 
String codigoSIGESDocente2;
String outroDocente2;
String docenteEmail2;
String codigoSIGESDocente2 = "";
String outroDocente2 = "";
String docenteEmail2 = "";
 
String codigoSIGESDocente3;
String outroDocente3;
String docenteEmail3;
String codigoSIGESDocente3 = "";
String outroDocente3 = "";
String docenteEmail3 = "";
 
String codigoSIGESDocente4;
String outroDocente4;
String docenteEmail4;
String codigoSIGESDocente4 = "";
String outroDocente4 = "";
String docenteEmail4 = "";
 
String objetivosDaAprendizagem;
String conteudosProgramaticos;
String demonstracaoCoerenciaConteudosObjectivos;
String metodologiasEnsino;
String alunosOrdinariosPorFrequencia;
String alunosOrdinariosPorExame;
String alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia;
String alunosMobilidadeAlunosComEstatutoEspecialPorExame;
String demonstracaoDaCoerenciaMetodologiasObjectivos;
String bibliografiaPrincipal;
String adaptacaoMetodologiasObjectivos;
String verificacaoCargaECTS;
String avaliacaoFuncaoObjectivos;
String metodologiasFacilitamParticipacaoCientificas;
String objetivosDaAprendizagem = "";
String conteudosProgramaticos = "";
String demonstracaoCoerenciaConteudosObjectivos = "";
String metodologiasEnsino = "";
String alunosOrdinariosPorFrequencia = "";
String alunosOrdinariosPorExame = "";
String alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = "";
String alunosMobilidadeAlunosComEstatutoEspecialPorExame = "";
String demonstracaoDaCoerenciaMetodologiasObjectivos = "";
String bibliografiaPrincipal = "";
String bibliografiaComplementar = "";
String adaptacaoMetodologiasObjectivos = "";
String verificacaoCargaECTS = "";
String avaliacaoFuncaoObjectivos = "";
String metodologiasFacilitamParticipacaoCientificas = "";
 
String ects;
String preRequisitos;
String obrigatoria;
String lingua1;
String lingua2;
String ects = "";
String preRequisitos = "";
String obrigatoria = "";
String lingua1 = "";
String lingua2 = "";
 
 
String cargaHorariaT = "";
String cargaHorariaTP = "";
String cargaHorariaPL = "";
String cargaHorariaS = "";
String cargaHorariaTC = "";
String cargaHorariaO = "";
String cargaHorariaOT = "";
String cargaHorariaTotal = "";
 
@Override
public String toString() {
return "CourseUnitInputLine{" +
115,10 → 200,11
", metodologiasEnsino='" + metodologiasEnsino + '\'' +
", alunosOrdinariosPorFrequencia='" + alunosOrdinariosPorFrequencia + '\'' +
", alunosOrdinariosPorExame='" + alunosOrdinariosPorExame + '\'' +
", alunosMobilidadeAlunosComEstatutoEspecialPorFrequência='" + alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia + '\'' +
", alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia='" + alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia + '\'' +
", alunosMobilidadeAlunosComEstatutoEspecialPorExame='" + alunosMobilidadeAlunosComEstatutoEspecialPorExame + '\'' +
", demonstracaoDaCoerenciaMetodologiasObjectivos='" + demonstracaoDaCoerenciaMetodologiasObjectivos + '\'' +
", bibliografiaPrincipal='" + bibliografiaPrincipal + '\'' +
", bibliografiaCompletmentar='" + bibliografiaComplementar + '\'' +
", adaptacaoMetodologiasObjectivos='" + adaptacaoMetodologiasObjectivos + '\'' +
", verificacaoCargaECTS='" + verificacaoCargaECTS + '\'' +
", avaliacaoFuncaoObjectivos='" + avaliacaoFuncaoObjectivos + '\'' +
128,100 → 214,239
", obrigatoria='" + obrigatoria + '\'' +
", lingua1='" + lingua1 + '\'' +
", lingua2='" + lingua2 + '\'' +
", cargaHorariaT='" + cargaHorariaT + '\'' +
", cargaHorariaTP='" + cargaHorariaTP + '\'' +
", cargaHorariaPL='" + cargaHorariaPL + '\'' +
", cargaHorariaS='" + cargaHorariaS + '\'' +
", cargaHorariaTC='" + cargaHorariaTC + '\'' +
", cargaHorariaOT='" + cargaHorariaOT + '\'' +
", cargaHorariaOT='" + cargaHorariaOT + '\'' +
", cargaHorariaTotal='" + cargaHorariaTotal + '\'' +
'}';
}
}
 
 
 
public static void main(String[] args) throws IOException, MalformedURLException, DocumentException, SQLException, TransformerException, FOPException {
static boolean valiPrograms = true;
static int contaProgramas = 0;
public static void main(String[] args) throws IOException, DocumentException, SQLException, TransformerException, FOPException {
 
 
System.out.println("CONSISTING COURSE IDS in units:");
HibernateUtils.getCurrentSession().beginTransaction();
DaoFactory.getCourseUnitDaoImpl().consistCourseUnitCourseCodes(DatesUtils.getImportYear());
HibernateUtils.getCurrentSession().getTransaction().commit();
System.out.println("Done");
 
String file = "D:\\Jorge\\Documents\\estg\\projectos\\Fichas Curriculares Baco\\FICHAS_CORRIGIDAS";
if(args.length > 0)
file = args[0];
if(args.length > 1)
valiPrograms = Boolean.parseBoolean(args[1]);
File f = new File(file);
File f2 = f;
 
try{
if(f.isDirectory())
{
for(File f3 : f.listFiles())
{
f2 = f3;
if(f3.getName().endsWith("xml"))
{
contaProgramas++;
System.out.println("TOTAL Programas: " + contaProgramas);
importFile(f3);
}
}
}
else
{
importFile(f);
}
}catch(Throwable e)
{
System.out.println(e.toString());
e.printStackTrace();
System.out.println("Falhou a importar o ficheiro: " + f2.getName());
}
for(String error: errors)
{
System.out.println("ERRO:" + error);
}
System.out.println("INFOS:" + infos.size() + "#############################################");
for(String info: infos)
{
System.out.println(info);
}
System.out.println("ERROS:" + errors.size() + "#############################################");
for(String error: errors)
{
System.out.println(error);
}
 
 
}
 
public static void importFile(File f) throws IOException, MalformedURLException, DocumentException, SQLException, TransformerException, FOPException {
List<CourseUnitInputLine> unitsLines = new ArrayList<CourseUnitInputLine>();
Document dom = parse(new FileInputStream(new File("D:\\Jorge\\Documents\\estg\\projectos\\Fichas Curriculares Baco\\APM (1).xml")));
Document dom = parse(new FileInputStream(f));
 
Dom4jUtil.writeSout(dom);
// Dom4jUtil.writeSout(dom);
 
List<String>[] lista = new ArrayList[43];
List<String>[] lista = new ArrayList[56];
 
Map<String,String> namespaces = new HashMap<String,String>();
namespaces.put("m","urn:schemas-microsoft-com:office:spreadsheet");
 
XPath xPath = dom.createXPath("//m:Row");
XPath xPath = dom.createXPath("//m:Worksheet");
xPath.setNamespaceURIs(namespaces);
List<Element> rows = xPath.selectNodes(dom.getRootElement());
List<Element> worksheets = xPath.selectNodes(dom.getRootElement());
for(Element worksheet:worksheets)
{
xPath = worksheet.createXPath(".//m:Row");
xPath.setNamespaceURIs(namespaces);
List<Element> rows = xPath.selectNodes(worksheet);
 
for(int r = 3; r < 46; r++)
{
lista[r - 3] = new ArrayList<String>();
Element row = rows.get(r);
XPath xPathCells = dom.createXPath("m:Cell");
xPathCells.setNamespaceURIs(namespaces);
List<Element> cells = xPathCells.selectNodes(row);
for(int i = 6; i < cells.size();i++)
for(int r = 3; r < 56; r++)
{
Element cell = cells.get(i);
XPath xPathData = dom.createXPath("m:Data");
xPathData.setNamespaceURIs(namespaces);
Element data = (Element) xPathData.selectSingleNode(cell);
if(data!=null)
if(lista[r-3] == null)
lista[r - 3] = new ArrayList<String>();
Element row = rows.get(r);
XPath xPathCells = dom.createXPath("m:Cell");
xPathCells.setNamespaceURIs(namespaces);
List<Element> cells = xPathCells.selectNodes(row);
for(int i = 6; i < cells.size();i++)
{
String text = data.getText();
lista[r-3].add(text);
Element cell = cells.get(i);
XPath xPathData = dom.createXPath("m:Data");
xPathData.setNamespaceURIs(namespaces);
Element data = (Element) xPathData.selectSingleNode(cell);
if(data!=null)
{
String text = data.getText();
lista[r-3].add(text);
}
else
lista[r-3].add("");
}
else
lista[r-3].add("");
}
 
}
 
int maxUnits = lista[0].size();
for(int unit = 0; unit < maxUnits; unit++)
{
CourseUnitInputLine courseUnitInputLine = new CourseUnitInputLine();
courseUnitInputLine.codigoCurso = lista[0].get(unit);
courseUnitInputLine.codigoSIGESUnidade = lista[2].get(unit);
courseUnitInputLine.ano = lista[3].get(unit);
courseUnitInputLine.semestre = lista[4].get(unit);
courseUnitInputLine.nomeUnidadeCurricular = lista[5].get(unit);
if(lista[0].size() > unit)
courseUnitInputLine.codigoCurso = lista[0].get(unit);
if(lista[2].size() > unit)
courseUnitInputLine.codigoSIGESUnidade = lista[2].get(unit);
if(lista[3].size() > unit)
courseUnitInputLine.ano = lista[3].get(unit);
if(lista[4].size() > unit)
courseUnitInputLine.semestre = lista[4].get(unit);
if(lista[5].size() > unit)
courseUnitInputLine.nomeUnidadeCurricular = lista[5].get(unit);
 
courseUnitInputLine.codSIGESDocenteResponsavel = lista[7].get(unit);
courseUnitInputLine.nomeDocenteResponsavel = lista[8].get(unit);
courseUnitInputLine.emailDocenteResponsavel = lista[9].get(unit);
if(lista[7].size() > unit)
courseUnitInputLine.codSIGESDocenteResponsavel = lista[7].get(unit);
if(lista[8].size() > unit)
courseUnitInputLine.nomeDocenteResponsavel = lista[8].get(unit);
if(lista[9].size() > unit)
courseUnitInputLine.emailDocenteResponsavel = lista[9].get(unit);
 
courseUnitInputLine.codigoSIGESDocente1 = lista[10].get(unit);
courseUnitInputLine.outroDocente1 = lista[11].get(unit);
courseUnitInputLine.docenteEmail1 = lista[12].get(unit);
if(lista[10].size() > unit)
courseUnitInputLine.codigoSIGESDocente1 = lista[10].get(unit);
if(lista[11].size() > unit)
courseUnitInputLine.outroDocente1 = lista[11].get(unit);
if(lista[12].size() > unit)
courseUnitInputLine.docenteEmail1 = lista[12].get(unit);
 
courseUnitInputLine.codigoSIGESDocente2 = lista[13].get(unit);
courseUnitInputLine.outroDocente2 = lista[14].get(unit);
courseUnitInputLine.docenteEmail2 = lista[15].get(unit);
if(lista[13].size() > unit)
courseUnitInputLine.codigoSIGESDocente2 = lista[13].get(unit);
if(lista[14].size() > unit)
courseUnitInputLine.outroDocente2 = lista[14].get(unit);
if(lista[15].size() > unit)
courseUnitInputLine.docenteEmail2 = lista[15].get(unit);
 
courseUnitInputLine.codigoSIGESDocente3 = lista[16].get(unit);
courseUnitInputLine.outroDocente3 = lista[17].get(unit);
courseUnitInputLine.docenteEmail3 = lista[18].get(unit);
if(lista[16].size() > unit)
courseUnitInputLine.codigoSIGESDocente3 = lista[16].get(unit);
if(lista[17].size() > unit)
courseUnitInputLine.outroDocente3 = lista[17].get(unit);
if(lista[18].size() > unit)
courseUnitInputLine.docenteEmail3 = lista[18].get(unit);
 
courseUnitInputLine.codigoSIGESDocente4 = lista[19].get(unit);
courseUnitInputLine.outroDocente4 = lista[20].get(unit);
courseUnitInputLine.docenteEmail4 = lista[21].get(unit);
if(lista[19].size() > unit)
courseUnitInputLine.codigoSIGESDocente4 = lista[19].get(unit);
if(lista[20].size() > unit)
courseUnitInputLine.outroDocente4 = lista[20].get(unit);
if(lista[21].size() > unit)
courseUnitInputLine.docenteEmail4 = lista[21].get(unit);
 
courseUnitInputLine.objetivosDaAprendizagem = lista[22].get(unit);
courseUnitInputLine.conteudosProgramaticos = lista[23].get(unit);
courseUnitInputLine.demonstracaoCoerenciaConteudosObjectivos = lista[24].get(unit);
courseUnitInputLine.metodologiasEnsino = lista[25].get(unit);
courseUnitInputLine.alunosOrdinariosPorFrequencia = lista[26].get(unit);
courseUnitInputLine.alunosOrdinariosPorExame = lista[27].get(unit);
courseUnitInputLine.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = lista[28].get(unit);
courseUnitInputLine.alunosMobilidadeAlunosComEstatutoEspecialPorExame = lista[29].get(unit);
courseUnitInputLine.demonstracaoDaCoerenciaMetodologiasObjectivos = lista[30].get(unit);
courseUnitInputLine.bibliografiaPrincipal = lista[31].get(unit);
courseUnitInputLine.adaptacaoMetodologiasObjectivos = lista[33].get(unit);
courseUnitInputLine.verificacaoCargaECTS = lista[34].get(unit);
courseUnitInputLine.avaliacaoFuncaoObjectivos = lista[35].get(unit);
courseUnitInputLine.metodologiasFacilitamParticipacaoCientificas = lista[36].get(unit);
courseUnitInputLine.ects = lista[38].get(unit);
courseUnitInputLine.preRequisitos = lista[39].get(unit);
courseUnitInputLine.obrigatoria = lista[40].get(unit);
courseUnitInputLine.lingua1 = lista[41].get(unit);
courseUnitInputLine.lingua2 = lista[42].get(unit);
 
if(lista[22].size() > unit)
courseUnitInputLine.objetivosDaAprendizagem = lista[22].get(unit);
if(lista[23].size() > unit)
courseUnitInputLine.conteudosProgramaticos = lista[23].get(unit);
if(lista[24].size() > unit)
courseUnitInputLine.demonstracaoCoerenciaConteudosObjectivos = lista[24].get(unit);
if(lista[25].size() > unit)
courseUnitInputLine.metodologiasEnsino = lista[25].get(unit);
if(lista[26].size() > unit)
courseUnitInputLine.alunosOrdinariosPorFrequencia = lista[26].get(unit);
if(lista[27].size() > unit)
courseUnitInputLine.alunosOrdinariosPorExame = lista[27].get(unit);
if(lista[28].size() > unit)
courseUnitInputLine.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = lista[28].get(unit);
if(lista[29].size() > unit)
courseUnitInputLine.alunosMobilidadeAlunosComEstatutoEspecialPorExame = lista[29].get(unit);
if(lista[30].size() > unit)
courseUnitInputLine.demonstracaoDaCoerenciaMetodologiasObjectivos = lista[30].get(unit);
if(lista[31].size() > unit)
courseUnitInputLine.bibliografiaPrincipal = lista[31].get(unit);
if(lista[32].size() > unit)
courseUnitInputLine.bibliografiaComplementar = lista[32].get(unit);
if(lista[34].size() > unit)
courseUnitInputLine.adaptacaoMetodologiasObjectivos = lista[34].get(unit);
if(lista[35].size() > unit)
courseUnitInputLine.verificacaoCargaECTS = lista[35].get(unit);
if(lista[36].size() > unit)
courseUnitInputLine.avaliacaoFuncaoObjectivos = lista[36].get(unit);
if(lista[37].size() > unit)
courseUnitInputLine.metodologiasFacilitamParticipacaoCientificas = lista[37].get(unit);
if(lista[39].size() > unit)
courseUnitInputLine.ects = lista[39].get(unit);
if(lista[40].size() > unit)
courseUnitInputLine.preRequisitos = lista[40].get(unit);
if(lista[41].size() > unit)
courseUnitInputLine.obrigatoria = lista[41].get(unit);
if(lista[42].size() > unit)
courseUnitInputLine.lingua1 = lista[42].get(unit);
if(lista[43].size() > unit)
courseUnitInputLine.lingua2 = lista[43].get(unit);
 
if(lista[45].size() > unit)
courseUnitInputLine.cargaHorariaT = lista[45].get(unit);
if(lista[46].size() > unit)
courseUnitInputLine.cargaHorariaTP = lista[46].get(unit);
if(lista[47].size() > unit)
courseUnitInputLine.cargaHorariaPL = lista[47].get(unit);
if(lista[48].size() > unit)
courseUnitInputLine.cargaHorariaS = lista[48].get(unit);
if(lista[49].size() > unit)
courseUnitInputLine.cargaHorariaTC = lista[49].get(unit);
if(lista[50].size() > unit)
courseUnitInputLine.cargaHorariaO = lista[50].get(unit);
if(lista[51].size() > unit)
courseUnitInputLine.cargaHorariaOT = lista[51].get(unit);
if(lista[52].size() > unit)
courseUnitInputLine.cargaHorariaTotal = lista[52].get(unit);
 
 
 
 
if(courseUnitInputLine.semestre.equals("S1") || courseUnitInputLine.semestre.equals("S2") || courseUnitInputLine.semestre.equals("A"))
unitsLines.add(courseUnitInputLine);
else
234,77 → 459,57
// System.out.println(line.toString());
HibernateUtils.getCurrentSession().beginTransaction();
 
HibernateUtils.getCurrentSession().connection().setAutoCommit(false);
System.out.println("Unidade curricular " + line.codigoSIGESUnidade + " " + line.nomeUnidadeCurricular);
importCourseUnit(line,importYear);
 
HibernateUtils.getCurrentSession().flush();
HibernateUtils.getCurrentSession().connection().commit();
System.out.println(line.alunosOrdinariosPorFrequencia);
HibernateUtils.getCurrentSession().getTransaction().commit();
 
 
}
 
 
}
 
static String importYear = "201213";
 
private static void importCourseUnit(CourseUnitInputLine line, String importYear) throws TransformerException, IOException, FOPException {
 
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique(line.codigoSIGESUnidade,line.codigoCurso,line.semestre, importYear);
CourseUnit cu;
try{
cu = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique(line.codigoSIGESUnidade,line.codigoCurso,line.semestre, importYear);
}catch(NonUniqueResultException e)
{
errors.add("unidade nao unica: " + line.codigoSIGESUnidade + ":" + line.codigoCurso + ":" + line.semestre + ":" + importYear );
return;
}
if(cu != null)
{
setCourse(cu, line);
if(!setCourse(cu, line))
{
errors.add("Curso não encontrada: line.codigoSIGESUnidade,line.codigoCurso,line.semestre, importYear: " + line.codigoSIGESUnidade + ":" + line.codigoCurso + ":" + line.semestre + ":" + importYear );
return;
}
}
else
{
cu = createNewCourseUnit(cu,line,importYear);
errors.add("Unidade não encontrada: line.codigoSIGESUnidade,line.codigoCurso,line.semestre, importYear: " + line.codigoSIGESUnidade + ":" + line.codigoCurso + ":" + line.semestre + ":" + importYear );
// cu = createNewCourseUnit(cu,line,importYear);
return;
}
persistCourseUnitProgram(cu,line);
setTeachers(cu,line);
 
createPdf(line,cu);
new SaveCourseUnitProgram().createPdf(cu,errors);
 
cu.setValidProgram(valiPrograms);
}
 
private static void createPdf(CourseUnitInputLine line, CourseUnit cu) throws IOException, TransformerException, FOPException {
Document responseDoc = DocumentHelper.createDocument();
Namespace namespace = new Namespace("uc", "http://baco.estgp.pt/schemas/courseunits/program/");
responseDoc.setXMLEncoding("ISO-8859-1");
 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Element curriculum = responseDoc.addElement(new QName("UnidadeCurricular", namespace));
curriculum.addAttribute(new QName("data",namespace),sdf.format(new java.util.Date()));
 
Element curso = curriculum.addElement(new QName("curso",namespace));
curso.setText(cu.getCourseName());
 
Element anoLectivo = curriculum.addElement(new QName("anoLectivo",namespace));
anoLectivo.setText(DatesUtils.getImportYearPrograms(cu.getImportYear()));
 
Element unidadeCurricular = curriculum.addElement(new QName("unidadeCurricular",namespace));
unidadeCurricular.setText(cu.getName());
 
Element responsavel = curriculum.addElement(new QName("responsavel",namespace));
responsavel.setText(line.nomeDocenteResponsavel);
 
Element responsavelEmail = curriculum.addElement(new QName("responsavelEmail",namespace));
responsavelEmail.setText(line.emailDocenteResponsavel);
 
Element apresentacaoObjectivos = curriculum.addElement(new QName("objetivosDaAprendizagem",namespace));
apresentacaoObjectivos.setText(line.objetivosDaAprendizagem);
 
 
 
Dom4jUtil.writeSout(responseDoc);
 
 
FileOutputStream teste = new FileOutputStream("D:\\Jorge\\Documents\\estg\\projectos\\Fichas Curriculares Baco\\APM (1).pdf");
PdfUtils.createPdfFromXml(new DOMSource(Dom4jUtil.toW3c(responseDoc)), "pt/estgp/estgweb/services/courseunits/courseunitprogram.fo.xsl", teste);
teste.flush();
teste.close();
}
 
private static void setTeachers(CourseUnit cu, CourseUnitInputLine line)
{
if(line.codSIGESDocenteResponsavel != null && line.codSIGESDocenteResponsavel.trim().length() > 0)
{
checkTeacher(cu, line.codSIGESDocenteResponsavel,line.nomeDocenteResponsavel,line.emailDocenteResponsavel);
checkTeacherResponsable(cu, line.codSIGESDocenteResponsavel,line.nomeDocenteResponsavel,line.emailDocenteResponsavel);
}
else
System.out.println("Nao existe docente responsavel para a unidade " + cu.getCode());
319,6 → 524,13
checkTeacher(cu, line.codigoSIGESDocente4,line.outroDocente4,line.docenteEmail4);
}
 
 
 
 
 
 
static List<String> errors = new ArrayList<String>();
static List<String> infos = new ArrayList<String>();
private static void checkTeacher(CourseUnit cu, String codSIGESDocenteResponsavel, String nomeDocenteResponsavel, String emailDocenteResponsavel) {
 
try{
332,8 → 544,14
break;
}
}
if(!found)
if(!found && t != null)
cu.getTeachers().add((TeacherImpl) t);
else if(!found && t == null)
{
 
errors.add("Teacher: " + codSIGESDocenteResponsavel + " not found in courseUnit " + cu.getName() + "(" + cu.getCode() + ") no curso " + cu.getCourseName());
 
}
}catch(Exception e)
{
 
341,6 → 559,32
 
}
 
 
private static void checkTeacherResponsable(CourseUnit cu, String codSIGESDocenteResponsavel, String nomeDocenteResponsavel, String emailDocenteResponsavel) {
 
try{
Teacher t = DaoFactory.getTeacherDaoImpl().loadBySigesCode(Integer.parseInt(codSIGESDocenteResponsavel));
 
if(t != null)
{
cu.setResponsableTeacher(t);
if(cu.getTeachers().contains(t))
{
infos.add("Docente Responsavel removido da lista de docentes da unidade: " + t.getName()+ " - unit(" + cu.getId() + ") " + cu.getName());
cu.getTeachers().remove(t);
}
}
else
{
errors.add("Teacher: " + codSIGESDocenteResponsavel + " not found in courseUnit " + cu.getName() + "(" + cu.getCode() + ") no curso " + cu.getCourseName());
}
}catch(Exception e)
{
 
}
 
}
 
private static CourseUnit createNewCourseUnit(CourseUnit cu, CourseUnitInputLine line,String importYear)
{
cu = DomainObjectFactory.createCourseUnitImpl();
356,45 → 600,269
return cu;
}
 
private static void setCourse(CourseUnit cu, CourseUnitInputLine line) {
private static boolean setCourse(CourseUnit cu, CourseUnitInputLine line) {
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(line.codigoCurso);
if(c == null)
{
System.out.println("Curso " + line.codigoCurso + " nao existe por favor crie e importe novamente");
return false;
}
cu.setCourse(c);
return true;
}
 
private static void persistCourseUnitProgram(CourseUnit cu, CourseUnitInputLine line) throws IOException, TransformerException, FOPException {
Session sess = HibernateUtils.getCurrentSession();
Session sess = HibernateUtils.getCurrentSession();
 
CourseUnitProgram program = cu.getCourseUnitProgram();
CourseUnitProgramPart2 program2;
if(program == null)
{
program = new CourseUnitProgramImpl();
program2 = new CourseUnitProgramPart2Impl();
program.setSaveDate(new java.util.Date());
program2.setSaveDate(new java.util.Date());
program.setCourseUnitProgramPart2(program2);
sess.save(program);
sess.save(program2);
cu.setCourseUnitProgram(program);
sess.save(program);
}
else
program2 = program.getCourseUnitProgramPart2();
program.setAdaptacaoObjectivosMetodologia(line.adaptacaoMetodologiasObjectivos);
program.setAvaliacaoEspeciaisFrequencia(line.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia);
program.setAvaliacaoEspeciaissExame(line.alunosMobilidadeAlunosComEstatutoEspecialPorExame);
program.setAvaliacaoOrdinariosFrequencia(line.alunosOrdinariosPorFrequencia);
program.setAvaliacaoOrdinariosExame(line.alunosOrdinariosPorExame);
program2.setAvaliacaoEspeciaisFrequencia(line.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia);
program2.setAvaliacaoEspeciaissExame(line.alunosMobilidadeAlunosComEstatutoEspecialPorExame);
program2.setAvaliacaoOrdinariosFrequencia(line.alunosOrdinariosPorFrequencia);
program2.setAvaliacaoOrdinariosExame(line.alunosOrdinariosPorExame);
program.setBibliografia(line.bibliografiaPrincipal);
program.setConteudos(line.conteudosProgramaticos);
program.setBibliografiaComplementar(line.bibliografiaComplementar);
program2.setConteudos(line.conteudosProgramaticos);
program.setDemonstracaoCargaEcts(line.verificacaoCargaECTS);
program.setDemonstracaoObjectivosMetodologia(line.demonstracaoDaCoerenciaMetodologiasObjectivos);
program2.setDemonstracaoObjectivosMetodologia(line.demonstracaoDaCoerenciaMetodologiasObjectivos);
program.setEcts(line.ects);
program.setGarantiaAvaliacaoFuncaObjectivos(line.avaliacaoFuncaoObjectivos);
program.setLingua1(line.lingua1);
program.setLingua2(line.lingua2);
program.setMetodologiasActividadeCientifica(line.metodologiasFacilitamParticipacaoCientificas);
program.setMetodologiasEnsino(line.metodologiasEnsino);
program.setDemonstracaoCoerenciaConteudos(line.demonstracaoCoerenciaConteudosObjectivos);
program.setObjectivos(line.objetivosDaAprendizagem);
program2.setMetodologiasEnsino(line.metodologiasEnsino);
program2.setDemonstracaoCoerenciaConteudos(line.demonstracaoCoerenciaConteudosObjectivos);
program2.setObjectivos(line.objetivosDaAprendizagem);
program.setObrigatoria(line.obrigatoria);
program.setPrerequisitos(line.preRequisitos);
program.setCargaHorariaTotal(line.cargaHorariaTotal);
program.setCargaHorariaT(line.cargaHorariaT);
program.setCargaHorariaTP(line.cargaHorariaTP);
program.setCargaHorariaPL(line.cargaHorariaPL);
program.setCargaHorariaS(line.cargaHorariaS);
program.setCargaHorariaTC(line.cargaHorariaTC);
program.setCargaHorariaO(line.cargaHorariaO);
program.setCargaHorariaOT(line.cargaHorariaOT);
 
 
 
}
 
 
// private static void createPdf(CourseUnitInputLine line, CourseUnit cu) throws IOException, TransformerException, FOPException {
// Document responseDoc = DocumentHelper.createDocument();
// Namespace namespace = new Namespace("uc", "http://baco.estgp.pt/schemas/courseunits/program/");
// responseDoc.setXMLEncoding("ISO-8859-1");
//
// SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
// Element curriculum = responseDoc.addElement(new QName("UnidadeCurricular", namespace));
// curriculum.addAttribute(new QName("data",namespace),sdf.format(new java.util.Date()));
//
// Element curso = curriculum.addElement(new QName("curso",namespace));
// if(cu.getCourseName() == null)
// {
// if(cu.getCourse() == null)
// {
// System.out.println("Unidade nao tem curso");
// curso.setText("Desactualizado");
// }
// else
// {
// 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());
//
// Element anoLectivo = curriculum.addElement(new QName("anoLectivo",namespace));
// anoLectivo.setText(DatesUtils.getImportYearPrograms(cu.getImportYear()));
//
// Element unidadeCurricular = curriculum.addElement(new QName("unidadeCurricular",namespace));
// unidadeCurricular.setText(cu.getName());
//
// Element responsavel = curriculum.addElement(new QName("responsavel",namespace));
// responsavel.setText(line.nomeDocenteResponsavel);
//
// Element responsavelEmail = curriculum.addElement(new QName("responsavelEmail",namespace));
// responsavelEmail.setText(line.emailDocenteResponsavel);
//
//
//
// Element apresentacaoObjectivos = curriculum.addElement(new QName("objetivosDaAprendizagem",namespace));
// apresentacaoObjectivos.setText(line.objetivosDaAprendizagem);
//
//
//
// Element codigoSIGESDocente1 = curriculum.addElement(new QName("codigoSIGESDocente1",namespace));
// codigoSIGESDocente1.setText(line.codigoSIGESDocente1);
// Element outroDocente1 = curriculum.addElement(new QName("outroDocente1",namespace));
// outroDocente1.setText(line.outroDocente1);
// Element docenteEmail1 = curriculum.addElement(new QName("docenteEmail1",namespace));
// docenteEmail1.setText(line.docenteEmail1);
//
//
// Element codigoSIGESDocente2 = curriculum.addElement(new QName("codigoSIGESDocente2",namespace));
// codigoSIGESDocente2.setText(line.codigoSIGESDocente2);
// Element outroDocente2 = curriculum.addElement(new QName("outroDocente2",namespace));
// outroDocente2.setText(line.outroDocente2);
// Element docenteEmail2 = curriculum.addElement(new QName("docenteEmail2",namespace));
// docenteEmail2.setText(line.docenteEmail2);
//
// Element codigoSIGESDocente3 = curriculum.addElement(new QName("codigoSIGESDocente3",namespace));
// codigoSIGESDocente3.setText(line.codigoSIGESDocente2);
// Element outroDocente3 = curriculum.addElement(new QName("outroDocente3",namespace));
// outroDocente3.setText(line.outroDocente3);
// Element docenteEmail3 = curriculum.addElement(new QName("docenteEmail3",namespace));
// docenteEmail3.setText(line.docenteEmail3);
//
//
// Element codigoSIGESDocente4 = curriculum.addElement(new QName("codigoSIGESDocente4",namespace));
// codigoSIGESDocente4.setText(line.codigoSIGESDocente4);
// Element outroDocente4 = curriculum.addElement(new QName("outroDocente4",namespace));
// outroDocente4.setText(line.outroDocente4);
// Element docenteEmail4 = curriculum.addElement(new QName("docenteEmail4",namespace));
// docenteEmail4.setText(line.docenteEmail4);
//
//
// Element conteudosProgramaticos = curriculum.addElement(new QName("conteudosProgramaticos",namespace));
// conteudosProgramaticos.setText(line.conteudosProgramaticos);
//
// Element demonstracaoCoerenciaConteudosObjectivos = curriculum.addElement(new QName("demonstracaoCoerenciaConteudosObjectivos",namespace));
// demonstracaoCoerenciaConteudosObjectivos.setText(line.demonstracaoCoerenciaConteudosObjectivos);
//
// Element metodologiasEnsino = curriculum.addElement(new QName("metodologiasEnsino",namespace));
// metodologiasEnsino.setText(line.metodologiasEnsino);
//
// Element alunosOrdinariosPorFrequencia = curriculum.addElement(new QName("alunosOrdinariosPorFrequencia",namespace));
// alunosOrdinariosPorFrequencia.setText(line.alunosOrdinariosPorFrequencia);
//
// Element alunosOrdinariosPorExame = curriculum.addElement(new QName("alunosOrdinariosPorExame",namespace));
// alunosOrdinariosPorExame.setText(line.alunosOrdinariosPorExame);
//
// Element alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia = curriculum.addElement(new QName("alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia",namespace));
// alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia.setText(line.alunosMobilidadeAlunosComEstatutoEspecialPorFrequencia);
//
// Element alunosMobilidadeAlunosComEstatutoEspecialPorExame = curriculum.addElement(new QName("alunosMobilidadeAlunosComEstatutoEspecialPorExame",namespace));
// alunosMobilidadeAlunosComEstatutoEspecialPorExame.setText(line.alunosMobilidadeAlunosComEstatutoEspecialPorExame);
//
//
// Element demonstracaoDaCoerenciaMetodologiasObjectivos = curriculum.addElement(new QName("demonstracaoDaCoerenciaMetodologiasObjectivos",namespace));
// demonstracaoDaCoerenciaMetodologiasObjectivos.setText(line.demonstracaoDaCoerenciaMetodologiasObjectivos);
//
//
// Element bibliografiaPrincipal = curriculum.addElement(new QName("bibliografiaPrincipal",namespace));
// bibliografiaPrincipal.setText(line.bibliografiaPrincipal);
//
// Element bibliografiaComplementar = curriculum.addElement(new QName("bibliografiaComplementar",namespace));
// bibliografiaComplementar.setText(line.bibliografiaComplementar);
//
// Element adaptacaoMetodologiasObjectivos = curriculum.addElement(new QName("adaptacaoMetodologiasObjectivos",namespace));
// adaptacaoMetodologiasObjectivos.setText(line.adaptacaoMetodologiasObjectivos);
//
// Element verificacaoCargaECTS = curriculum.addElement(new QName("verificacaoCargaECTS",namespace));
// verificacaoCargaECTS.setText(line.verificacaoCargaECTS);
//
// Element avaliacaoFuncaoObjectivos = curriculum.addElement(new QName("avaliacaoFuncaoObjectivos",namespace));
// avaliacaoFuncaoObjectivos.setText(line.avaliacaoFuncaoObjectivos);
//
// Element metodologiasFacilitamParticipacaoCientificas = curriculum.addElement(new QName("metodologiasFacilitamParticipacaoCientificas",namespace));
// metodologiasFacilitamParticipacaoCientificas.setText(line.metodologiasFacilitamParticipacaoCientificas);
//
// Element ects = curriculum.addElement(new QName("ects",namespace));
// ects.setText(line.ects);
//
//
// Element preRequisitos = curriculum.addElement(new QName("preRequisitos",namespace));
// preRequisitos.setText(line.preRequisitos);
//
// Element obrigatoria = curriculum.addElement(new QName("obrigatoria",namespace));
// obrigatoria.setText(line.obrigatoria);
//
// Element lingua1 = curriculum.addElement(new QName("lingua1",namespace));
// lingua1.setText(line.lingua1);
//
// Element lingua2 = curriculum.addElement(new QName("lingua2",namespace));
// lingua2.setText(line.lingua2);
//
// Element cargaHorariaT = curriculum.addElement(new QName("cargaHorariaT",namespace));
// cargaHorariaT.setText(line.cargaHorariaT);
// Element cargaHorariaTP = curriculum.addElement(new QName("cargaHorariaTP",namespace));
// cargaHorariaTP.setText(line.cargaHorariaTP);
// Element cargaHorariaPL = curriculum.addElement(new QName("cargaHorariaPL",namespace));
// cargaHorariaPL.setText(line.cargaHorariaPL);
// Element cargaHorariaS = curriculum.addElement(new QName("cargaHorariaS",namespace));
// cargaHorariaS.setText(line.cargaHorariaS);
// Element cargaHorariaTC = curriculum.addElement(new QName("cargaHorariaTC",namespace));
// cargaHorariaTC.setText(line.cargaHorariaTC);
// Element cargaHorariaO = curriculum.addElement(new QName("cargaHorariaO",namespace));
// cargaHorariaO.setText(line.cargaHorariaO);
// Element cargaHorariaOT = curriculum.addElement(new QName("cargaHorariaOT",namespace));
// cargaHorariaOT.setText(line.cargaHorariaOT);
//
// Element cargaHorariaTotal = curriculum.addElement(new QName("cargaHorariaTotal",namespace));
// cargaHorariaTotal.setText(line.cargaHorariaTotal);
//
//
//
//
//
//
//
//
//
//
//
//// Dom4jUtil.writeSout(responseDoc);
// System.out.println("");
//
// String path = Globals.TMP_DIR + File.separator + cu.getName() + ".pdf";
// FileOutputStream teste = new FileOutputStream(path);
// Map<String,Object> params = new HashMap<String,Object>();
// params.put("site", Globals.SITE_URL);
// PdfUtils.createPdfFromXml(new 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 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)
// {
// String identifier = repositoryService.storeRepositoryFile(new FileInputStream(path), "application/pdf", "pdf",((int) new File(path).length()), cu.getCode() + ".pdf", "courseunit.program.description" + cu.getName(), ResourceAccessControlEnum.publicDomain,owner);
// cu.setProgramStreamId(identifier);
// }
// else
// {
// repositoryService.updateRepositoryFile(cu.getProgramStreamId(), new FileInputStream(path), "application/pdf", "pdf", ((int)new File(path).length()),cu.getCode() + ".pdf", "courseunit.program.description " + cu.getName(), ResourceAccessControlEnum.publicDomain);
// }
// cu.setObjectives(line.objetivosDaAprendizagem);
// //Obrigar a ser falso
// cu.setValidProgram(valiPrograms);
// }
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
595,7 → 595,20
}
return views;
}
public static List<UserView> getTeacherViews(List<Teacher> users)
{
if(users == null)
return null;
List<UserView> views = new ArrayList<UserView>();
for(User u: users)
{
views.add(new UserView(u));
}
return views;
}
 
 
 
public static Set<User> loadUsers(List<UserView> views)
{
if(views != null)
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitProgramView.java
New file
0,0 → 1,105
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.CourseUnitProgram;
import pt.estgp.estgweb.domain.CourseUnitProgramImpl;
 
import java.io.Serializable;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 19:34:49
* @see pt.estgp.estgweb.domain.views
*/
public class CourseUnitProgramView extends DomainObjectView
{
 
private CourseUnitProgram courseUnitProgram;
 
public Class getReferenceClass()
{
return CourseUnitProgramImpl.class;
}
 
public Serializable getSerializable()
{
return courseUnitProgram.getId();
}
 
public CourseUnitProgramView()
{
}
 
public CourseUnitProgram getCourseUnitProgram() {
return courseUnitProgram;
}
 
public void setCourseUnitProgram(CourseUnitProgram courseUnitProgram) {
this.courseUnitProgram = courseUnitProgram;
}
 
public CourseUnitProgramView(CourseUnitProgram courseUnitProgram)
{
super(courseUnitProgram);
this.courseUnitProgram = courseUnitProgram;
}
 
public void persistViewInObjectTeacher(CourseUnitProgram c)
{
c.getCourseUnitProgramPart2().setAvaliacaoOrdinariosFrequencia(courseUnitProgram.getCourseUnitProgramPart2().getAvaliacaoOrdinariosFrequencia());
c.getCourseUnitProgramPart2().setAvaliacaoOrdinariosExame(courseUnitProgram.getCourseUnitProgramPart2().getAvaliacaoOrdinariosExame());
c.getCourseUnitProgramPart2().setAvaliacaoEspeciaisFrequencia(courseUnitProgram.getCourseUnitProgramPart2().getAvaliacaoEspeciaisFrequencia());
c.getCourseUnitProgramPart2().setAvaliacaoEspeciaissExame(courseUnitProgram.getCourseUnitProgramPart2().getAvaliacaoEspeciaissExame());
 
c.getCourseUnitProgramPart2().setMetodologiasEnsino(courseUnitProgram.getCourseUnitProgramPart2().getMetodologiasEnsino());
c.getCourseUnitProgramPart2().setDemonstracaoObjectivosMetodologia(courseUnitProgram.getCourseUnitProgramPart2().getDemonstracaoObjectivosMetodologia());
 
c.setBibliografia(courseUnitProgram.getBibliografia());
c.setBibliografiaComplementar(courseUnitProgram.getBibliografiaComplementar());
 
c.getCourseUnitProgramPart2().setConteudos(courseUnitProgram.getCourseUnitProgramPart2().getConteudos());
c.getCourseUnitProgramPart2().setDemonstracaoCoerenciaConteudos(courseUnitProgram.getCourseUnitProgramPart2().getDemonstracaoCoerenciaConteudos());
 
}
 
public void persistViewInObjectCoordinator(CourseUnitProgram c)
{
c.getCourseUnitProgramPart2().setObjectivos(courseUnitProgram.getCourseUnitProgramPart2().getObjectivos());
c.setPrerequisitos(courseUnitProgram.getPrerequisitos());
c.setLingua1(courseUnitProgram.getLingua1());
c.setLingua2(courseUnitProgram.getLingua2());
 
c.setEcts(courseUnitProgram.getEcts());
c.setCargaHorariaTotal(courseUnitProgram.getCargaHorariaTotal());
c.setCargaHorariaT(courseUnitProgram.getCargaHorariaT());
c.setCargaHorariaTP(courseUnitProgram.getCargaHorariaTP()) ;
c.setCargaHorariaPL(courseUnitProgram.getCargaHorariaPL());
c.setCargaHorariaTC(courseUnitProgram.getCargaHorariaTC());
c.setCargaHorariaO(courseUnitProgram.getCargaHorariaO());
c.setCargaHorariaS(courseUnitProgram.getCargaHorariaS());
c.setCargaHorariaOT(courseUnitProgram.getCargaHorariaOT());
 
}
 
public void persistViewInObjectAdministrator(CourseUnitProgram c)
{
 
c.getCourseUnitProgramPart2().setObjectivos(courseUnitProgram.getCourseUnitProgramPart2().getObjectivos());
c.setPrerequisitos(courseUnitProgram.getPrerequisitos());
c.setLingua1(courseUnitProgram.getLingua1());
c.setLingua2(courseUnitProgram.getLingua2());
 
c.setEcts(courseUnitProgram.getEcts());
c.setCargaHorariaTotal(courseUnitProgram.getCargaHorariaTotal());
c.setCargaHorariaT(courseUnitProgram.getCargaHorariaT());
c.setCargaHorariaTP(courseUnitProgram.getCargaHorariaTP()) ;
c.setCargaHorariaPL(courseUnitProgram.getCargaHorariaPL());
c.setCargaHorariaTC(courseUnitProgram.getCargaHorariaTC());
c.setCargaHorariaO(courseUnitProgram.getCargaHorariaO());
c.setCargaHorariaS(courseUnitProgram.getCargaHorariaS());
c.setCargaHorariaOT(courseUnitProgram.getCargaHorariaOT());
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
26,6 → 26,8
private String name;
private String code;
private long courseId;
private long coordinatorId;
private long responsableId;
private String courseCode;
private String courseName;
private String semestre;
38,6 → 40,7
private List<CourseUnitSummaryView> summaries;
 
private CourseUnit courseUnit;
private UserView responsableTeacher;
private Set<UserView> teachers;
private Set<UserView> students;
private List<UserView> studentsOrderedByName;
99,6 → 102,10
init(courseUnit, false,false,false,false);
}
 
public CourseUnit getCourseUnit() {
return courseUnit;
}
 
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorUser)
{
this.pathIntranet = courseUnit.getPathIntranet();
110,7 → 117,12
this.importYear = courseUnit.getImportYear();
this.semestre = courseUnit.getSemestre();
this.courseCode = courseUnit.getCourseCode();
this.objectives = courseUnit.getObjectives();
 
// this.objectives = courseUnit.getObjectives(); DEPRECATED
if(courseUnit.getCourseUnitProgram() !=null && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null)
this.objectives = courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos();
else
this.objectives = null;
this.contentsGrants = courseUnit.getContentsGrants();
if(courseUnit.getProgramStreamId() != null)
{
130,6 → 142,7
students = new HashSet<UserView>();
if(initTeachers && courseUnit.getTeachers() != null)
{
responsableTeacher = new UserView(courseUnit.getResponsableTeacher());
for(TeacherImpl t: courseUnit.getTeachers())
{
UserView u = new UserView(t);
151,10 → 164,32
if(courseUnit.getCourse() != null)
{
courseId = courseUnit.getCourse().getId();
if(courseUnit.getCourse().getCoordinator() != null)
coordinatorId = courseUnit.getCourse().getCoordinator().getId();
}
if(courseUnit.getResponsableTeacher() != null)
{
responsableId = courseUnit.getResponsableTeacher().getId();
}
 
}
 
public long getCoordinatorId() {
return coordinatorId;
}
 
public void setCoordinatorId(long coordinatorId) {
this.coordinatorId = coordinatorId;
}
 
public long getResponsableId() {
return responsableId;
}
 
public void setResponsableId(long responsableId) {
this.responsableId = responsableId;
}
 
public long getCourseId()
{
return courseId;
282,7 → 317,13
if(courseId > 0)
{
c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId));
c.setCourseCode(c.getCourse().getCode());
c.setCourseName(c.getCourse().getName());
}
if(responsableId > 0)
{
c.setResponsableTeacher(DaoFactory.getTeacherDaoImpl().load(responsableId));
}
}
 
public String getObjectives()
476,7 → 517,14
this.validatorUser = validatorUser;
}
 
public UserView getResponsableTeacher() {
return responsableTeacher;
}
 
public void setResponsableTeacher(UserView responsableTeacher) {
this.responsableTeacher = responsableTeacher;
}
 
public void setSummaries(List<CourseUnitSummaryView> summaries)
{
this.summaries = summaries;
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitProgramDaoImpl.java
New file
0,0 → 1,23
package pt.estgp.estgweb.domain.dao.impl;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class CourseUnitProgramDaoImpl extends CourseUnitProgramDao
{
private CourseUnitProgramDaoImpl()
{
}
 
public static CourseUnitProgramDaoImpl getInstance()
{
if (myInstance == null)
{
myInstance = new CourseUnitProgramDaoImpl();
}
return (CourseUnitProgramDaoImpl) myInstance;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
1,25 → 1,22
package pt.estgp.estgweb.domain.dao.impl;
 
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.*;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.sql.JoinFragment;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.Globals;
import static org.hibernate.criterion.Restrictions.*;
import static org.hibernate.criterion.Restrictions.eq;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.sql.JoinFragment;
import org.apache.log4j.Logger;
 
import java.util.Collection;
import java.util.List;
import java.util.Set;
 
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
31,6 → 28,7
 
private static final Logger logger = Logger.getLogger(CourseUnitDaoImpl.class);
 
 
private CourseUnitDaoImpl()
{
}
166,6 → 164,38
return null;
}
 
 
public void consistCourseUnitCourseCodes(String importYear)
{
List<CourseUnit> courseUnit = createCriteria()
.add(eq("importYear", importYear)).list();
for(CourseUnit cu: courseUnit)
{
if(cu.getCourse() != null)
{
if(cu.getCourseCode() == null || (cu.getCourseCode() != null && !cu.getCourseCode().equals(cu.getCourse().getCode())))
{
System.out.println("Course code wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseCode() + " now:" + cu.getCourse().getCode() );
}
 
if(cu.getCourseName() == null || (cu.getCourseName() != null && !cu.getCourseName().equals(cu.getCourse().getName())))
{
System.out.println("Course name wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseName() + " now:" + cu.getCourse().getName() );
}
cu.setCourseCode(cu.getCourse().getCode());
cu.setCourseName(cu.getCourse().getName());
}
else
{
cu.setCourseCode("");
cu.setCourseName("");
}
}
}
 
 
//TODO Na actualização de uma cadeira para o curso de TESTE mudar o coursecode para o o coursecode desse curso para nao deixar os dados duplicados e mal
//se nao a carregar unidades vai buscar a errada
public CourseUnit loadBySigesCodeUnique(String sigesCode, String courseCode, String semestre, String year)
{
return (CourseUnit)
210,13 → 240,13
 
public int countCourseUnits(String query, SearchTypeEnum searchType)
{
Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name","code");
return createCriteria().add(c).list().size();
}
 
public List<CourseUnit> search(String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
{
Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name","code");
Criteria criteria = createCriteria();
criteria.add(c)
.addOrder(Order.asc("name"))
345,4 → 375,16
{
return loadMissingProgramValidateGivenCourse(courseId).size();
}
 
 
public List<String> getTeachersEmails(long unit) {
Query q = createQuery("select e.email from "
+ Teacher.class.getName() + " e join e.teachedUnits as unit "
+ " where "
+ " unit.id = ? "
 
);
q.setLong(0,unit);
return q.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitProgramPart2DaoImpl.java
New file
0,0 → 1,23
package pt.estgp.estgweb.domain.dao.impl;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class CourseUnitProgramPart2DaoImpl extends CourseUnitProgramPart2Dao
{
private CourseUnitProgramPart2DaoImpl()
{
}
 
public static CourseUnitProgramPart2DaoImpl getInstance()
{
if (myInstance == null)
{
myInstance = new CourseUnitProgramPart2DaoImpl();
}
return (CourseUnitProgramPart2DaoImpl) myInstance;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
1,6 → 1,5
package pt.estgp.estgweb.domain.dao;
 
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.dao.impl.*;
 
/**
17,8 → 16,19
return JobDaoImpl.getInstance();
}
 
public static CourseUnitSummaryDaoImpl getCourseUnitSummaryDaoImpl()
public static CourseUnitProgramDaoImpl getCourseUnitProgramDaoImpl()
{
return CourseUnitProgramDaoImpl.getInstance();
}
 
 
public static CourseUnitProgramPart2DaoImpl getCourseUnitProgramPart2DaoImpl()
{
return CourseUnitProgramPart2DaoImpl.getInstance();
}
 
public static CourseUnitSummaryDaoImpl getCourseUnitSummaryDaoImpl()
{
return CourseUnitSummaryDaoImpl.getInstance();
}
 
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitProgramPart2Impl.java
New file
0,0 → 1,52
package pt.estgp.estgweb.domain;
 
import java.io.Serializable;
 
/**
* @author Jorge Machado
* @date 8/Jul/2008
* @see pt.estgp.estgweb.domain
*/
public class CourseUnitProgramPart2Impl extends CourseUnitProgramPart2
{
public Serializable getSerializable()
{
return getId();
}
 
 
public CourseUnitProgramPart2Impl() {
setObjectivos("");
setConteudos("");
setDemonstracaoCoerenciaConteudos("");
setMetodologiasEnsino("");
setAvaliacaoOrdinariosFrequencia("");
setAvaliacaoOrdinariosExame("");
setAvaliacaoEspeciaisFrequencia("");
setAvaliacaoEspeciaissExame("");
setDemonstracaoObjectivosMetodologia("");
}
 
public void consistNullValues()
{
if(getObjectivos() == null)
setObjectivos("");
if(getConteudos() == null)
setConteudos("");
if(getDemonstracaoCoerenciaConteudos() == null)
setDemonstracaoCoerenciaConteudos("");
if(getMetodologiasEnsino() == null)
setMetodologiasEnsino("");
if(getAvaliacaoOrdinariosFrequencia() == null)
setAvaliacaoOrdinariosFrequencia("");
if(getAvaliacaoOrdinariosExame() == null)
setAvaliacaoOrdinariosExame("");
if(getAvaliacaoEspeciaisFrequencia() == null)
setAvaliacaoEspeciaisFrequencia("");
if(getAvaliacaoEspeciaissExame() == null)
setAvaliacaoEspeciaissExame("");
if(getDemonstracaoObjectivosMetodologia() == null)
setDemonstracaoObjectivosMetodologia("");
 
}
}
/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java
1,18 → 1,14
package pt.estgp.estgweb.domain;
 
import pt.estgp.estgweb.utils.RoleManager;
import jomm.utils.MessageResources;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.List;
 
import org.apache.log4j.Logger;
 
import javax.servlet.http.HttpServletRequest;
 
import jomm.utils.MessageResources;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
/impl/src/java/pt/estgp/estgweb/filters/filters/CanValidateCourseUnit.java
New file
0,0 → 1,56
package pt.estgp.estgweb.filters.filters;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
 
import java.io.Serializable;
 
public class CanValidateCourseUnit extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(CanValidateCourseUnit.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
ReflectionBean serializableBean = new ReflectionBean((String) filterParameters.parametersArray()[0]);
Object serializableObjectContainer = request.getServiceParameters().getParameter(serializableBean.getName());
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer);
if(serializable != null && serializable instanceof Long && ((Long)serializable).intValue() > 0)
{
CourseUnit courseUnit = (CourseUnit) LoadObjectFromParameters.loadObjectFromClassName(CourseUnit.class.getName(),filterParameters,request.getServiceParameters());
 
 
System.out.println((((UserImpl)userSession.getUser()).isTeacherOfCourseUnit(courseUnit.getId(),true) || DaoFactory.getUserDaoImpl().load(userSession.getUser().getId()).hasRole("services")));
 
if(!(((UserImpl)userSession.getUser()).isTeacherOfCourseUnit(courseUnit.getId(),true) || DaoFactory.getUserDaoImpl().load(userSession.getUser().getId()).hasRole("services")))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
}
/impl/src/java/pt/estgp/estgweb/web/tags/HasNotRoleTag.java
1,14 → 1,13
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.Globals;
 
public class HasNotRoleTag extends BodyTagSupport
{
 
39,7 → 38,20
public boolean go()
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return !(userSession != null && userSession.getUser() != null && userSession.getUser().hasRole(role));
//return !(userSession != null && userSession.getUser() != null && userSession.getUser().hasRole(role));
 
if(userSession == null || userSession.getUser() == null)
return true;
 
 
String[] roles = role.split(",");
for(String role: roles)
{
if(userSession.getUser().hasRole(role))
return false;
}
 
return true;
}
 
public int doEndTag() throws JspException
/impl/src/java/pt/estgp/estgweb/web/utils/RequestUtils.java
1,15 → 1,12
package pt.estgp.estgweb.web.utils;
 
import jomm.utils.BytesUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.domain.UserSessionImpl;
 
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
* @author Jorge Machado
* @date 29/Fev/2008
59,7 → 56,7
 
}*/
// throw new NoCookiesException();
if(request.getSession() != null)
if(request != null && request.getSession() != null)
return request.getSession().getId();
return "unkown";
}
/impl/src/java/pt/estgp/estgweb/web/form/courseunits/CourseUnitProgramForm.java
New file
0,0 → 1,60
package pt.estgp.estgweb.web.form.courseunits;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseUnitProgramImpl;
import pt.estgp.estgweb.domain.CourseUnitProgramPart2Impl;
import pt.estgp.estgweb.domain.views.CourseUnitProgramView;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.web.form.ApplicationForm;
 
/**
* @author Jorge Machado
* @date 2/Jun/2008
* @time 14:28:59
* @see pt.estgp.estgweb.web.form.blogs
*/
public class CourseUnitProgramForm extends ApplicationForm
{
private static final Logger logger = Logger.getLogger(CourseUnitProgramForm.class);
 
CourseUnitProgramView courseUnitProgramView = new CourseUnitProgramView();
CourseUnitView courseUnitView = new CourseUnitView();
long courseUnitId;
 
public CourseUnitProgramForm(CourseUnitProgramView courseUnitProgramView, CourseUnitView courseUnitView, long courseUnitId) {
this.courseUnitProgramView = courseUnitProgramView;
this.courseUnitView = courseUnitView;
this.courseUnitId = courseUnitId;
}
 
public CourseUnitProgramForm()
{
courseUnitProgramView.setCourseUnitProgram(new CourseUnitProgramImpl());
courseUnitProgramView.getCourseUnitProgram().setCourseUnitProgramPart2(new CourseUnitProgramPart2Impl());
 
}
 
public CourseUnitProgramView getCourseUnitProgramView() {
return courseUnitProgramView;
}
 
public void setCourseUnitProgramView(CourseUnitProgramView courseUnitProgramView) {
this.courseUnitProgramView = courseUnitProgramView;
}
 
public CourseUnitView getCourseUnitView() {
return courseUnitView;
}
 
public void setCourseUnitView(CourseUnitView courseUnitView) {
this.courseUnitView = courseUnitView;
}
 
public long getCourseUnitId() {
return courseUnitId;
}
 
public void setCourseUnitId(long courseUnitId) {
this.courseUnitId = courseUnitId;
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAdminController.java
31,9 → 31,9
 
 
public ActionForward createIntranetFolders(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
62,9 → 62,9
}
 
public ActionForward createAllCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
93,38 → 93,38
}
 
public ActionForward createImportYearCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
try
{
String importYear = request.getParameter("importYear");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), "CreateImportYearCourseUnitWorksBackup", args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
String importYear = request.getParameter("importYear");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), "CreateImportYearCourseUnitWorksBackup", args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
 
 
public ActionForward createOrUpdateAdmin(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
197,9 → 197,9
}
 
public ActionForward addTeacher(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
236,9 → 236,9
}
 
public ActionForward addStudent(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
275,9 → 275,9
}
 
public ActionForward removeTeacher(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
312,9 → 312,9
}
 
public ActionForward removeStudent(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
362,6 → 362,33
return mapping.findForward("load");
}
 
public ActionForward delete(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
try {
// long id = Long.parseLong(request.getParameter("id"));
// IServiceManager sm = null;
// sm = ServiceManager.getInstance();
// String[] names = new String[]{};
// Object[] args = new Object[]{id};
 
// sm.execute(RequestUtils.getRequester(request, response), "DeleteCourseUnit", args, names);
 
// addMessage(request,"courseunit.removed");
logger.info("Não implementado por razoes de segurança");
addMessage(request,"courseunit.security.not.implemented");
} catch (Throwable e) {
addMessage(request,"error.500");
logger.error(e,e);
}
 
return mapping.getInputForward();
}
 
public ActionForward search(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
396,4 → 423,6
 
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java
1,28 → 1,26
package pt.estgp.estgweb.web.controllers.courseunits;
 
import org.apache.log4j.Logger;
import org.apache.log4j.RollingFileAppender;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.upload.FormFile;
import org.hibernate.ObjectNotFoundException;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnitProgramImpl;
import pt.estgp.estgweb.domain.CourseUnitProgramPart2Impl;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.controllers.blogs.BlogsController;
import pt.estgp.estgweb.web.controllers.profile.ProfileController;
import pt.estgp.estgweb.web.controllers.blogs.BlogsController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitProgramForm;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.web.form.profile.ProfileForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.services.profile.CurriculumService;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException;
80,23 → 78,23
}
}
public ActionForward createUserAllCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
String[] args = new String[]{};
String[] args = new String[]{};
return createBackup("CreateUserAllCourseUnitWorksBackup",args,mapping,form,request,response);
}
 
public ActionForward createUserCourseUnitActualYearWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
String importYear = request.getParameter("importYear");
String[] args = new String[]{importYear};
String[] args = new String[]{importYear};
return createBackup("CreateUserImportYearCourseUnitWorksBackup",args,mapping,form,request,response);
}
 
130,7 → 128,28
}
}
 
private CourseUnitView loadCourseUnitViewAndCourse(long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{id,initTeachers,initStudents,false,true};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitViewAndCourse", args, names);
return cV;
}
catch (ExecutedFilterException e)
{
if (e.getCause() instanceof ObjectNotFoundException)
{
throw new NotFoundException(e.getCause().toString());
}
throw e;
}
}
 
 
public ActionForward load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
353,6 → 372,90
}
}
 
 
public ActionForward editProgram(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitProgramForm cUF = (CourseUnitProgramForm) form;
 
long id = cUF.getCourseUnitId();
 
 
CourseUnitView cV = loadCourseUnitViewAndCourse(id,true,false, mapping, request, response);
 
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
CourseUnitProgramView cpv;
if(cV.getCourseUnit().getCourseUnitProgram() == null)
cpv = new CourseUnitProgramView(new CourseUnitProgramImpl());
else
cpv = new CourseUnitProgramView(cV.getCourseUnit().getCourseUnitProgram());
// request.setAttribute("CourseUnitProgramView", cpv);
 
if(cpv.getCourseUnitProgram().getCourseUnitProgramPart2() == null)
cpv.getCourseUnitProgram().setCourseUnitProgramPart2(new CourseUnitProgramPart2Impl());
 
cUF.setCourseUnitProgramView(cpv);
cUF.setCourseUnitView(cV);
return mapping.findForward("edit.program");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward saveProgram(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitProgramForm cUF = (CourseUnitProgramForm) form;
 
long id = cUF.getCourseUnitId();
CourseUnitProgramView cuV = cUF.getCourseUnitProgramView();
 
IServiceManager sm = ServiceManager.getInstance();
Object[] args = new Object[]{cuV, id};
sm.execute(RequestUtils.getRequester(request, response), "SaveCourseUnitProgram", args);
CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
return mapping.findForward("load");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward validateInvalidateAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
709,39 → 812,39
}
}
public ActionForward loadContents(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
return loadCourseUnitIntranet(Globals.INTRANET_CONTENTS,"courseLayoutIOnlineContents",mapping,form,request,response);
}
 
public ActionForward loadRoot(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
return loadCourseUnitIntranet(Globals.INTRANET_ROOT,"courseLayoutIOnlineContents",mapping,form,request,response);
}
 
public ActionForward loadGrades(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
return loadCourseUnitIntranet(Globals.INTRANET_GRADES,"courseLayoutIOnlineGrades",mapping,form,request,response);
}
public ActionForward loadPresences(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
return loadCourseUnitIntranet(Globals.INTRANET_PRESENCES,"courseLayoutIOnlinePresences",mapping,form,request,response);
/impl/src/doc/revisoes/Revisao1Marco2013
New file
0,0 → 1,81
 
 
Actualização: Baco versão 5.0.1 de 1 de Março de 2013
Autor: Jorge Machado
 
1 - Objectivos:
 
Formulario de edição de unidades curriculares
 
2 - Alterações efectuadas:
 
2.1 - Actualizações ao software existente
 
- Pesquisa de Unidades Curriculares nos serviços pesquisa também por código SIGES da unidade
- Actualizar unidade curricular nos serviços faz uma verificação de consistencia ao código do curso atribuido
cruzando-o com o código do curso expresso na própria unidade de forma a ficarem equivalentes
- Listagem de estudantes na edição da unidade curricular vem ordenada por numero de estudante
- A barra de navegação apresentada quando se entra na página inicial de uma unidade apresenta o seu semestre.
- A importação dos Exceis deixa de colocar o professor responsável como professor da unidade e passa a coloca-lo apenas como professor responsável
- A unidade curricular passa a ter no modelo de dados um professor responsável que é apresentado
na página inicial da unidade curricular
- A página da unidade curricular passa a ter atalhos para a edição de dados da unidade e do curso
disponiveis apenas a administradores
- A página de edição de dados de unidades curriculares passa a ter atalhos para a página da unidade
e para a edição da ficha curricular
 
2.2 - Novidades
 
Nos serviços procurando por curso ou por unidade curricular:
- As unidades curriculares têm um professor responsável
- Os cursos têm um presidente de departamento editavel na edição de dados de curso disponivel nos serviços
- Os cursos têm um coordenador editavel na edição de dados de curso disponivel nos serviços
 
2.3 Processo de Validação de Fihas Curriculares
 
O processo de validação de fichas curriculares consiste no ciclo de vida da entidade e acções
que podem ser efectuadas em cada um desses estados, bem como acções resultantes dessas mudanças
de estado. Os estados e as acções envolvem actores do universo da ESTG correpondentes aos seguintes
papeis institucionais:
 
1 - Docente
2 - Comissão de Curso
3 - Coordenador de Curso
4 - Administrador de Sistema
 
O ciclo de vida da entidade Ficha Curricular tem 3 estados.
 
1 - Ficha Importada da base de dados inicial
2 - Ficha Válida
3 - Ficha Inválida
 
O primeiro estado ficará obsoleto e não voltará a ser usado após a primeira fase.
O digrama seguinte demonstra esse ciclo de vida e suas eventos de entrada e saida.
 
A ficha só pode ser editada pelo docente e coordenador e apenas quando se encontra
não validada. Neste cenário a ficha encontra-se marcada como não validada pela comissão
de curso quer na página da unidade quer dentro do PDF gerado automáticamente.
 
A ficha curricular está dividida em duas partes. Uma das partes é editável pelo docente
a outra pelo coordenador. Os administradores de sistema podem sempre editar a ficha
dando origem a uma nova versão da mesma. A ficha mantém o estado que tinha no caso
da edição ser administrativa.
 
Apenas a comissão de curso pode validar/invalidar uma ficha tornando-a editável ou
não editável por parte dos docentes e coordenadores.
 
Os membros da comissão de curso verão uma notificação de fichas por validar na sua
area de trabalho da intranet quando existirem fihas nesse estado.
 
 
 
todos:
 
- Permissão de edição.
- Marca de água
- Confirmar que o Administrador pode editar mesmo que validada
- Notificação ao docente e coordenador.