/branches/v3/impl/importRoutines.xml |
---|
125,4 → 125,13 |
<target name="loadSummariesAtsi"> |
<java classname="pt.estgp.estgweb.services.sigesimports.LoadSumariesToPDF" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/> |
</target> |
<target name="updateCourseDepartments"> |
<java classname="pt.estgp.estgweb.services.courses.UpdateDepartmentsTask" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/> |
</target> |
<target name="generateFreshJsonPlanosEstudosFromXml"> |
<java classname="pt.estgp.estgweb.services.courses.CoursesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/> |
</target> |
</project> |
/branches/v3/impl/local-exampleNotInUse.properties |
---|
2,6 → 2,8 |
## Properties file to be used with ant build.xml |
## |
env.JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home |
##database configuration |
database.host=localhost |
database.port=3306 |
/branches/v3/impl/conf/language/MessageResources.properties |
---|
10,7 → 10,13 |
#errors.suffix=</LI> |
#errors.footer=</UL> |
errors.header=<div class="web-messages"> |
errors.header.for.json=<div class=\\"web-messages\\"> |
errors.prefix.for.json=<div class=\\"alert alert-warning\\"> |
errors.suffix.for.json=</div> |
errors.footer.for.json=</div> |
errors.header=<script>alert('Existem erros ou avisos, verifique a lista');</script><div class="web-messages"> |
errors.prefix=<div class="alert alert-warning"> |
errors.suffix=</div> |
errors.footer=</div> |
387,8 → 393,8 |
authenticate.blocked=O seu usuário está bloqueado pelo sistema. Para mais informações contacte o Centro Informático. |
username=Nome de Utilizador |
password=Palavra Passe |
username.pae=Número de Aluno/Docente |
password.pae=Palavra Passe ou Número do Cartão de Cidadão (BI) |
username.pae=<label class="label label-primary" style="font-size:1.2em">Número de Aluno / Docente (USERNAME NETPA)</label> |
password.pae=<label class="label label-info" style="font-size:1.2em">Número</label> do <label class="label label-info" style="font-size:1.2em">Cartão de Cidadão</label> <label class="label label-info" style="font-size:1.2em">ou bilhete de identidade</label> |
password.again=Repita a password |
submit=Entrar |
edit=Editar |
422,6 → 428,14 |
see.more=Ver mais |
questionario.email.subject=Por favo preencha o assunto |
questionario.email.from.email=Por favor preencha o email que quer que apareça como remetente |
questionario.email.from.person=Por favor preencha a pessoa ou a entidade ou orgão que quer que apareça como remetente |
questionario.email.message=Por favor preencha uma mensagem |
questionario.send.message.top.nav=Envio de Mensagem de Correio Eletronico aos Inquiridos |
#Cursos |
587,6 → 601,8 |
targetService.pt.estgp.estgweb.services.sigesimports.GenerateCourseUnitProgramsService=Gerar PDF's Fichas Curriculares |
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService=Selecção de Cursos Questionários |
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.AssignAnswersJobService=Atribuição de Respostas a Questionários |
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.TeachersAnswersProcessor=Atribuição de Respostas a Questionários de Docentes |
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.AnswersAlunosProcessor=Atribuição de Respostas a Questionários de Alunos |
targetService.pt.estgp.estgweb.services.courses.CourseUnitsStatisticsJobService=Gerar Estatisticas Unidades Curriculares |
1057,6 → 1073,8 |
course.studies.plan=Plano de Estudos |
course.studies.plan.users=Plano de Estudos |
course.studies.plan.not.available=Não disponivel |
course.studies.plan.saved=Plano de Estudos Salvo com Sucesso |
course.studies.plan.cloned=Plano de Estudos Clonado com Sucesso |
course.courseunit.program.objectives.todo={0} Unidades em Falta (Ficha) |
course.externalSite=Site Externo |
#course.studies.plan=Plano de Estudos |
1140,6 → 1158,9 |
course.list=Listagem de Cursos |
course.course.units=Listagem de Unidades Curriculares |
course.admin.studyplans=Administração de Planos de Estudo |
course.studies.plan.added=Plano de estudos adicionado, por favor edite para completar |
course.admin.studyplans.edit=Edição de Plano de Estudos |
################################################################################ |
# |
# COURSE UNITS MESSAGE RESOURCES |
1562,6 → 1583,15 |
task.param.JOB_questionario_courseList_KEY=Lista de Cursos |
task.param.JOB_questionario_id_KEY=Questionário ID |
events.manage.events=Administrar classes de eventos |
events.my.events=Gerir as minhas classes de eventos |
events.my.events.add.formacao=Adicionar Formação |
events.my.events.add.generic=Adicionar Evento Genérico |
event.name=Nome da Classe |
event.managerRole=Papel de gestão |
event.permited.types=Tipos Permitidos |
################################################################################ |
# |
# Manage Identifiers MESSAGE RESOURCES |
1785,6 → 1815,7 |
# |
################################################################################ |
error.questionario.com.respostas.nao.pode.efetuar.op=Operação não permitida, Existem Respostas |
error.questionario.p.without.group=Verifique a pergunta {0} nao tem grupo |
error.questionario.group.without.p=Verifique o grupo {0} nao tem pergunta |
warn.questionario.repeated.in.time=Aviso: Já existe um questionário ({0}) nesse ano e semestre na categoria histórica escolhida |
1797,8 → 1828,12 |
questionarios.courses.start=Atribuição de Cursos Iniciada |
questionarios.answers.start=Atribuição de Respostas Iniciada |
questionario.tipologias.update.success=Tipologias atualizadas com sucesso |
questionario.resposta=Resposta a Questionário |
questionario.resposta.com.sucesso=A sua resposta foi submetida com sucesso ao nosso sistema de avaliação. Obrigado |
questionario.respostas.grupos.1.2.3=Os grupos 1 2 e 3 são obrigatórios por favor responda às questões. Obrigado. |
################################################################################ |
# |
# REMINDERS MESSAGE RESOURCES |
1896,10 → 1931,19 |
questionario.state.PROCESSING_OLAP=Gerando Cubos OLAP |
questionario.state.OLAP=Cubos OLAP Terminados |
questionario.state.START=Afetações Inicio |
questionario.state.YEAR_SEMESTRE_ASSIGNED=Ano e Semestre Atribuido |
questionario.state.ASSIGNING_COURSES=Atribuindo Cursos |
questionario.state.COURSES_ASSIGNED=Cursos Atribuidos |
questionario.state.ASSIGNING_ANSWERS=Atribuindo Respostas Candidatas |
questionario.state.ANSWERS_ASSIGNED=Respostas Candidatas Atribuidas |
questionario.state.FINNISHED_ANSWERS_GENERATING=Terminadas as Afetações |
questionario.historydrive=Categoria Histórica |
questionario.answerprocessor=Processador de Respostas |
# SERVICE ZONE |
survey.admin=Administração do Questionário {0} |
survey.see=Acompanhar Questionário {0} |
surveys=Questionários |
survey.newEdit.survey=Formulário do Questionário |
survey.create.survey=Criar Questionário |
/branches/v3/impl/conf/WEB-INF/struts/struts-courses.xml |
---|
8,6 → 8,7 |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.courses.CourseForm" name="CourseForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm" name="CourseStudiesPlansAdminForm"/> |
</form-beans> |
<global-exceptions> |
100,7 → 101,23 |
<!--Studies Plans--> |
<action path="/user/adminStudyPlans" forward="page.admin.course.studyplans"/> |
<action path="/user/adminStudyPlansEdit" forward="page.admin.course.studyplans.edit"/> |
<action path="/user/courseControllerStudiesPlan" |
type="pt.estgp.estgweb.web.controllers.courses.CoursesController" |
name="CourseStudiesPlansAdminForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.welcome"> |
<forward name="loadstudyplans" path="page.admin.course.studyplans"/> |
<forward name="adminStudyPlans" path="page.admin.course.studyplans"/> |
<forward name="editStudyPlan" path="page.admin.course.studyplans.edit"/> |
</action> |
</action-mappings> |
</struts-config> |
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae-questionarios.xml |
---|
13,6 → 13,12 |
<put name="body" value="/user/questionarios/questionariosList.jsp"/> |
</definition> |
<definition name="page.pae.see.questionarios" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/topnavQuestionarioList.jsp"/> |
<put name="body" value="/user/questionarios/questionariosSee.jsp"/> |
</definition> |
<definition name="page.pae.questionario.newEdit" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/topnavQuestionarioNewEdit.jsp"/> |
26,6 → 32,20 |
</definition> |
<definition name="page.pae.questionario.see" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/topnavQuestionarioSee.jsp"/> |
<put name="body" value="/user/questionarios/pedagogicoEstudante/questionarioDashBoard.jsp"/> |
</definition> |
<definition name="page.pae.questionario.pedagogico.message" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoSendMessage.jsp"/> |
<put name="body" value="/user/questionarios/pedagogicoEstudante/sendMessageQuestionarioRequisitados.jsp"/> |
</definition> |
<!-- Modulo do Pedagogico Estudantes --> |
<definition name="page.pae.questionario.courses.selection" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
44,4 → 64,11 |
</definition> |
<definition name="page.pae.questionario.resposta.questionario" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/topnavQuestionarioResposta.jsp"/> |
<put name="body" value="/user/questionarios/respostaQuestionario.jsp"/> |
</definition> |
</tiles-definitions> |
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-eventos.xml |
---|
New file |
0,0 → 1,94 |
<?xml version="1.0" encoding="UTF-8"?> |
<!--<!DOCTYPE struts-config PUBLIC--> |
<!--"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"--> |
<!--"http://struts.apache.org/dtds/struts-config_1_3.dtd">--> |
<struts-config> |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.events.EventClassForm" name="EventClassForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.events.MyEventGenericForm" name="MyEventGenericForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.events.MyEventFormacoesForm" name="MyEventFormacoesForm"/> |
</form-beans> |
<global-exceptions> |
</global-exceptions> |
<global-forwards> |
</global-forwards> |
<action-mappings> |
<!-- Start Pages --> |
<!--PUBLIC--> |
<action path="/eventSubscription" forward="page.pae.events.subscribe"/> |
<action path="/user/startManageEventsClass" forward="page.pae.events.classes"/> |
<action path="/user/startManageMyEvents" forward="page.pae.my.events"/> |
<action path="/user/submitEventClass" |
type="pt.estgp.estgweb.web.controllers.events.EventsController" |
name="EventClassForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.pae.events.classes"> |
<forward name="jsonOk" path="page.pae.events.json.ok"/> |
<forward name="jsonErrors" path="page.pae.events.json.errors"/> |
</action> |
<action path="/user/submitEventClassAjax" |
type="pt.estgp.estgweb.web.controllers.events.EventsController" |
name="EventClassForm" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.events.json.errors"> |
<forward name="jsonOk" path="page.pae.events.json.ok"/> |
<forward name="jsonErrors" path="page.pae.events.json.errors"/> |
</action> |
<action path="/user/startSubmitEventFormacoes" forward="page.pae.events.add.formacoes"/> |
<action path="/user/submitEventFormacoes" |
type="pt.estgp.estgweb.web.controllers.events.EventsController" |
name="MyEventFormacoesForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.pae.events.add.formacoes"> |
<forward name="ok" path="page.pae.my.events"/> |
<forward name="errors" path="page.pae.events.add.formacoes"/> |
</action> |
<action path="/user/startSubmitEventGeneric" forward="page.pae.events.add.generic"/> |
<action path="/user/submitEventGeneric" |
type="pt.estgp.estgweb.web.controllers.events.EventsController" |
name="MyEventFormacoesForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.pae.events.add.generic"> |
<forward name="ok" path="page.pae.my.events"/> |
<forward name="errors" path="page.pae.events.add.generic"/> |
</action> |
</action-mappings> |
</struts-config> |
/branches/v3/impl/conf/WEB-INF/struts/tiles-courses.xml |
---|
113,4 → 113,20 |
<put name="body" value="/user/contacts/listCourseComissionStudents.jsp"/> |
</definition> |
<!--Studies Plans--> |
<definition name="page.admin.course.studyplans" extends="base.separators.semleft"> |
<put name="title" value="Administração de Planos de Estudos"/> |
<put name="topnav" value="/user/courses/topnavPlansAdminFromCourseEdit.jsp"/> |
<put name="body" value="/user/courses/studiesPlansAdministration.jsp"/> |
</definition> |
<definition name="page.admin.course.studyplans.edit" extends="base.separators.semleft"> |
<put name="title" value="Edição de Planos de Estudos"/> |
<put name="topnav" value="/user/courses/topnavPlanEditFromCourseEdit.jsp"/> |
<put name="body" value="/user/courses/studiesPlansAdministrationEdit.jsp"/> |
</definition> |
</tiles-definitions> |
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae-eventos.xml |
---|
New file |
0,0 → 1,51 |
<?xml version="1.0" encoding="UTF-8" ?> |
<!DOCTYPE tiles-definitions PUBLIC |
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" |
"http://struts.apache.org/dtds/tiles-config_1_1.dtd"> |
<tiles-definitions> |
<!--PUBLIC--> |
<definition name="page.pae.events.subscribe" extends="base.definition.pae.public"> |
<put name="body" value="/user/events/registoEventos.jsp"/> |
</definition> |
<!--SERVICES PAGES--> |
<definition name="page.pae.events.classes" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/events/topnavManageEventsClasses.jsp"/> |
<put name="body" value="/user/events/manageEventsClasses.jsp"/> |
</definition> |
<definition name="page.pae.my.events" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/events/topnavMyEvents.jsp"/> |
<put name="body" value="/user/events/myEvents.jsp"/> |
</definition> |
<definition name="page.pae.events.add.formacoes" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/events/topnavMyEventsAddFormacoes.jsp"/> |
<put name="body" value="/user/events/addEventFormacoes.jsp"/> |
</definition> |
<definition name="page.pae.events.add.generic" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/events/topnavMyEventsAddGeneric.jsp"/> |
<put name="body" value="/user/events/addEventGeneric.jsp"/> |
</definition> |
<!--Layout para AJAX REQUEST RESPONSE no caso de ter de voltar a apresentar o resultado na modal--> |
<definition name="page.pae.events.json.ok" extends="base.empty.json"> |
<put name="body" value="/user/events/jsonSubmitOk.jsp"/> |
</definition> |
<definition name="page.pae.events.json.errors" extends="base.empty.json"> |
<put name="body" value="/user/events/jsonSubmitErrors.jsp"/> |
</definition> |
</tiles-definitions> |
/branches/v3/impl/conf/WEB-INF/struts/struts-pae.xml |
---|
27,7 → 27,7 |
<!-- Start Pages --> |
<action path="/WelcomePedagogicSurvey" forward="page.welcome.pedagogic.survey"/> |
<action path="/WelcomePedagogicSurvey" forward="page.welcome.pae"/> |
<!--Authentication--> |
37,9 → 37,9 |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.welcome.pedagogic.survey"> |
input="page.welcome.pae"> |
<forward name="success" path="page.pae.separators.home"/> |
<forward name="logout" path="page.welcome.pedagogic.survey"/> |
<forward name="logout" path="page.welcome.pae"/> |
<forward name="firstTimeAuthenticate" path="page.pae.separators.home"/> |
</action> |
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae.xml |
---|
7,14 → 7,22 |
<tiles-definitions> |
<definition name="base.definition.pedagogicSurvey.public" path="/layout/layoutpedagogicsurveypublic.jsp"> |
<definition name="base.definition.pae.public" path="/layout/layoutpaepublic.jsp"> |
<put name="title" value="x"/> |
<put name="header" value="/layout/header.jsp"/> |
<put name="footer" value="/layout/footer.jsp" /> |
</definition> |
<definition name="base.definition.pae.auth" path="/layout/layoutpaeauth.jsp"> |
<put name="title" value="x"/> |
<put name="header" value="/layout/header.jsp"/> |
<put name="footer" value="/layout/footer.jsp" /> |
</definition> |
<definition name="page.welcome.pedagogic.survey" extends="base.definition.pedagogicSurvey.public"> |
<definition name="page.welcome.pae" extends="base.definition.pae.auth"> |
<put name="body" value="/auth/index.jsp" /> |
</definition> |
/branches/v3/impl/conf/WEB-INF/struts/struts-default.xml |
---|
213,7 → 213,8 |
/WEB-INF/struts/tiles-configuration.xml, |
/WEB-INF/struts/tiles-pagecontent.xml, |
/WEB-INF/struts/tiles-pae.xml, |
/WEB-INF/struts/tiles-pae-questionarios.xml"/> |
/WEB-INF/struts/tiles-pae-questionarios.xml, |
/WEB-INF/struts/tiles-pae-eventos.xml"/> |
</plug-in> |
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-questionarios.xml |
---|
9,6 → 9,8 |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" name="QuestionarioForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm" name="QuestionarioRespostaForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" name="QuestionarioMessage"/> |
</form-beans> |
<global-exceptions> |
32,10 → 34,14 |
<action path="/user/startNewQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=startNew"/> |
<action path="/user/listQuestionarios" forward="page.pae.questionario.list"/> |
<action path="/user/seeQuestionarios" forward="page.pae.see.questionarios"/> |
<action path="/user/adminQuestionario" forward="page.pae.questionario.admin"/> |
<action path="/user/seeQuestionario" forward="page.pae.questionario.see"/> |
<action path="/user/formQuestionariosPae" forward="/user/questionariosPaeNoValidation.do?dispatch=form"/> |
<action path="/user/deleteQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=deleteQuestionario"/> |
<action path="/user/startRespostaQuestionario" forward="page.pae.questionario.resposta.questionario"/> |
<action path="/user/questionariosPaeStartAfectacoes" forward="/user/questionariosPaeNoValidation.do?dispatch=startAfetacoes"/> |
<action path="/user/questionariosPaeNoValidation" |
74,11 → 80,47 |
<forward name="admin" path="page.pae.questionario.admin"/> |
</action> |
<action path="/user/questionariosPaeResposta" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioYearSemestreController" |
name="QuestionarioRespostaForm" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.questionario.resposta.questionario"> |
<forward name="success" path="page.pae.separators.home"/> |
</action> |
<action path="/user/startQuestionariosPaeMessagePedagogico" forward="page.pae.questionario.pedagogico.message"/> |
<!--<action path="/user/startQuestionariosPaeMessageXPTO" forward="page.pae.questionario.XPTO.message"/>--> |
<action path="/user/questionariosPaeMessagePedagogico" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController" |
name="QuestionarioMessage" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.questionario.pedagogico.message"> |
<forward name="success" path="page.pae.questionario.see"/> |
<forward name="seeAll" path="page.pae.see.questionarios"/> |
</action> |
<!--Outros no futuro |
<action path="/user/questionariosPaeMessageXpto" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController" |
name="QuestionarioMessage" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.questionario.XPTO.message"> |
<forward name="success" path="page.pae.questionario.see.XPTO"/> |
</action> |
--> |
<!--%%%%%%%%%%%%%%%% Pedagogico Alunos Modulo %%%%%%%%%%%%%%%%%%%--> |
<action path="/user/questionarioPedagogicoStartChooseCourses" forward="page.pae.questionario.courses.selection"/> |
<action path="/user/questionarioPedagogicoStartCheckCourses" forward="page.pae.questionario.courses.check"/> |
<action path="/user/questionarioPedagogicoStartAssignAnswers" forward="page.pae.questionario.assign.answers"/> |
<action path="/user/questionariosPaeSelectCourses" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioCourseSelectionController" |
name="QuestionarioForm" |
/branches/v3/impl/conf/WEB-INF/tlds/jomm.tld |
---|
58,6 → 58,10 |
<tagclass>jomm.web.tags.MessagesTag</tagclass> |
</tag> |
<tag> |
<name>errorsForJson</name> |
<tagclass>jomm.web.tags.ErrorsForJsonTag</tagclass> |
</tag> |
<tag> |
<name>notEqualBeans</name> |
<tagclass>jomm.web.tags.NotEqualBeansTag</tagclass> |
<attribute> |
/branches/v3/impl/conf/WEB-INF/tlds/baco.tld |
---|
60,6 → 60,20 |
</attribute> |
</tag> |
<tag> |
<name>hasRolePrefix</name> |
<tagclass>pt.estgp.estgweb.web.tags.HasRolePrefixTag</tagclass> |
<attribute> |
<name>role</name> |
<required>true</required> |
<rtexprvalue>true</rtexprvalue> |
</attribute> |
<attribute> |
<name>rolePrefix</name> |
<required>true</required> |
<rtexprvalue>true</rtexprvalue> |
</attribute> |
</tag> |
<tag> |
<name>hasNotRole</name> |
<tagclass>pt.estgp.estgweb.web.tags.HasNotRoleTag</tagclass> |
<attribute> |
/branches/v3/impl/conf/WEB-INF/web.xml |
---|
160,6 → 160,12 |
<!----> |
<!--SERVLETS--> |
<servlet> |
<servlet-name>WsJson</servlet-name> |
<servlet-class>pt.estgp.estgweb.web.json.JsonHandler</servlet-class> |
</servlet> |
<!--SOAP Tutorial--> |
<servlet> |
<servlet-name>ws</servlet-name> |
170,6 → 176,7 |
</servlet> |
<!--SOAP Tutorial--> |
<servlet> |
<servlet-name>action</servlet-name> |
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> |
199,7 → 206,8 |
/WEB-INF/struts/struts-configuration.xml, |
/WEB-INF/struts/struts-pagecontent.xml, |
/WEB-INF/struts/struts-pae.xml, |
/WEB-INF/struts/struts-pae-questionarios.xml |
/WEB-INF/struts/struts-pae-questionarios.xml, |
/WEB-INF/struts/struts-pae-eventos.xml |
</param-value> |
</init-param> |
<init-param> |
308,6 → 316,11 |
</servlet-mapping> |
<servlet-mapping> |
<servlet-name>WsJson</servlet-name> |
<url-pattern>/wsjson/api</url-pattern> |
</servlet-mapping> |
<servlet-mapping> |
<servlet-name>ws</servlet-name> |
<url-pattern>/ws/siges</url-pattern> |
</servlet-mapping> |
/branches/v3/impl/conf/app.properties |
---|
17,9 → 17,11 |
user.session.timeout.minutes=60 |
site.url=@site.url@ |
#USAR APENAS ESTES DOIS EMAILS NAO DA PARA MAIS |
admin.email=ci@estgp.pt |
admin.email.2=jmachado@estgp.pt |
admin.email=@admin.email.1@ |
admin.email.2=@admin.email.2@ |
email.local.suffix.1=estgp.pt |
email.local.suffix.2=esae.pt |
28,14 → 30,19 |
email.local.suffix=estgp.pt |
email.server=smtp.gmail.com |
email.server=@email.server@ |
##If RoundRobin is false will use email.from property in from address |
email.use.round.robin=@email.use.round.robin@ |
email.use.security=@email.use.security@ |
#to use example: bacodev1@estgp.pt bacodev2@estgp.pt |
email.user.prefix=bacodev |
email.user.sufix=@estgp.pt |
email.user.count=10 |
email.user.prefix=@email.user.prefix@ |
email.user.sufix=@email.user.sufix@ |
email.user.count=@email.user.count@ |
email.user=bacodev@estgp.pt |
email.password=@email.password@ |
email.from=bacodev@estgp.pt |
email.from=@email.from@ |
email.templates.dir=@email.templates.dir@ |
#email.server.security= |
#email.server.security=SSL |
431,6 → 438,37 |
siges.degree.16=C |
siges.degree.17=O |
#SEE ALSO IN MESSAGE_RESOURCES.properties for WEB Pages |
#Here is used for API JSON Services |
# see apijson in web folder Mestrados,PosGraduacoes,CET,CTeSP or none for all |
course.B=Bacharelatos |
course.L=Licenciaturas |
course.M=Mestrados |
course.P=PosGraduacoes |
course.E=CET |
course.C=AccoesdeFormacaodeCurtaDuracao |
course.A=FormacoesAvancadas |
course.O=OutrasFormacoes |
course.T=CTeSP |
course.D=DiplomadeEstudosSuperioresEspecializados |
course.H=Doutoramento |
course.Z=Desconhecido |
course.inverse.Bacharelatos=B |
course.inverse.Licenciaturas=L |
course.inverse.Mestrados=M |
course.inverse.PosGraduacoes=P |
course.inverse.CET=E |
course.inverse.AccoesdeFormacaodeCurtaDuracao=C |
course.inverse.FormacoesAvancadas=A |
course.inverse.OutrasFormacoes=O |
course.inverse.CTeSP=T |
course.inverse.DiplomadeEstudosSuperioresEspecializados=D |
course.inverse.Doutoramento=H |
course.inverse.Desconhecido=Z |
parameterSchoolEnumValues","ESTG,ESECS,ESS,ESAE or none for all |
siges.degree.unknown=Z |
# DONT USE ANY MORE NOW IS IN CONFIGURATION DAO national.institution.code=3122 |
674,6 → 712,8 |
#if set url in baco separators will allays be enabled |
#mode.pae.enabled=false |
#system.theme=estg |
#system.redirections.policy.index.welcome=welcome |
#system.redirections.policy.authentication.action=/authenticate.do |
682,20 → 722,23 |
#authentication.policy.password.msg.key=password |
#system.theme=ipp |
#mode.pae.enabled=true |
#system.redirections.policy.index.welcome=welcomePedagogicSurvey |
#system.redirections.policy.authentication.action=/authenticatePae.do |
#authentication.policy.service=AuthenticatePae |
#authentication.policy.username.msg.key=username.pae |
#authentication.policy.password.msg.key=password.pae |
mode.pae.enabled=@mode.pae.enabled@ |
system.theme=@system.theme@ |
authentication.policy.service=@authentication.policy.service@ |
authentication.policy.username.msg.key=@authentication.policy.username.msg.key@ |
authentication.policy.password.msg.key=@authentication.policy.password.msg.key@ |
system.redirections.policy.index.welcome=@system.redirections.policy.index.welcome@ |
system.redirections.policy.authentication.action=@system.redirections.policy.authentication.action@ |
system.redirections.policy.authentication.logout.action=@system.redirections.policy.authentication.logout.action@ |
system.mail.standard.certificated.home.page=@system.mail.standard.certificated.home.page@ |
###AQUI PODEMOS USAR OU TRA INTRANET OU OUTRO PORTAL PUBLICO |
system.intranet.url=@system.intranet.url@ |
system.public.url=@system.public.url@ |
720,11 → 763,16 |
institution.code.prefix.1=ESTG |
institution.code.prefix.2=ESAE |
institution.code.prefix.3=ESE |
institution.code.prefix.3=ESECS |
institution.code.prefix.4=ESS |
institution.code.prefix.5=ESE PG |
institution.code.prefix.6=IPP |
institution.code.prefix.inverse.ESTG=1 |
institution.code.prefix.inverse.ESAE=2 |
institution.code.prefix.inverse.ESECS=3 |
institution.code.prefix.inverse.ESS=4 |
#InstitutionCodes to choose institution in processement |
#in ohter cenarios we can change the values |
#for the institutionCode used in SIGES |
833,5 → 881,54 |
siges.summaries.prelancado.code=4 |
####TIPOS DE ALUNO EXTRAIDOS A 8 de Junho de 2016 |
#1 Normal |
#2 Bolseiro |
#3 Militar |
#4 Trabalhador Estudante |
#5 Internacional |
#6 Dirigente Associativo |
#7 Atleta de Alta Competição |
#8 Kids / Teens (Clic) |
#9 Palop |
#10 Individual (Clic) |
#11 Deficientes |
#12 Mães e Pais Estudantes |
#13 Regular 75h (Clic) |
#14 Conversação (Clic) |
#15 Grupo (Clic) |
#16 Bombeiro |
#23 Normal (a) |
#24 Intensivo 30h (Clic) |
#25 Intensivo 20h (Clic) |
#17 Tempo Parcial |
#18 Intensivo 12h (Clic) |
#22 Reprovado |
#19 Regular 45h (Clic) |
#26 Intensivo 10h (Clic) |
#27 Regular 60h (Clic) |
#28 Intensivo 22h (Clic) |
#20 Erasmus |
#21 Externo |
#29 Vasco da Gama |
#30 Protocolo/Parceria com Instituições estrangeira |
siges.tipo.aluno.normal=1 |
siges.tipo.aluno.bolseiro=2 |
siges.tipo.aluno.militar=3 |
siges.tipo.aluno.trabalhador.estudante=4 |
siges.tipo.aluno.dirigente.associativo=6 |
siges.tipo.aluno.deficiente=11 |
siges.tipo.bombeiro=16 |
siges.tipo.vascodagama=29 |
siges.tipo.erasmus=20 |
##GOOGLE RECAPTCHA |
google.recaptcha.secret.key=@google.recaptcha.secret.key@ |
google.recaptcha.address=https://www.google.com/recaptcha/api/siteverify |
google.recaptcha.secret.param.name=secret |
google.recaptcha.response.param.name=response |
/branches/v3/impl/conf/template/email/courseUnitAnnouncement_pt.txt |
---|
1,4 → 1,5 |
# 0 : Course Unit Name |
|
# 0 : Course Unit Name |
# 1 : Title |
# 2 : Text |
# 3 : Teacher |
/branches/v3/impl/conf/template/email/message_ipp_pt_certificated.txt |
---|
New file |
0,0 → 1,28 |
|
<html> |
<head> |
<title>{1}</title> |
</head> |
<body> |
<p>Olá <b>@USER_NOME@</b></p> |
<p><i>Mensagem de:</i> {0}</p> |
<p><i>Assunto:</i> <b><u>{1}</u></b></p> |
{2} |
<hr/> |
<p>Informação Automática PAE:</p> |
<p><i>@USER_NOME@</i>, pode responder a esta solicitação acedendo directamente à sua conta no sistema PAE através do seguinte endereço: </a> |
<a href="@URL@">@URL@</a> |
<p>Se pretender contactar a entidade que lhe enviou a mensagem, use por favor o seguinte endereço de email: {3}</p> |
--------------------------------------------- |
<p>Instituto Politécnico de Portalegre - Sistema PAE</p> |
<p><a href="http://pae.ipportalegre.pt">http://pae.ipportalegre.pt</a></p> |
</body> |
</html> |
/branches/v3/impl/conf/template/email/message_ipp_pt.txt |
---|
New file |
0,0 → 1,24 |
|
<html> |
<head> |
<title>{1}</title> |
</head> |
<body> |
<p><i>Mensagem de:</i> {0}</p> |
<p><i>Assunto:</i> <b><u>{1}</u></b></p> |
{2} |
<hr/> |
<p>Se pretender responder, use o email: {3}</p> |
--------------------------------------------- |
<p>Instituto Politécnico de Portalegre - Sistema PAE</p> |
<p><a href="http://pae.ipportalegre.pt">http://pae.ipportalegre.pt</a></p> |
</body> |
</html> |
/branches/v3/impl/conf/berserk/sd.xml |
---|
83,7 → 83,34 |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>AddRole2User</name> |
<implementationClass>pt.estgp.estgweb.services.users.CreateUserService</implementationClass> |
<description>Load user of some class</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>addRole2User</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="EventClassManager"/><!--Suporta Admins ou Eventos--> |
</filterChains> |
</service> |
<service> |
<name>RemoveRole2User</name> |
<implementationClass>pt.estgp.estgweb.services.users.CreateUserService</implementationClass> |
<description>Load user of some class</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>removeRole2User</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
<chain name="EventClassManager"/><!--Suporta Admins ou Eventos--> |
</filterChains> |
</service> |
<service> |
<name>LoadUsers</name> |
<implementationClass>pt.estgp.estgweb.services.users.LoadUsersService</implementationClass> |
<description>Load user of some class</description> |
122,7 → 149,18 |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>LoadTeachersWithUnitsInLast3Years</name> |
<implementationClass>pt.estgp.estgweb.services.users.LoadUsersService</implementationClass> |
<description>Load user of some class</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>LoadTeachersWithUnitsInLast3Years</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>LoadTeachers</name> |
<implementationClass>pt.estgp.estgweb.services.users.LoadUsersService</implementationClass> |
873,7 → 911,6 |
<service> |
<name>LoadCourseUnit</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass> |
<description>Load course unit</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
884,7 → 921,6 |
<service> |
<name>LoadCourseUnitCleared</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitService</implementationClass> |
<description>Load course unit</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>runCleared</defaultMethod> |
1470,7 → 1506,91 |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>LoadCourseByCodeAndStudiesPlans</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadCourseByCodeAndStudiesPlans</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>LoadCourseAndStudiesPlans</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadCourseAndStudiesPlans</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>AddNewStudiesPlan</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>addNewStudiesPlan</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>SavePlanoEstudos</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>savePlanoEstudosEditado</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>CloneStudiesPlanVersionFrom</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>cloneVersionFrom</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="ServicesStudiesPlans"/> |
</filterChains> |
</service> |
<service> |
<name>AddTeacherCourseCommission</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>addTeacherCommission</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="ServicesCoursesManagement"/> |
</filterChains> |
</service> |
<service> |
<name>RemoveTeacherCourseCommission</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Load course by String code</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>removeTeacherCommission</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="ServicesCoursesManagement"/> |
</filterChains> |
</service> |
<service> |
<name>SubmitCourse</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description>Create or Update a new course</description> |
1479,7 → 1599,7 |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
<chain name="ServicesCoursesManagement"/> |
</filterChains> |
</service> |
<service> |
1544,6 → 1664,48 |
</service> |
<service> |
<name>SincronizeCoursesStudiesPlans</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sincronizeCoursesStudiesPlans</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>GetCourseStudiesPlanXml</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>getCourseStudiesPlanXml</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>GetCourseDetailForJsonApi</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>getCourseDetailForJsonApi</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
<service> |
<name>GetActiveCoursesForJsonApi</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>getActiveCoursesForJsonApi</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
</filterChains> |
</service> |
2555,7 → 2717,49 |
</service> |
<!--Events new--> |
<service> |
<name>EventsSaveClass</name> |
<implementationClass>pt.estgp.estgweb.services.events.EventsService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>save</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="EventClassManager"/> |
</filterChains> |
</service> |
<service> |
<name>EventsSaveEvent</name> |
<implementationClass>pt.estgp.estgweb.services.events.EventsService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>saveEvent</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="EventManager"/> |
</filterChains> |
</service> |
<service> |
<name>RemoveEventClass</name> |
<implementationClass>pt.estgp.estgweb.services.events.EventsService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>delete</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="EventClassManager"/> |
</filterChains> |
</service> |
<!--Questionarios New--> |
<service> |
<name>loadQuestionarioAdmin</name> |
2642,6 → 2846,61 |
<service> |
<name>QuestionarioPutAssignedAnswers</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>putAssignedAnswers</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="QuestionarioClearancesPre"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioRevertAssignationDetails</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>revertAssignationDetails</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="QuestionarioClearancesPre"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioStartProcessement</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>startProcessement</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="QuestionarioClearancesPre"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioStopProcessement</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>stopProcessement</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="QuestionarioClearancesPre"/> |
</filterChains> |
</service> |
<service> |
<name>RunJobSelectCourses</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService</implementationClass> |
<description></description> |
2715,9 → 2974,77 |
<chain name="QuestionarioClearancesPre"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSalvarResposta</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>salvarResposta</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSendMessage</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessage</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSendMessageCursoAfeto</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessageCursoAfeto</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSendMessageUnidadeAfeta</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessageUnidadeAfeta</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/> |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSendMessageAllProcessing</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessageAllProcessing</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/> |
</filterChains> |
</service> |
<service> |
<name>SalvarFicheiro</name> |
<implementationClass>pt.estgp.estgweb.services.paginasseccoes.SalvarFicheiro</implementationClass> |
<description>Salvar Ficheiro</description> |
2730,4 → 3057,7 |
</serviceDefinitions> |
/branches/v3/impl/conf/berserk/fd.xml |
---|
12,6 → 12,12 |
<isTransactional>false</isTransactional> |
</filter> |
<filter> |
<name>EventManager</name> |
<implementationClass>pt.estgp.estgweb.filters.filters.EventManager</implementationClass> |
<description>Checks if the requester contains certain roles</description> |
<isTransactional>false</isTransactional> |
</filter> |
<filter> |
<name>ExistObject</name> |
<implementationClass>pt.estgp.estgweb.filters.filters.ExistLoadClass</implementationClass> |
<description>Checks if the object exist if not throws NotFoundException</description> |
/branches/v3/impl/conf/berserk/fcd.xml |
---|
28,6 → 28,21 |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>ServicesStudiesPlans</name> |
<expression>AuthenticatedUsers && (RoleUsers("all") || RoleUsers("admin") || RoleUsers("servicesStudiesPlans"))</expression> |
<description>Admins Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>ServicesCoursesManagement</name> |
<expression>AuthenticatedUsers && (RoleUsers("all") || RoleUsers("admin") || RoleUsers("servicesCoursesManagement"))</expression> |
<description>Admins Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>Supers</name> |
<expression>AuthenticatedUsers && RoleUsers("super")</expression> |
<description>Super Users Control Chain</description> |
510,6 → 525,35 |
</filterChain> |
<filterChain> |
<name>AdminsOrQuestionarioAdminsOrPedagogico</name> |
<expression>AuthenticatedUsers && (RoleUsers("admin") || RoleUsers("questionarios.admin") || RoleUsers("pedagogicCouncil.president"))</expression> |
<description>Admins Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>EventClassManager</name> |
<expression>AuthenticatedUsers && (RoleUsers("admin") || RoleUsers("all") || RoleUsers("event_class_manager"))</expression> |
<description>Admins Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>EventManager</name> |
<expression>AuthenticatedUsers && (EventManager("eventClassId","event") || RoleUsers("all") || RoleUsers("admin"))</expression> |
<description>Admins Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass> |
</filterChain> |
</filterChainsDefinitions> |
/branches/v3/impl/src/java/jomm/web/utils/TopNav.java |
---|
26,20 → 26,24 |
return navPlaces; |
} |
public void addNavPlace(String url, String messageKey) |
public NavPlace addNavPlace(String url, String messageKey) |
{ |
NavPlace n = new NavPlace(url,messageKey,navPlaces.size()); |
navPlaces.add(n); |
return n; |
} |
public void addNavPlace(String url, String messageKey,String arg) |
public NavPlace addNavPlace(String url, String messageKey,String arg) |
{ |
NavPlace n = new NavPlace(url,messageKey,navPlaces.size(),arg); |
navPlaces.add(n); |
return n; |
} |
public void addNavPlace(String url, String messageKey,String arg0,String arg1) |
public NavPlace addNavPlace(String url, String messageKey,String arg0,String arg1) |
{ |
NavPlace n = new NavPlace(url,messageKey,navPlaces.size(),arg0,arg1); |
navPlaces.add(n); |
return n; |
} |
public String getTitle() { |
/branches/v3/impl/src/java/jomm/web/utils/NavPlace.java |
---|
21,6 → 21,7 |
private String key; |
private String arg0 = null; |
private String arg1 = null; |
private String icon = null; |
public NavPlace(String url,String key) |
{ |
149,7 → 150,7 |
} |
catch(Exception e) |
{ |
logger.error(e,e); |
logger.info("Message " + msg + " does not exist in MessageProperties will use key"); |
} |
if(msg == null) |
return key; |
166,6 → 167,11 |
return (String) request.getAttribute(AuxiliaryQueryString); |
} |
public String getIcon() { |
return icon; |
} |
public void setIcon(String icon) { |
this.icon = icon; |
} |
} |
/branches/v3/impl/src/java/jomm/web/tags/ErrorsForJsonTag.java |
---|
New file |
0,0 → 1,291 |
/* |
* $Id: ErrorsTag.java 471754 2006-11-06 14:55:09Z husted $ |
* |
* Licensed to the Apache Software Foundation (ASF) under one |
* or more contributor license agreements. See the NOTICE file |
* distributed with this work for additional information |
* regarding copyright ownership. The ASF licenses this file |
* to you under the Apache License, Version 2.0 (the |
* "License"); you may not use this file except in compliance |
* with the License. You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, |
* software distributed under the License is distributed on an |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
* KIND, either express or implied. See the License for the |
* specific language governing permissions and limitations |
* under the License. |
*/ |
package jomm.web.tags; |
import org.apache.struts.Globals; |
import org.apache.struts.action.ActionMessage; |
import org.apache.struts.action.ActionMessages; |
import org.apache.struts.taglib.TagUtils; |
import org.apache.struts.taglib.html.Constants; |
import org.apache.struts.util.MessageResources; |
import javax.servlet.jsp.JspException; |
import javax.servlet.jsp.tagext.TagSupport; |
import java.util.Iterator; |
/** |
* Custom tag that renders error messages if an appropriate request attribute |
* has been created. The tag looks for a request attribute with a reserved |
* key, and assumes that it is either a String, a String array, containing |
* message keys to be looked up in the module's MessageResources, or an object |
* of type <code>org.apache.struts.action.ActionErrors</code>. <p> The |
* following optional message keys will be utilized if corresponding messages |
* exist for them in the application resources: |
* |
* <ul> |
* |
* <li><b>errors.header</b> - If present, the corresponding message will be |
* rendered prior to the individual list of error messages.</li> |
* |
* <li><b>errors.footer</b> - If present, the corresponding message will be |
* rendered following the individual list of error messages.</li> |
* |
* <li><b>errors.prefix</b> - If present, the corresponding message will be |
* rendered before each individual error message.</li> |
* |
* <li><b>errors.suffix</b> - If present, the corresponding message will be |
* rendered after each individual error message.</li> |
* |
* </ul> |
* |
* @version $Rev: 471754 $ $Date: 2005-08-21 19:08:45 -0400 (Sun, 21 Aug 2005) |
* $ |
*/ |
public class ErrorsForJsonTag extends TagSupport { |
/** |
* The message resources for this package. |
*/ |
protected static MessageResources messages = |
MessageResources.getMessageResources(Constants.Package |
+ ".LocalStrings"); |
// ----------------------------------------------------------- Properties |
/** |
* The servlet context attribute key for our resources. |
*/ |
protected String bundle = null; |
/** |
* The session attribute key for our locale. |
*/ |
protected String locale = Globals.LOCALE_KEY; |
/** |
* The request attribute key for our error messages (if any). |
*/ |
protected String name = Globals.ERROR_KEY; |
/** |
* The name of the property for which error messages should be returned, |
* or <code>null</code> to return all errors. |
*/ |
protected String property = null; |
/** |
* The message resource key for errors header. |
*/ |
protected String header = null; |
/** |
* The message resource key for errors footer. |
*/ |
protected String footer = null; |
/** |
* The message resource key for errors prefix. |
*/ |
protected String prefix = null; |
/** |
* The message resource key for errors suffix. |
*/ |
protected String suffix = null; |
public String getBundle() { |
return (this.bundle); |
} |
public void setBundle(String bundle) { |
this.bundle = bundle; |
} |
public String getLocale() { |
return (this.locale); |
} |
public void setLocale(String locale) { |
this.locale = locale; |
} |
public String getName() { |
return (this.name); |
} |
public void setName(String name) { |
this.name = name; |
} |
public String getProperty() { |
return (this.property); |
} |
public void setProperty(String property) { |
this.property = property; |
} |
public String getHeader() { |
return (header == null) ? "errors.header.for.json" : header; |
} |
public void setHeader(String header) { |
this.header = header; |
} |
public String getFooter() { |
return (footer == null) ? "errors.footer.for.json" : footer; |
} |
public void setFooter(String footer) { |
this.footer = footer; |
} |
public String getPrefix() { |
return (prefix == null) ? "errors.prefix.for.json" : prefix; |
} |
public void setPrefix(String prefix) { |
this.prefix = prefix; |
} |
public String getSuffix() { |
return (suffix == null) ? "errors.suffix.for.json" : suffix; |
} |
public void setSuffix(String suffix) { |
this.suffix = suffix; |
} |
// ------------------------------------------------------- Public Methods |
/** |
* Render the specified error messages if there are any. |
* |
* @throws javax.servlet.jsp.JspException if a JSP exception has occurred |
*/ |
public int doStartTag() throws JspException { |
// Were any error messages specified? |
ActionMessages messages; |
try { |
messages = |
TagUtils.getInstance().getActionMessages(pageContext, Globals.ERROR_KEY); |
} catch (JspException e) { |
TagUtils.getInstance().saveException(pageContext, e); |
throw e; |
} |
if ((messages == null) || messages.isEmpty()) { |
return (EVAL_BODY_INCLUDE); |
} |
boolean headerPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getHeader()); |
boolean footerPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getFooter()); |
boolean prefixPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getPrefix()); |
boolean suffixPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getSuffix()); |
// Render the error messages appropriately |
StringBuffer results = new StringBuffer(); |
boolean headerDone = false; |
String message; |
Iterator reports = |
(property == null) ? messages.get() : messages.get(property); |
while (reports.hasNext()) { |
ActionMessage report = (ActionMessage) reports.next(); |
if (!headerDone) { |
if (headerPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, |
locale, getHeader()); |
results.append(message); |
} |
headerDone = true; |
} |
if (prefixPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getPrefix()); |
results.append(message); |
} |
if (report.isResource()) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
report.getKey(), report.getValues()); |
} else { |
message = report.getKey(); |
} |
if (message != null) { |
results.append(message); |
} |
if (suffixPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getSuffix()); |
results.append(message); |
} |
} |
if (headerDone && footerPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getFooter()); |
results.append(message); |
} |
TagUtils.getInstance().write(pageContext, results.toString()); |
return (EVAL_BODY_INCLUDE); |
} |
/** |
* Release any acquired resources. |
*/ |
public void release() { |
super.release(); |
bundle = Globals.MESSAGES_KEY; |
locale = Globals.LOCALE_KEY; |
name = Globals.ERROR_KEY; |
property = null; |
header = null; |
footer = null; |
prefix = null; |
suffix = null; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/EmailPersonalizedCertificated.java |
---|
New file |
0,0 → 1,131 |
package pt.estgp.estgweb.utils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.Message; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 20/Mar/2008 |
* @time 18:32:21 |
* @see pt.estgp.estgweb.utils |
*/ |
public class EmailPersonalizedCertificated extends Email implements Serializable |
{ |
private static final Logger logger = Logger.getLogger(EmailPersonalizedCertificated.class); |
/**FIELDS FOR PERSONALIZED EMAILS**/ |
private String urlPatternWithoutCetificate = null; |
private List<Long> userIds = null; |
public EmailPersonalizedCertificated cloneEmailForJob(){ |
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject, from, emailTemplateName, arguments); |
email = (EmailPersonalizedCertificated) super.cloneEmailForJob(email); |
email.urlPatternWithoutCetificate = this.urlPatternWithoutCetificate; |
if(this.userIds != null) |
{ |
email.userIds = new ArrayList<Long>(); |
email.userIds.addAll(this.userIds); |
} |
return email; |
} |
public EmailPersonalizedCertificated() |
{ |
} |
public EmailPersonalizedCertificated(String urlPatternWithoutCetificate, |
List<Long> userIds) |
{ |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
this.userIds = filterUserIds(userIds); |
} |
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments) |
{ |
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO); |
} |
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments, |
String urlPatternWithoutCetificate, |
List<Long> userIds) |
{ |
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO); |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
this.userIds = filterUserIds(userIds); |
} |
public boolean isSystemAssumingTestEmail() { |
return systemAssumingTestEmail; |
} |
public String getFromName() { |
return fromName; |
} |
public void setFromName(String fromName) { |
this.fromName = fromName; |
} |
public String getSubject() |
{ |
return subject; |
} |
public List<String> getRecipients() |
{ |
return recipients; |
} |
public void setRecipients(List<String> recipients) |
{ |
systemAssumingTestEmail = true;//ja nao estao sobre |
this.recipients = filterRecipients(recipients); |
} |
public String getUrlPatternWithoutCetificate() { |
return urlPatternWithoutCetificate; |
} |
public void setUrlPatternWithoutCetificate(String urlPatternWithoutCetificate) { |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
} |
public List<Long> getUserIds() { |
return userIds; |
} |
public void setUserIds(List<Long> userIds) { |
this.userIds = filterUserIds(userIds); |
} |
/** |
* Garante que os users Idss não são usados em testes |
* @return |
*/ |
protected List<Long> filterUserIds(List<Long> userIds) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
userIds = new ArrayList<Long>(); |
userIds.add(new Long(1));//Adding super user |
} |
return userIds; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/Email.java |
---|
1,20 → 1,16 |
package pt.estgp.estgweb.utils; |
import jomm.utils.TemplateUtils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.services.email.SendEmailService; |
import javax.mail.*; |
import javax.mail.internet.MimeMessage; |
import javax.mail.internet.InternetAddress; |
import java.util.Properties; |
import javax.mail.Message; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
import java.util.ArrayList; |
import java.util.regex.Matcher; |
import java.util.regex.Pattern; |
import java.util.regex.Matcher; |
import java.text.MessageFormat; |
import java.io.Serializable; |
import pt.estgp.estgweb.Globals; |
/** |
* @author Jorge Machado |
* @date 20/Mar/2008 |
25,16 → 21,42 |
{ |
private boolean isHtml = false; |
private String subject; |
private List<String> recipients; |
private Message.RecipientType type = Message.RecipientType.TO; |
private String from; |
private String emailTemplateName; |
private List<String> arguments; |
private String fromName = null; |
private static final Logger logger = Logger.getLogger(Email.class); |
protected boolean systemAssumingTestEmail = false; |
protected boolean isHtml = false; |
protected String subject; |
protected List<String> recipients; |
protected List<String> recipientsCC = null; |
protected Message.RecipientType type = Message.RecipientType.TO; |
protected String from; |
protected String emailTemplateName; |
protected List<String> arguments; |
protected String fromName = null; |
public Email cloneEmailForJob(){ |
Email email = new Email(subject,recipients,from,emailTemplateName,arguments,type); |
return cloneEmailForJob(email); |
} |
public Email cloneEmailForJob(Email email){ |
email.systemAssumingTestEmail = this.systemAssumingTestEmail; |
email.isHtml = this.isHtml; |
email.subject = this.subject; |
email.recipients = this.recipients; |
email.type = this.type; |
email.from = this.from; |
email.emailTemplateName = this.emailTemplateName; |
email.arguments = this.arguments; |
email.fromName = this.fromName; |
return email; |
} |
public boolean isHtml() { |
return isHtml; |
} |
43,10 → 65,13 |
isHtml = html; |
} |
public Email() { |
} |
public Email(String subject, List<String> recipients, String from, String mailTemplateName, List<String> arguments) |
{ |
this.subject = subject; |
this.recipients = recipients; |
this.recipients = filterRecipients(recipients, arguments, mailTemplateName);; |
this.from = from; |
this.emailTemplateName = mailTemplateName; |
this.arguments = arguments; |
56,12 → 81,48 |
{ |
this.type = type; |
this.subject = subject; |
this.recipients = recipients; |
this.recipients = filterRecipients(recipients, arguments, mailTemplateName); |
this.from = from; |
this.emailTemplateName = mailTemplateName; |
this.arguments = arguments; |
} |
protected List<String> filterRecipients(List<String> recipients,List<String> arguments,String template) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
systemAssumingTestEmail = true; |
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:"); |
System.out.println(recipients); |
logger.info("Mensagem que ia ser enviada:"); |
logger.info(SendEmailService.getEmailTextMessage(template, arguments)); |
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes"); |
recipients = new ArrayList<String>(); |
recipients.add(Globals.ADMIN_EMAIL); |
} |
return recipients; |
} |
protected List<String> filterRecipients(List<String> recipients) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
systemAssumingTestEmail = true; |
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:"); |
System.out.println(recipients); |
logger.info("Nao se sabe a Mensagem que ia ser enviada"); |
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes"); |
recipients = new ArrayList<String>(); |
recipients.add(Globals.ADMIN_EMAIL); |
} |
return recipients; |
} |
public boolean isSystemAssumingTestEmail() { |
return systemAssumingTestEmail; |
} |
public String getFromName() { |
return fromName; |
} |
82,7 → 143,9 |
public void setRecipients(List<String> recipients) |
{ |
this.recipients = recipients; |
systemAssumingTestEmail = true;//ja nao estao sobre |
this.recipients = filterRecipients(recipients); |
} |
public String getFrom() |
132,6 → 195,17 |
public void setType(Message.RecipientType type) |
{ |
this.type = type; |
//TODO WHEN BACK TO BCC REMOVE this |
this.type = Message.RecipientType.TO; |
//this.type = type; |
} |
public List<String> getRecipientsCC() { |
return recipientsCC; |
} |
public void setRecipientsCC(List<String> recipientsCC) { |
this.recipientsCC = recipientsCC; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/Globals.java |
---|
125,7 → 125,7 |
public static final String TMP_DIR = ConfigProperties.getProperty("tmp.dir"); |
public static final String DATA_DIR = ConfigProperties.getProperty("data.dir"); |
public static final String JOB_SERVICES_LOG_DIR = ConfigProperties.getProperty("data.dir") + java.io.File.separator + "jobslogs"; |
; |
public static final String EMAIL_SERVER_HOST = ConfigProperties.getProperty("email.server"); |
public static final String EMAIL_SERVER_SECURITY = ConfigProperties.getProperty("email.server.security"); |
public static final int EMAIL_SERVER_SECURITY_TLS = ConfigProperties.getIntProperty("email.server.security.tls"); |
138,7 → 138,17 |
public static final String EMAIL_SERVER_USERNAME = ConfigProperties.getProperty("email.user"); |
public static final String EMAIL_SERVER_PASSWORD = ConfigProperties.getProperty("email.password"); |
public static final String ADMIN_EMAIL = ConfigProperties.getProperty("admin.email"); |
public static final String ADMIN_EMAIL_2 = ConfigProperties.getProperty("admin.email.2"); |
public static final boolean SYSTEM_EMAIL_USE_SECURITY = ConfigProperties.getBooleanProperty("email.use.security"); |
public static final boolean SYSTEM_EMAIL_USE_ROUND_ROBIN = ConfigProperties.getBooleanProperty("email.use.round.robin"); |
public static final String SYSTEM_EMAIL_BOX = ConfigProperties.getProperty("email.from"); |
public static final String ANNOUNCEMENT_TYPE_NEWS = "news"; |
public static final String ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS = "top.flash.news"; |
public static final String ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS = "bottom.flash.news"; |
181,7 → 191,19 |
public static final String SIGES_WEBSERVICE_SECRET = ConfigProperties.getProperty("ws.siges.secret"); |
public static final String SIGES_TIPO_ALUNO_NORMAL = ConfigProperties.getProperty("siges.tipo.aluno.normal"); |
public static final String SIGES_TIPO_ALUNO_BOLSEIRO = ConfigProperties.getProperty("siges.tipo.aluno.bolseiro"); |
public static final String SIGES_TIPO_ALUNO_MILITAR = ConfigProperties.getProperty("siges.tipo.aluno.militar"); |
public static final String SIGES_TIPO_ALUNO_TRABALHADOR_ESTUDANTE = ConfigProperties.getProperty("siges.tipo.aluno.trabalhador.estudante"); |
public static final String SIGES_TIPO_ALUNO_DIRIGENTE_ASSOCIATIVO = ConfigProperties.getProperty("siges.tipo.aluno.dirigente.associativo"); |
public static final String SIGES_TIPO_ALUNO_DEFICIENTE = ConfigProperties.getProperty("siges.tipo.aluno.deficiente"); |
public static final String SIGES_TIPO_ALUNO_BOMBEIRO = ConfigProperties.getProperty("siges.tipo.aluno.bombeiro"); |
public static final String SIGES_TIPO_ALUNO_VASCODAGAMA = ConfigProperties.getProperty("siges.tipo.vascodagama"); |
public static final String SIGES_TIPO_ALUNO_ERASMUS = ConfigProperties.getProperty("siges.tipo.erasmus"); |
public static final long URL_STAT_CHART_EXPIRE_INTERVAL = ConfigProperties.getIntProperty("url.stat.image.expire.interval.time.minutes"); |
public static final String URL_STAT_CHART_TMP_DIR = ConfigProperties.getProperty("url.stat.tmp.dir"); |
public static final int URL_STAT_CACHE_SIZE = ConfigProperties.getIntProperty("url.stat.click.cache.size"); |
345,9 → 367,13 |
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT = "courseUnitAnnouncement_pt.txt"; |
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN = "courseUnitAnnouncement_en.txt"; |
public static final String EMAIL_MESSAGE_TEMPLATE_EN = "message_en.txt"; |
public static final String EMAIL_MESSAGE_TEMPLATE_PT = "message_pt.txt"; |
public static final String EMAIL_MESSAGE_TEMPLATE_EN = "message_en.txt"; |
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED = "message_ipp_pt_certificated.txt"; |
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT = "message_ipp_pt.txt"; |
public static final String EMAIL_COURSEUNIT_WORK_SUBJECT_PT = ConfigProperties.getProperty("email.courseunit.work.subject.pt"); |
public static final String EMAIL_COURSEUNIT_WORK_SUBJECT_EN = ConfigProperties.getProperty("email.courseunit.work.subject.en"); |
public static final String EMAIL_COURSEUNIT_WORK_RELATIVE_URL = ConfigProperties.getProperty("email.courseunit.work.relative.url"); |
419,18 → 445,26 |
public static final String ROLE_INVITED = "invited"; |
public static final String SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE = ConfigProperties.getProperty("system.mail.standard.certificated.home.page"); |
public static final String SYSTEM_THEME = ConfigProperties.getProperty("system.theme"); |
public static final String AUTHENTICATE_SERVICE = ConfigProperties.getProperty("authentication.policy.service"); |
public static final String AUTHENTICATE_SERVICE_USERNAME_KEY = ConfigProperties.getProperty("authentication.policy.username.msg.key"); |
public static final String AUTHENTICATE_SERVICE_PASSWORD_KEY = ConfigProperties.getProperty("authentication.policy.password.msg.key"); |
public static final String SYSTEM_REDIRECTIONS_POLICY_INDEX_WELCOME = ConfigProperties.getProperty("system.redirections.policy.index.welcome"); |
public static final String SYSTEM_REDIRECTIONS_POLICY_AUTHENTICATION_ACTION = ConfigProperties.getProperty("system.redirections.policy.authentication.action"); |
public static final String SYSTEM_REDIRECTIONS_POLICY_AUTHENTICATION_LOGOUT_ACTION = ConfigProperties.getProperty("system.redirections.policy.authentication.logout.action"); |
public static final boolean MODO_PAE_ENABLED = ConfigProperties.getBooleanProperty("mode.pae.enabled"); |
public static final String QUESTIONARIOS_GERAIS = "questionarios.gerais"; |
public static final String QUESTIONARIOS_ADMIN = "questionarios.admin"; |
public static final String QUESTIONARIOS_ASSIGNEMENTS_ADMIN = "questionarios.atribuicoes.admin"; |
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN = "questionarios.atribuicoes.admin"; |
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN = "questionarios.atribuicoes.check_teachers"; |
public static final String QUESTIONARIOS_TIPOLOGIAS_ADMIN = "questionarios.tipologias.admin"; |
public static final String ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO = "pedagogicCouncil.president"; |
public static final boolean USE_XSL_CACHE =ConfigProperties.getBooleanProperty("xsl.use.cache"); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java |
---|
1,31 → 1,39 |
package pt.estgp.estgweb.services.courses; |
import com.owlike.genson.Genson; |
import com.owlike.genson.TransformationException; |
import com.owlike.genson.reflect.VisibilityFilter; |
import jomm.dao.impl.AbstractDao; |
import jomm.utils.FilesUtils; |
import jomm.utils.StreamsUtils; |
import org.apache.log4j.Logger; |
import org.dom4j.Document; |
import org.json.JSONArray; |
import org.json.JSONException; |
import org.json.JSONObject; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.Course; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.RepositoryFileImpl; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.CourseView; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum; |
import pt.estgp.estgweb.services.courses.xsd.Curso; |
import pt.estgp.estgweb.services.courses.xsd.SemestreImpl; |
import pt.estgp.estgweb.services.courses.xsd.UnidadeType; |
import pt.estgp.estgweb.services.data.IRepositoryFile; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Dom4jUtil; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.IOException; |
import java.io.InputStream; |
import java.io.PrintWriter; |
import java.io.StringWriter; |
import java.util.ArrayList; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import javax.xml.bind.JAXBContext; |
import javax.xml.bind.JAXBException; |
import javax.xml.bind.Marshaller; |
import javax.xml.bind.Unmarshaller; |
import java.io.*; |
import java.net.URL; |
import java.util.*; |
/* |
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt |
48,48 → 56,61 |
RepositoryService repositoryService = new RepositoryService(); |
public CourseView loadCourse(long id, boolean initUnits) throws ServiceException |
/** |
* Servico e subservico para termos acesso as variaveis de controlo |
* @param id |
* @param initUnits |
* @return |
* @throws ServiceException |
*/ |
public CourseView loadCourse(long id, boolean initUnits) |
throws ServiceException |
{ |
return loadCourse(id,initUnits,false); |
} |
public CourseView loadCourseAndStudiesPlans(long id, boolean initUnits) |
throws ServiceException |
{ |
return loadCourse(id,initUnits,true); |
} |
private CourseView loadCourse(long id, boolean initUnits,boolean loadStudiesPlans) throws ServiceException |
{ |
Course c = DaoFactory.getCourseDaoImpl().get(id); |
if(c != null) |
{ |
CourseView cV = new CourseView(c,initUnits); |
if(c.getStudiesPlan() != null) |
{ |
RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan()); |
cV.setStudiesPlan(repositoryFile); |
} |
return cV; |
return getCourseView(initUnits, c,loadStudiesPlans); |
} |
return null; |
} |
public List<String> loadImportYears(UserSession userSession) throws ServiceException |
/** |
* Servico e subservico para termos acesso as variaveis de controlo |
* @param code |
* @param initUnits |
* @return |
* @throws ServiceException |
*/ |
public CourseView loadCourseByCode(String code, boolean initUnits) throws ServiceException |
{ |
List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears(); |
List<String> imStrings = new ArrayList<String>(); |
for(String importYear: importYears) |
{ |
imStrings.add(importYear); |
} |
return imStrings; |
return loadCourseByCode(code,initUnits,false); |
} |
public CourseView loadCourseByCodeAndStudiesPlans(String code, boolean initUnits) throws ServiceException |
{ |
return loadCourseByCode(code,initUnits,true); |
} |
public CourseView loadCourseByCode(String code, boolean initUnits) throws ServiceException |
private CourseView loadCourseByCode(String code, boolean initUnits,boolean loadStudiesPlans) throws ServiceException |
{ |
try{ |
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code); |
if(c != null) |
{ |
CourseView cV = new CourseView(c,initUnits); |
if(c.getStudiesPlan() != null) |
{ |
RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan()); |
cV.setStudiesPlan(repositoryFile); |
} |
return cV; |
return getCourseView(initUnits, c, loadStudiesPlans); |
} |
} |
catch(Throwable e) |
100,13 → 121,53 |
return null; |
} |
/** |
* Carrega efetivamente o curso nos servicos load e load by code |
* @param initUnits |
* @param c |
* @return |
*/ |
private CourseView getCourseView(boolean initUnits, Course c,boolean loadStudiesPlans) { |
CourseView cV = new CourseView(c,initUnits); |
/* |
* todo Parte antig antigo XML do plano de estudos para remover futuramente*/ |
if(c.getStudiesPlan() != null) |
{ |
RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan()); |
cV.setStudiesPlan(repositoryFile); |
} |
if(loadStudiesPlans && c.getStudiesPlans() != null && c.getStudiesPlans().size() > 0) |
{ |
for(CourseStudiesPlan sp : c.getStudiesPlans()) |
{ |
sp.getVersion(); |
cV.getCourseStudiesPlans().add(sp); |
} |
} |
return cV; |
} |
public List<String> loadImportYears(UserSession userSession) throws ServiceException |
{ |
List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears(); |
List<String> imStrings = new ArrayList<String>(); |
for(String importYear: importYears) |
{ |
imStrings.add(importYear); |
} |
return imStrings; |
} |
public CourseView submitCourse(CourseView courseView, |
InputStream stream, |
String name, |
int size, |
String contentType, |
UserSession userSession) throws ServiceException |
{ |
UserSession userSession) throws ServiceException, JAXBException, TransformationException, IOException { |
Course c; |
if(courseView.getId() > 0) |
{ |
123,6 → 184,23 |
String htmlTrasformationResult = null; |
//Stream que pode vir do upload da UIde Admin de Cursos |
htmlTrasformationResult = uploadStudiesPlan(stream, name, size, contentType, userSession, c,false,null); |
courseView.persistViewInObject(c); |
CourseView cv = loadCourse(c.getId(),false); |
cv.setHtmlResult(htmlTrasformationResult); |
/** |
* New## generating course json |
*/ |
generateCourseJson(c); |
return cv; |
} |
private String uploadStudiesPlan(InputStream stream, String name, int size, String contentType, UserSession userSession, Course c,boolean forceUrlFichas, String systemUrl) throws JAXBException, TransformationException { |
String htmlTrasformationResult = null; |
//APENAS NO CASO DO AMDIN FAZER UPLOAD DE UM XML |
if(stream != null && size > 0) |
{ |
String extension = FilesUtils.getExtension(name); |
135,39 → 213,290 |
{ |
repositoryService.updateRepositoryFile(c.getStudiesPlan(), stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain); |
} |
IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession); |
stream = repositoryFile.getInput(); |
try |
htmlTrasformationResult = generateHtmlCache(userSession, c); |
//####New#### Generating XML with JaxB |
//ISTO SO É CHAMADO NO CASO DE SE FAZER UPLOAD DE UM NOVO PLANO PELO MECANISMO ANTIGO |
generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, c, forceUrlFichas, systemUrl); |
} |
return htmlTrasformationResult; |
} |
private void generateCourseJson(Course cAux) throws IOException, TransformationException { |
CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux); |
if(c.getValidationRole() != null && c.getValidationRole().trim().length() > 0) |
{ |
List<Teacher> courseComissionProxys = DaoFactory.getUserDaoImpl().loadRoleTeachers(c.getValidationRole()); |
List<Teacher> courseComission = new ArrayList<Teacher>(); |
for(Teacher t: courseComissionProxys) |
{ |
Document dom = Dom4jUtil.parse(stream); |
Map<String,Object> parameters = new HashMap<String,Object>(); |
parameters.put("COURSE_SIGES_CODE",c.getCode()); |
String html = Dom4jUtil.styleDocument(dom, Globals.TEMPLATE_COURSE_XSL_PATH,parameters); |
c.setCacheWebDocument(html); |
courseComission.add(DaoFactory.getTeacherDaoImpl().narrow(t)); |
} |
catch (Exception e) |
c.setCourseComission(courseComission); |
} |
//Getting Coordinator from proxy |
Teacher t = c.getCoordinator(); |
if(t != null) |
t.getName(); |
else |
{ |
logger.warn("Course does not have coordinator"); |
} |
String jsonCourse = getGensonCourse().serialize(c); |
c.setJson(jsonCourse); |
} |
private String generateHtmlCache(UserSession userSession, Course c) { |
String htmlTrasformationResult = null; |
InputStream stream;IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession); |
stream = repositoryFile.getInput(); |
try |
{ |
Document dom = Dom4jUtil.parse(stream); |
Map<String,Object> parameters = new HashMap<String,Object>(); |
parameters.put("COURSE_SIGES_CODE",c.getCode()); |
String html = Dom4jUtil.styleDocument(dom, Globals.TEMPLATE_COURSE_XSL_PATH,parameters); |
c.setCacheWebDocument(html); |
} |
catch (Exception e) |
{ |
StringWriter writer = new StringWriter(); |
PrintWriter printWriter = new PrintWriter(writer); |
e.printStackTrace(printWriter); |
htmlTrasformationResult = "<div class=\"error\"><pre>" + e.toString() + "\n" + printWriter.toString() + "</pre></div>"; |
printWriter.close(); |
} |
try |
{ |
stream.close(); |
} |
catch (IOException e) |
{ |
logger.error(e,e); |
} |
return htmlTrasformationResult; |
} |
/** |
* ##NEW METHOD### |
* Gera o XML normalizado para o JAXB a partir do XML importado do XML do plano XML quese usou no upload |
* para garantir que está bem formado |
* @param userSession |
* @param c |
* @return |
* @throws JAXBException if XML is not weel formed |
*/ |
private void generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(UserSession userSession, Course c, boolean forceFichaCurricularUrlSet, String systemUrlForUnitPrograms) throws JAXBException, TransformationException |
{ |
CourseStudiesPlan courseStudiesPlan; |
if(c.getStudiesPlan() == null || c.getStudiesPlan().trim().length() == 0) |
{ |
//ESTE É O STREAM DO PLANO DE UPLOAD |
logger.warn("Course does not have studies plan XML file stream to use in update"); |
return; |
} |
if(c.getStudiesPlans() == null || c.getStudiesPlans().size() == 0) |
{ |
logger.info("Generating first study plan"); |
courseStudiesPlan = DomainObjectFactory.createCourseStudiesPlanImpl(); |
courseStudiesPlan.setVersion(1); |
courseStudiesPlan.setVersionDescription("Auto gerado durante a importação de um XML com o plano de estudos a " + new Date().toString()); |
courseStudiesPlan.setCourse(c); |
if(c.getStudiesPlans() == null) |
c.setStudiesPlans(new HashSet<CourseStudiesPlan>()); |
c.getStudiesPlans().add(courseStudiesPlan); |
DaoFactory.getCourseStudiesPlanDaoImpl().save(courseStudiesPlan); |
} |
else |
{ |
courseStudiesPlan = c.getStudiesPlans().iterator().next(); |
logger.info("Updating Study Plan version " + courseStudiesPlan.getVersion()); |
} |
InputStream stream; |
IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession); |
long lastVersion = repositoryService.loadView(c.getStudiesPlan()).getLastVersion().getId(); |
//stream = repositoryFile.getInput(); |
//TODO TIRAR |
//JUST FOR DEBUG |
/* try { |
System.out.println(StreamsUtils.readString(stream)); |
stream.close(); |
} catch (IOException e) { |
e.printStackTrace(); |
}*/ |
repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession); |
stream = repositoryFile.getInput(); |
try { |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
Unmarshaller unmarshaller = jc.createUnmarshaller(); |
//Just in case lets update SigesCode |
Curso curso = (Curso) unmarshaller.unmarshal(stream); |
curso.setSiges(c.getCode()); |
curso.setNome(c.getName()); |
curso.setDep(c.getArea()); |
//##NOVO PARA GERAR LINK SE NAO EXISTIR |
generateAutoUrlFichasCurriculares(curso,systemUrlForUnitPrograms,forceFichaCurricularUrlSet); |
Marshaller marshaller = jc.createMarshaller(); |
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); |
StringWriter sw = new StringWriter(); |
marshaller.marshal(curso, sw); |
//SETTING XML in COURSE STUDIES PLAN |
courseStudiesPlan.setXml(sw.toString()); |
String json = getGensonPlanoEstudos().serialize(curso); |
//SETTING JSON in COURSE STUDIES PLAN |
courseStudiesPlan.setJson(json); |
} catch (JAXBException e) { |
logger.error(e,e); |
System.out.print("check XML for possible errors for repositoryStream:" + c.getStudiesPlan() + " file version: " + lastVersion); |
throw e; |
} catch (TransformationException e) { |
logger.error(e, e); |
throw e; |
} catch (IOException e) { |
e.printStackTrace(); |
} |
try |
{ |
stream.close(); |
} |
catch (IOException e) |
{ |
logger.error(e,e); |
} |
} |
/** |
* Apenas é chamado quando se tenta injectar um programa a partir de um upload que foi feito |
* pelo user ou pela sincronização remota |
* @param curso |
* @param systemUrl |
* @param force |
*/ |
private void generateAutoUrlFichasCurriculares(Curso curso,String systemUrl,boolean force) |
{ |
for(Curso.Semestre s :curso.getSemestre()) |
{ |
for(Curso.Semestre.Perfil p :s.getPerfil()) |
{ |
StringWriter writer = new StringWriter(); |
PrintWriter printWriter = new PrintWriter(writer); |
e.printStackTrace(printWriter); |
htmlTrasformationResult = "<div class=\"error\"><pre>" + e.toString() + "\n" + printWriter.toString() + "</pre></div>"; |
printWriter.close(); |
for(UnidadeType unidadeType : p.getUnidade()) |
{ |
generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force); |
} |
} |
try |
for(UnidadeType unidadeType : s.getUnidade()) |
{ |
stream.close(); |
generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force); |
} |
catch (IOException e) |
{ |
logger.error(e,e); |
} |
} |
courseView.persistViewInObject(c); |
CourseView cv = loadCourse(c.getId(),false); |
cv.setHtmlResult(htmlTrasformationResult); |
return cv; |
} |
private void generateAutoUrlUnidade(UnidadeType unidadeType,String systemUrl,Curso curso,Curso.Semestre semestre,boolean force) |
{ |
if(force || unidadeType.getUrlFichaCurricular() == null || unidadeType.getUrlFichaCurricular().trim().length()==0) |
{ |
logger.info("GENERATING FICHA CURRICULAR URL For " + unidadeType.getNome()); |
String url = systemUrl != null ? systemUrl : ""; |
if(!url.endsWith("/")) |
url = url + "/"; |
//Nao fornece o ano pois o servico irá assumir o ultimo |
unidadeType.setUrlFichaCurricular(url + "startLoadCourseUnitProgramSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId()); |
unidadeType.setUrlUnidadeCurricular(url + "startLoadCourseUnitSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId()); |
} |
} |
private static Genson getGensonPlanoEstudos(){ |
Genson genson = new Genson.Builder() |
.exclude("class") |
.exclude("siges", Curso.class) |
.exclude("nome",Curso.class) |
.exclude("dep") |
.exclude("removed",UnidadeType.class) |
.exclude("perfilId",Curso.Semestre.Perfil.class) |
.exclude("semestreId",Curso.Semestre.class) |
.create(); |
return genson; |
} |
private static Genson getGensonCourse(){ |
Genson genson = new Genson.Builder() |
.exclude(Object.class) |
.setUseFields(false) |
.setUseGettersAndSetters(true) |
.setMethodFilter(VisibilityFilter.PACKAGE_PUBLIC) |
.exclude("admin") |
.exclude("autoBlock") |
.exclude("autoBlockMode") |
.exclude("manualBlock") |
.exclude("newUser") |
.exclude("student") |
.exclude("superuser") |
.exclude("superuserOrAdmin") |
.exclude("teacher") |
.exclude("unitCheck") |
.exclude("id") |
/* .exclude(Course.class) |
.exclude(CourseImpl.class) |
.exclude(GenericUser.class) |
.exclude(User.class) |
.exclude(UserImpl.class) |
.exclude(Teacher.class) |
.exclude(TeacherImpl.class) |
.exclude(SigesUser.class) |
.exclude(SigesUserImpl.class) |
.exclude(GenericUser.class) |
.exclude(GenericUserImpl.class) |
*/ |
.exclude("id", Course.class) |
.exclude("status", Course.class) |
.exclude("showStudiesPlan", Course.class) |
.include("degreeForJsonApi", CourseImpl.class) |
.include("schoolForJsonApi", CourseImpl.class) |
.include("statusForJsonApi", CourseImpl.class) |
.include("name", Course.class) |
.include("nameEn", Course.class) |
.include("nameEs", Course.class) |
.include("nameFr", Course.class) |
.include("department", Course.class) |
.exclude("active", CourseDepartment.class) |
.include("sigla", CourseDepartment.class) |
.include("name", CourseDepartment.class) |
.include("nameEn", CourseDepartment.class) |
.include("nameEs", CourseDepartment.class) |
.include("nameFr", CourseDepartment.class) |
.include("code", Course.class) |
.include("validationRole", Course.class) |
.include("courseComission", CourseImpl.class) |
.include("name", GenericUser.class) |
.include("email", GenericUser.class) |
.include("sigesCode", SigesUser.class) |
.include("coordinator", Course.class) |
.create(); |
return genson; |
} |
public List<CourseView> loadCourses() throws ServiceException |
{ |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(); |
237,4 → 566,573 |
/** JSON API **/ |
/** |
* @SERVICE@ |
* |
* @param school |
* @param type |
* @return |
* @throws JSONException |
*/ |
public JSONObject getActiveCoursesForJsonApi(String school,String type) throws JSONException { |
String institutionalCode = null; |
String degree = null; |
if(school != null && school.length() > 0) |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse." + school); |
if(type != null && type.length() > 0) |
degree = ConfigProperties.getProperty("course.inverse." + type); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode, degree); |
JSONObject coursesResponse = new JSONObject(); |
JSONArray coursesArray = new JSONArray(); |
for(Course cAux: courses) |
{ |
CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux); |
JSONObject courseJson = new JSONObject(); |
courseJson.put("name",c.getName()); |
courseJson.put("code",c.getCode()); |
courseJson.put("schoolForJsonApi",c.getSchoolForJsonApi()); |
courseJson.put("degreeForJsonApi",c.getDegreeForJsonApi()); |
courseJson.put("statusForJsonApi",c.getStatusForJsonApi()); |
courseJson.put("getDetailedInfoUrl","/wsjson/api?service=getCourse&code=" + c.getCode()); |
coursesArray.put(courseJson); |
} |
coursesResponse.put("status","ok"); |
coursesResponse.put("courses",coursesArray); |
return coursesResponse; |
} |
/** |
* |
* * Serviço invocado para obter o JSON de um curso |
* O JSON tem dois campos o courseInfo e o plano de estudos colocados separadamente |
* |
* Atenção o plano de estudos usado é o ultimo considerando o seu ID |
* Nota: O plano de Estudos é uma classe persistente que tem apenas versão e descrição |
* deverá ter como campo o XML e o JSON já gerados do plano de estudos que comporta |
* |
* @param code |
* @return |
* @throws JSONException |
* @throws IOException |
* @throws TransformationException |
* @throws JAXBException |
*/ |
public JSONObject getCourseDetailForJsonApi(String code) throws JSONException, IOException, TransformationException, JAXBException { |
Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code); |
JSONObject coursesResponse = new JSONObject(); |
if(course.getJson() == null) |
{ |
logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate"); |
new CoursesService().generateCourseJson(course); |
} |
if(course.getJson() != null) |
{ |
JSONObject courseObj = new JSONObject(course.getJson()); |
coursesResponse.put("courseInfo",courseObj); |
//Este caso apenas se dá se o plano nunca tiver sido editado ou sincronizado |
//Nesse caso o sistema irá tentar obtê-lo da stream do repositorio |
if(course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0) |
{ |
logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will try generate from studies plan OLD Stream"); |
UserSession userSession = DomainObjectFactory.createUserSessionImpl(); |
userSession.setUser(DaoFactory.getUserDaoImpl().load(new Long(1))); |
new CoursesService().generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null); |
} |
if(course.getStudiesPlans() != null ) |
{ |
CourseStudiesPlan studiesPlan = course.getStudiesPlans().iterator().next(); |
JSONObject studiesPlanObj; |
if(studiesPlan.getJson() != null) |
{ |
studiesPlanObj = new JSONObject(studiesPlan.getJson()); |
studiesPlanObj.put("version",studiesPlan.getVersion()); |
coursesResponse.put("courseStudiesPlan",studiesPlanObj); |
} |
else |
{ |
studiesPlanObj = new JSONObject(); |
studiesPlanObj.put("fault","Zero contents for this version"); |
studiesPlanObj.put("version",studiesPlan.getVersion()); |
coursesResponse.put("courseStudiesPlan",studiesPlanObj); |
} |
coursesResponse.put("courseStudiesPlan",studiesPlanObj); |
} |
else |
{ |
coursesResponse.put("status","JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE"); |
} |
} |
else |
{ |
coursesResponse.put("status","JSON NOT EXIST FOR COURSE, PLEASE OPEN AND SAVE COURSE IN ADMINISTRATION"); |
} |
return coursesResponse; |
} |
/** |
* @SERVICE@ |
* |
* @param code |
* @return |
* @throws JSONException |
*/ |
public String getCourseStudiesPlanXml(String code,String renew) throws JSONException { |
Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code); |
if(renew != null || course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0) |
{ |
logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate"); |
UserSession userSession = DomainObjectFactory.createUserSessionImpl(); |
userSession.setUser(DaoFactory.getUserDaoImpl().load(new Long(1))); |
try { |
generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null); |
} catch (JAXBException e) { |
logger.error(e,e); |
return "<error>" + e.toString() + ". see log for details</error>"; |
} catch (TransformationException e) { |
logger.error(e, e); |
return "<error>" + e.toString() + ". see log for details</error>"; |
} |
} |
if(course.getStudiesPlans() != null && course.getStudiesPlans().size() > 0) |
{ |
return course.getStudiesPlans().iterator().next().getXml(); |
} |
return "<error>Does not exixt</error>"; |
} |
/** |
* @SERVICE@ |
* |
* @param systemUrl |
* @param setActive |
* @return |
* @throws IOException |
* @throws JSONException |
* @throws TransformationException |
* @throws JAXBException |
*/ |
public String sincronizeCoursesStudiesPlans(String systemUrl,boolean setActive,UserSession sess) throws IOException, JSONException, TransformationException, JAXBException { |
StringBuilder log = new StringBuilder(); |
URL url = new URL(systemUrl + "/wsjson/api?service=listCourses"); |
InputStream is = url.openStream(); |
String str = StreamsUtils.readString(is); |
JSONObject obj = new JSONObject(str); |
JSONArray courses = obj.getJSONArray("courses"); |
for(int i = 0; i < courses.length();i++) |
{ |
String code = ""; |
try{ |
JSONObject course = courses.getJSONObject(i); |
code = course.getString("code"); |
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code); |
if(c == null) |
{ |
String msg = "SKIPING - Course " + code + " " + course.getString("name") + " does not exist in this system"; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
} |
else |
{ |
String msg = "UPDATING - Course " + code + " " + course.getString("name") + " exist in this system"; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
//#############UPDATING Course Comission Members |
updateCourseComissionMembersAndCourseInfo(systemUrl, code, c); |
//#############UPDATING STUDIES PLAN |
updateStudiesPlanFromRemoteSystem(systemUrl, setActive, log, course, code, c); |
} |
} |
catch(Throwable e) |
{ |
logger.error("UPDATE COURSE: " + i + " code: " + code + " FAILED"); |
logger.error(e,e); |
} |
} |
return log.toString(); |
} |
private void updateStudiesPlanFromRemoteSystem(String systemUrl, boolean setActive, StringBuilder log, JSONObject course, String code, Course c) throws IOException, JSONException, TransformationException, JAXBException { |
String msg; |
InputStream stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code + "&renew=true").openStream(); |
String studiesPlan = StreamsUtils.readString(stream); |
int len = studiesPlan.length(); |
if(studiesPlan == null || studiesPlan.trim().length() == 0 || studiesPlan.contains("<error>")) |
{ |
msg = "Course " + code + " " + course.getString("name") + " dont has studies plan"; |
log.append("<warn>" + msg+"</warn>"); |
logger.warn(msg); |
} |
else |
{ |
msg = "Found studies plan for " + code + " " + course.getString("name") + " will update "; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
if(setActive) |
{ |
msg = "Setting course to active"; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
c.setStatus(true); |
} |
//System.out.println(studiesPlan); |
msg = "GENERATING COURSE JSON ...."; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
new CoursesService().generateCourseJson(c); |
msg="GENERATING COURSE STUDIES PLAN JSON ...."; |
log.append("<info>" + msg+"</info>"); |
logger.info(msg); |
stream.close(); |
stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream(); |
UserSession userSession = DomainObjectFactory.createUserSessionImpl(); |
userSession.setUser(DaoFactory.getUserDaoImpl().load(new Long(1))); |
new CoursesService().uploadStudiesPlan(stream, "curso_" + code + ".xml", len,"appication/xml", userSession,c,true,systemUrl); |
} |
} |
/** |
* Update courseComission Members |
* @param systemUrl |
* @param code |
* @param c |
* @throws IOException |
* @throws JSONException |
*/ |
private void updateCourseComissionMembersAndCourseInfo(String systemUrl, String code, Course c) throws IOException, JSONException |
{ |
URL urlCourseDetails = new URL(systemUrl + "/wsjson/api?service=getCourse&code=" + code); |
InputStream isCourseDetails = urlCourseDetails.openStream(); |
String strCourseDetails = StreamsUtils.readString(isCourseDetails); |
JSONObject objCourseDetails = new JSONObject(strCourseDetails); |
//DEPARTMENT |
JSONObject department = objCourseDetails.getJSONObject("courseInfo").getJSONObject("department"); |
if(department != null) |
{ |
String sigla = department.getString("sigla"); |
if(sigla != null) |
{ |
CourseDepartment department1 = DaoFactory.getCourseDepartmentDaoImpl().findBySigla(sigla); |
if(department1 != null) |
{ |
c.setDepartment(department1); |
} |
} |
} |
String validationRole = objCourseDetails.getJSONObject("courseInfo").getString("validationRole"); |
if(validationRole == null) |
{ |
logger.info("validationRole is not defined"); |
} |
else |
{ |
logger.info("found validationRole: " + validationRole); |
c.setValidationRole(validationRole); |
JSONObject coordinator = objCourseDetails.getJSONObject("courseInfo").getJSONObject("coordinator"); |
JSONArray courseComission = objCourseDetails.getJSONObject("courseInfo").getJSONArray("courseComission"); |
Teacher coordinatorPersistent = findPersonFromCourseDetails(coordinator); |
if(coordinatorPersistent == null) |
{ |
logger.warn("Coordinator does not exist in this system "); |
} |
else |
{ |
c.setCoordinator(coordinatorPersistent); |
} |
List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(validationRole); |
logger.info("Encontrados " + users.size() + " docentes com o papel de comissao " + validationRole + " vai remover"); |
for(User u: users) |
{ |
logger.info("Removendo role a " + u.getName()); |
u.removeRole(validationRole); |
} |
for(int j = 0 ; j < courseComission.length(); j++) |
{ |
JSONObject memberComission = courseComission.getJSONObject(j); |
Teacher memberPersistent = findPersonFromCourseDetails(memberComission); |
if(memberPersistent == null) |
{ |
logger.info("Member does not exist in this system "); |
} |
else |
{ |
logger.info("Adding role of course comission member"); |
if(!memberPersistent.hasRole(validationRole)) |
{ |
memberPersistent.addRole(validationRole); |
} |
} |
} |
} |
} |
private Teacher findPersonFromCourseDetails(JSONObject coordinator) { |
int code; |
try { |
if(coordinator.has("sigesCode")) |
{ |
code = coordinator.getInt("sigesCode"); |
} |
else |
{ |
logger.warn("there is no sigesCode for this person " + coordinator.toString()); |
return null; |
} |
} catch (JSONException e){ |
return null; |
} catch (NumberFormatException e){ |
return null; |
} |
return DaoFactory.getTeacherDaoImpl().loadBySigesCode(code); |
} |
/* |
* Studies Plans Administration Services |
* |
*/ |
public void addNewStudiesPlan(long courseId,CourseStudiesPlan studiesPlan,UserSession session) |
{ |
Course c = DaoFactory.getCourseDaoImpl().load(courseId); |
studiesPlan.setCourse(c); |
c.getStudiesPlans().add(studiesPlan); |
DaoFactory.getCourseStudiesPlanDaoImpl().save(studiesPlan); |
} |
public CourseStudiesPlanImpl cloneVersionFrom(long sourcePlanId, long targetPlanId, long courseId, UserSession session) |
{ |
Course course = DaoFactory.getCourseDaoImpl().load(courseId); |
CourseStudiesPlan source = null; |
CourseStudiesPlan target = null; |
for(CourseStudiesPlan plan: course.getStudiesPlans()) |
{ |
if(plan.getId() == sourcePlanId) |
source = plan; |
else if(plan.getId() == targetPlanId) |
target = plan; |
} |
target.setXml(source.getXml()); |
target.setJson(source.getJson()); |
return (CourseStudiesPlanImpl) DaoFactory.getCourseStudiesPlanDaoImpl().narrow(target); |
} |
public Curso loadCursoPlanoFromXml(String xml) |
{ |
try { |
if(xml != null) |
{ |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
Unmarshaller unmarshaller = jc.createUnmarshaller(); |
Curso curso = (Curso) unmarshaller.unmarshal(new StringReader(xml)); |
return curso; |
} |
return null; |
} catch (JAXBException e) { |
logger.error(e,e); |
return null; |
} |
} |
/** |
* Persist the edited studies plan |
* Updates studiesPlanVersion |
* Updates studiesPlanVersionDescription |
* Updates PlanoEstudos XML and JSON |
* |
* @param courseId |
* @param coursePlanId |
* @param planoEditado |
* @param courseStudiesPlanEditado |
* @return |
*/ |
public Course savePlanoEstudosEditado(long courseId, long coursePlanId, Curso planoEditado, CourseStudiesPlan courseStudiesPlanEditado,UserSession session) |
{ |
try { |
Course course = DaoFactory.getCourseDaoImpl().load(courseId); |
for(CourseStudiesPlan courseStudiesPlanPersistente: course.getStudiesPlans()) |
{ |
if(courseStudiesPlanPersistente.getId() == coursePlanId) |
{ |
courseStudiesPlanPersistente.setVersion(courseStudiesPlanEditado.getVersion()); |
courseStudiesPlanPersistente.setVersionDescription(courseStudiesPlanEditado.getVersionDescription()); |
//REMOVED UNIDADES TO REMOVE |
for(Curso.Semestre semestre:planoEditado.getSemestre()) |
{ |
Iterator<UnidadeType> uIter = semestre.getUnidade().iterator(); |
while(uIter.hasNext()) |
{ |
UnidadeType unidade = uIter.next(); |
if(unidade.getRemoved() != null && unidade.getRemoved().equals("true")) |
uIter.remove(); |
} |
for(Curso.Semestre.Perfil perfil: semestre.getPerfil()) |
{ |
Iterator<UnidadeType> uIter2 = perfil.getUnidade().iterator(); |
while(uIter2.hasNext()) |
{ |
UnidadeType unidade = uIter2.next(); |
if(unidade.getRemoved() != null && unidade.getRemoved().equals("true")) |
uIter2.remove(); |
} |
} |
} |
//Garante-se mas depois não vai para o JSON |
planoEditado.setSiges(course.getCode());//GARANTIR QUE O CODIGO SIGEST ESTA CORRECTO |
planoEditado.setNome(course.getName()); |
planoEditado.setDep(course.getArea()); |
//planoEditado.setDepDesc(""); |
//planoEditado.setDepDescEn(""); |
//planoEditado.setDepDescEs(""); |
//planoEditado.setDepDescFr(""); |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
Marshaller marshaller = jc.createMarshaller(); |
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); |
StringWriter xml = new StringWriter(); |
marshaller.marshal(planoEditado,xml); |
courseStudiesPlanPersistente.setXml(xml.toString()); |
String json = getGensonPlanoEstudos().serialize(planoEditado); |
//SETTING JSON in COURSE STUDIES PLAN |
courseStudiesPlanPersistente.setJson(json); |
break; |
} |
} |
return course; |
} catch (JAXBException e) { |
logger.error(e,e); |
return null; |
} catch (TransformationException e) { |
logger.error(e,e); |
return null; |
} catch (IOException e) { |
logger.error(e,e); |
return null; |
} |
} |
public void generateFreshJsonPlanosEstudosFromXml(UserSession session) |
{ |
List<CourseStudiesPlan> coursePlans = DaoFactory.getCourseStudiesPlanDaoImpl().findAll(); |
for(CourseStudiesPlan courseStudiesPlanPersistente: coursePlans) |
{ |
try |
{ |
logger.info("Generating JSON for " + courseStudiesPlanPersistente.getCourse().getName() + " version: " + courseStudiesPlanPersistente.getVersion()); |
Curso cursoPlano = loadCursoPlanoFromXml(courseStudiesPlanPersistente.getXml()); |
if(cursoPlano != null) |
{ |
for(Curso.Semestre s : cursoPlano.getSemestre()) |
{ |
SemestreImpl.setDescriptionsDefaults(s); |
} |
//send to XML again |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
Marshaller marshaller = jc.createMarshaller(); |
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); |
StringWriter xml = new StringWriter(); |
marshaller.marshal(cursoPlano,xml); |
courseStudiesPlanPersistente.setXml(xml.toString()); |
String json = getGensonPlanoEstudos().serialize(cursoPlano); |
//SETTING JSON in COURSE STUDIES PLAN |
courseStudiesPlanPersistente.setJson(json); |
} |
} |
catch(Throwable e) |
{ |
logger.error(e,e); |
} |
} |
logger.info("GENERATING JSON FOR CLASS COURSE"); |
for(Course course: DaoFactory.getCourseDaoImpl().findAll()) |
{ |
try { |
logger.info("generating json for course: " + course.getName() + " (" + course.getCode() + ")"); |
generateCourseJson(course); |
} catch (IOException e) { |
logger.error(e,e); |
} catch (TransformationException e) { |
logger.error(e, e); |
} |
} |
} |
public List<CourseDepartment> loadDepartments() |
{ |
List<CourseDepartment> departments = DaoFactory.getCourseDepartmentDaoImpl().findAll(); |
for(CourseDepartment dep: departments) |
dep.getName(); |
return departments; |
} |
public Teacher addTeacherCommission(String teacherId,String courseId, UserSession session) |
{ |
Course course = DaoFactory.getCourseDaoImpl().load(new Long(courseId)); |
Teacher t = DaoFactory.getTeacherDaoImpl().load(new Long(teacherId)); |
t.addRole(course.getValidationRole()); |
return t; |
} |
public Teacher removeTeacherCommission(String teacherId,String courseId, UserSession session) |
{ |
Course course = DaoFactory.getCourseDaoImpl().load(new Long(courseId)); |
Teacher t = DaoFactory.getTeacherDaoImpl().load(new Long(teacherId)); |
t.removeRole(course.getValidationRole()); |
return t; |
} |
public static void main(String[] args) |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
new CoursesService().generateFreshJsonPlanosEstudosFromXml(null); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/UpdateDepartmentsTask.java |
---|
New file |
0,0 → 1,171 |
package pt.estgp.estgweb.services.courses; |
import jomm.dao.impl.AbstractDao; |
import pt.estgp.estgweb.domain.CourseDepartment; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.dao.impl.CourseDepartmentDaoImpl; |
import pt.estgp.estgweb.utils.ConfigProperties; |
/** |
* Created by jorgemachado on 15/09/16. |
* |
* to be called from ANT tasks |
* |
* |
* UPDATE DO MYSQL PARA OS DEPARTAMENTOS |
* |
* 1 - FAZER O UPDATE HIBERNATE SQL - Ira criar a tabela de departamentos |
* As chaves estrangeiras não poderão ser criadas porque existem falhas de linkagem |
* 2 - Correr esta tarefa - Irá criar os departamentos ant -f inportRoutines.xml updateCourseDepartments |
* 3 - Correr novamente o update hibernate sql e a chave será atualizada |
*/ |
public class UpdateDepartmentsTask |
{ |
public static void main(String [] args) |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
new UpdateDepartmentsTask().updateDepartmentsDefault(); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
} |
/** |
* Check default departments if they already exist in database |
* ESECS |
* a) Comunicação, Artes e Tecnologias; CAT |
* b) Educação e Formação; EF |
* c) Intervenção e Desenvolvimento Social. IDS |
* |
* ESTG |
* a) Tecnologias e Design TD |
* b) Ciências Empresariais, Sociais e Humanas”. CESH |
* |
* ESAE |
* a) Agricultura e Recursos Naturais ARN |
* b) Ciência e Tecnologia Animal CTA |
* |
* ESSP |
* |
* a) Ciências e Tecnologias da Saúde |
* |
* Properties |
* institution.code.prefix.inverse.ESTG=1 |
institution.code.prefix.inverse.ESAE=2 |
institution.code.prefix.inverse.ESECS=3 |
institution.code.prefix.inverse.ESS=4 |
*/ |
public void updateDepartmentsDefault() |
{ |
CourseDepartmentDaoImpl dao = DaoFactory.getCourseDepartmentDaoImpl(); |
/* |
* ESECS |
* */ |
String sigla = "cat"; |
String nome = "Comunicação, Artes e Tecnologias"; |
String nomeEn = "Comunication Arts and Technology"; |
String nomeEs = "Comunicación, Artes y Tecnologías"; |
String nomeFr = "Communication, Arts et Technologies"; |
String institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESECS"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
sigla = "ef"; |
nome = "Educação e Formação"; |
nomeEn = "Education and training"; |
nomeEs = "Educación y formación"; |
nomeFr = "Éducation et formation"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESECS"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
sigla = "ids"; |
nome = "Intervenção e Desenvolvimento Social"; |
nomeEn = "Intervention and Social Development"; |
nomeEs = "Intervención y Desarrollo Social"; |
nomeFr = "Intervention et du Développement social"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESECS"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
/** |
* ESTG |
*/ |
sigla = "td"; |
nome = "Tecnologias e Design"; |
nomeEn = "Technology and Design"; |
nomeEs = "Tecnología y Diseño"; |
nomeFr = "Technologie et Design"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESTG"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
sigla = "cesh"; |
nome = "Ciências Empresariais, Sociais e Humanas"; |
nomeEn = "Business Sciences, Social and Human"; |
nomeEs = "Ciencias empresariales, Social y Humano"; |
nomeFr = "Entreprise Sciences, Sciences sociales et humaines"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESTG"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
/** |
* ESAE |
*/ |
sigla = "arn"; |
nome = "Agricultura e Recursos Naturais"; |
nomeEn = "Agriculture and Natural Resources"; |
nomeEs = "Agricultura y Recursos Naturales"; |
nomeFr = "Agriculture et ressources naturelles"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESAE"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
sigla = "cta"; |
nome = "Ciência e Tecnologia Animal"; |
nomeEn = "Animal Science and Technology"; |
nomeEs = "Ciencia y Tecnología Animal"; |
nomeFr = "Animal Science et technologie"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESAE"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
/** |
* ESSP |
*/ |
sigla = "cts"; |
nome = "Ciências e Tecnologias da Saúde"; |
nomeEn = "Science and Health Technologies"; |
nomeEs = "Ciencia y Salud Tecnologías"; |
nomeFr = "Sciences et technologies de la santé"; |
institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse.ESS"); |
createDepartment(dao, sigla, nome, nomeEn, nomeEs, nomeFr, institutionalCode); |
} |
private void createDepartment(CourseDepartmentDaoImpl dao, String sigla, String nome, String nomeEn, String nomeEs, String nomeFr, String institutionalCode) { |
CourseDepartment courseDepartment = dao.findBySigla(sigla); |
if(courseDepartment == null) |
{ |
courseDepartment = DomainObjectFactory.createCourseDepartmentImpl(); |
courseDepartment.setSigla(sigla); |
courseDepartment.setInstitutionalCode(institutionalCode); |
courseDepartment.setName(nome); |
courseDepartment.setNameEn(nomeEn); |
courseDepartment.setNameEs(nomeEs); |
courseDepartment.setNameFr(nomeFr); |
courseDepartment.setActive(true); |
dao.save(courseDepartment); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/xsd/PerfilImpl.java |
---|
New file |
0,0 → 1,18 |
package pt.estgp.estgweb.services.courses.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 15/09/16. |
*/ |
public class PerfilImpl extends Curso.Semestre.Perfil { |
public List<UnidadeType> getUnidade() { |
if (unidade == null) { |
unidade = new DynamicArrayList<UnidadeType>(UnidadeImpl.class); |
} |
return this.unidade; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/xsd/SemestreImpl.java |
---|
New file |
0,0 → 1,117 |
package pt.estgp.estgweb.services.courses.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 15/09/16. |
*/ |
public class SemestreImpl extends Curso.Semestre |
{ |
public List<UnidadeType> getUnidade() { |
if (unidade == null) { |
unidade = new DynamicArrayList<UnidadeType>(UnidadeImpl.class); |
} |
return this.unidade; |
} |
public List<Curso.Semestre.Perfil> getPerfil() { |
if (perfil == null) { |
perfil = new DynamicArrayList<Perfil>(PerfilImpl.class); |
} |
return this.perfil; |
} |
private static String getSemestreDescAux(String id) |
{ |
if(id.equals("S1")) |
return "Semestre 1"; |
else if(id.equals("S2")) |
return "Semestre 2"; |
else if(id.equals("S3")) |
return "Semestre 3"; |
else if(id.equals("S4")) |
return "Semestre 4"; |
else if(id.equals("S5")) |
return "Semestre 5"; |
else if(id.equals("S6")) |
return "Semestre 6"; |
else if(id.equals("T1")) |
return "Trimestre 1"; |
else if(id.equals("T2")) |
return "Trimestre 2"; |
else if(id.equals("T3")) |
return "Trimestre 3"; |
else if(id.equals("T4")) |
return "Trimestre 4"; |
else if(id.equals("T5")) |
return "Trimestre 5"; |
else if(id.equals("T6")) |
return "Trimestre 6"; |
else if(id.equals("T7")) |
return "Trimestre 7"; |
else if(id.equals("T8")) |
return "Trimestre 8"; |
return ""; |
} |
private static String getSemestreDescAuxEn(String id) |
{ |
if(id.equals("S1")) |
return "Semester 1"; |
else if(id.equals("S2")) |
return "Semester 2"; |
else if(id.equals("S3")) |
return "Semester 3"; |
else if(id.equals("S4")) |
return "Semester 4"; |
else if(id.equals("S5")) |
return "Semester 5"; |
else if(id.equals("S6")) |
return "Semester 6"; |
else if(id.equals("T1")) |
return "Quarter 1"; |
else if(id.equals("T2")) |
return "Quarter 2"; |
else if(id.equals("T3")) |
return "Quarter 3"; |
else if(id.equals("T4")) |
return "Quarter 4"; |
else if(id.equals("T5")) |
return "Quarter 5"; |
else if(id.equals("T6")) |
return "Quarter 6"; |
else if(id.equals("T7")) |
return "Quarter 7"; |
else if(id.equals("T8")) |
return "Quarter 8"; |
return ""; |
} |
public void setId(String semestre) |
{ |
super.setId(semestre); |
setDescriptionsDefaults(this); |
} |
public static void setDescriptionsDefaults(Curso.Semestre semestre) |
{ |
if(!semestre.getId().equals("OP")) |
{ |
semestre.setSemestreDesc(getSemestreDescAux(semestre.getId())); |
semestre.setSemestreDescEn(getSemestreDescAuxEn(semestre.getId())); |
semestre.setSemestreDescEs(getSemestreDescAux(semestre.getId())); |
semestre.setSemestreDescFr(getSemestreDescAux(semestre.getId())); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/xsd/UnidadeImpl.java |
---|
New file |
0,0 → 1,14 |
package pt.estgp.estgweb.services.courses.xsd; |
/** |
* Created by jorgemachado on 15/09/16. |
*/ |
public class UnidadeImpl extends UnidadeType { |
public UnidadeType.HorasContacto getHorasContacto() { |
if(horasContacto == null) |
horasContacto = new HorasContacto(); |
return horasContacto; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/xsd/CursoImpl.java |
---|
New file |
0,0 → 1,21 |
package pt.estgp.estgweb.services.courses.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 15/09/16. |
*/ |
public class CursoImpl extends Curso |
{ |
public List<Semestre> getSemestre() { |
if (semestre == null) { |
semestre = new DynamicArrayList<Semestre>(SemestreImpl.class); |
} |
return this.semestre; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/SaveCourseUnitEvaluation.java |
---|
215,7 → 215,7 |
} |
else |
{ |
repositoryService.updateRepositoryFile(cu.getEvaluationStreamId(), new FileInputStream(path), "application/pdf", "pdf", ((int)new File(path).length()),cu.getCode() + "-evaluation.pdf", "evaluation.evaluation.description " + cu.getName(), ResourceAccessControlEnum.privateDomain); |
repositoryService.updateRepositoryFile(cu.getEvaluationStreamId(), new FileInputStream(path), "application/pdf", "pdf", ((int)new File(path).length()),cu.getCode() + "-evaluation.pdf", "evaluation.evaluation.description " + cu.getName(), ResourceAccessControlEnum.courseunitEvaluationDomain); |
} |
//Obrigar a ser falso |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitAdminService.java |
---|
48,7 → 48,7 |
} |
cUV.persistViewAdminInObject(courseUnit); |
courseUnit.setInstitutionCode("" + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()); |
//por o curso |
//por os profs |
//por alunos |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransport.java |
---|
New file |
0,0 → 1,135 |
package pt.estgp.estgweb.services.email.impl; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.MessagingException; |
import javax.mail.PasswordAuthentication; |
import javax.mail.Session; |
import javax.mail.Transport; |
import java.util.Properties; |
/** |
* Created by jorgemachado on 13/06/16. |
*/ |
public class EmailTransport |
{ |
private static final Logger logger = Logger.getLogger(EmailTransport.class); |
Session session = null; |
Transport transport = null; |
String sendFromAddress; |
String password; |
String identifier; |
public EmailTransport(String identifier, String sendFromAddress,String password) |
{ |
this.identifier = identifier; |
this.sendFromAddress = sendFromAddress; |
this.password = password; |
} |
public synchronized Transport getEmailTransport() |
{ |
if(session == null || transport == null || !transport.isConnected()) |
{ |
logger.info("Transport(" + identifier + ") CONNECTION TO TRANSPORT DOES NOT EXIST OR FAIL WILL REOPEN : " + sendFromAddress + " password: " + password); |
} |
else |
{ |
System.out.println("Transport(" + identifier + ") OK --> RETURNING Transport"); |
return transport; |
} |
// Set up properties for mail session |
//Properties props = System.getProperties(); |
Properties props = new Properties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
props.setProperty("mail.transport.protocol", "smtp");//todo new |
javax.mail.Authenticator authenticator = null; |
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
logger.info("Transport(" + identifier + ") Using Email Security TLS"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
logger.info("Transport(" + identifier + ") Using Email Security SSL"); |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
} |
System.out.println("Transport(" + identifier + ") Autenticator != null :" + (authenticator != null)); |
// Get session |
/*Session session = authenticator != null ? |
Session.getDefaultInstance(props, authenticator) |
: Session.getDefaultInstance(props) ; |
*/ |
session = authenticator != null ? |
Session.getInstance(props, authenticator) |
: Session.getInstance(props) ; |
try { |
transport = session.getTransport("smtp"); |
System.out.println("Transport(" + identifier + ") before connect isConnected:" + transport.isConnected()); |
transport.connect(); |
System.out.println("Transport(" + identifier + ") after connect isConnected:" + transport.isConnected()); |
} catch (MessagingException e) { |
logger.error(e,e); |
return null; |
} |
session.setDebug(true); |
session.setDebugOut(System.out); |
return transport; |
} |
public String getIdentifier() { |
return identifier; |
} |
public Session getSession() { |
return session; |
} |
public Transport getTransport() { |
return transport; |
} |
public String getSendFromAddress() { |
return sendFromAddress; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransportPool.java |
---|
New file |
0,0 → 1,89 |
package pt.estgp.estgweb.services.email.impl; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.Transport; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 13/06/16. |
*/ |
public class EmailTransportPool |
{ |
private static final Logger logger = Logger.getLogger(EmailTransportPool.class); |
private List<EmailTransport> pool = new ArrayList<EmailTransport>(); |
//SINGLETON INSTANCE |
static EmailTransportPool instance = new EmailTransportPool(); |
public static EmailTransportPool getInstance(){ |
return instance; |
} |
String[] serverEmails; |
private EmailTransportPool() |
{ |
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT]; |
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++) |
{ |
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX; |
} |
if(Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN) |
{ |
for(String emailFrom: serverEmails) |
{ |
String pass = Globals.EMAIL_SERVER_PASSWORD; |
logger.info("POOL: Adding to POOL " + emailFrom + " with pass: " + pass); |
createTransport(emailFrom,emailFrom,pass); |
} |
} |
else |
{ |
logger.info("POOL: Will use only system mail box"); |
createTransport(Globals.SYSTEM_EMAIL_BOX,Globals.SYSTEM_EMAIL_BOX,Globals.EMAIL_SERVER_PASSWORD); |
} |
} |
private void createTransport(String identifier, String emailFrom, String emailServerPassword) |
{ |
EmailTransport emailTransport = new EmailTransport(identifier,emailFrom,emailServerPassword); |
pool.add(emailTransport); |
} |
int indexPool = -1; |
public synchronized EmailTransport getAvailableTransportFromPool() |
{ |
int tries = pool.size(); |
while(tries > 0) |
{ |
tries--; |
indexPool++; |
if(indexPool >= pool.size()) |
indexPool = 0; |
EmailTransport emailTransport = pool.get(indexPool); |
Transport transport = emailTransport.getEmailTransport(); |
if(transport.isConnected()) |
{ |
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is OK connected, will return this one"); |
return emailTransport; |
} |
else |
{ |
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is not connected, will try another"); |
} |
} |
logger.warn("EMAIL POOL: Transport (There are no available transports)"); |
return null; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJob.java |
---|
33,50 → 33,66 |
//TODO WHEN BACK TO BCC REMOVE this to 20 and remove Thread |
private static final int NUMBER_EMAILS_TO = 1; |
private static final int pauseTime = 1000; |
public void runJob() |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
List<String> recipientsOriginal = new ArrayList<String>(); |
List<String> recipients = new ArrayList<String>(); |
recipients.addAll(email.getRecipients()); |
recipientsOriginal.addAll(email.getRecipients()); |
while(recipients.size() > 0) |
{ |
List<String> recipientsToSend = new ArrayList<String>(); |
final Email cloned = email.cloneEmailForJob(); |
logger.info("Opening new Thread to send emails"); |
new Thread( |
new Runnable() { |
@Override |
public void run() { |
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
List<String> recipientsOriginal = new ArrayList<String>(); |
List<String> recipients = new ArrayList<String>(); |
recipients.addAll(cloned.getRecipients()); |
recipientsOriginal.addAll(cloned.getRecipients()); |
while(recipients.size() > 0) |
{ |
List<String> recipientsToSend = new ArrayList<String>(); |
int contador = 0; |
Iterator<String> iter = recipients.iterator(); |
while(iter.hasNext() && contador < 20) |
{ |
recipientsToSend.add(iter.next()); |
iter.remove(); |
contador++; |
int contador = 0; |
Iterator<String> iter = recipients.iterator(); |
while(iter.hasNext() && contador < NUMBER_EMAILS_TO) |
{ |
recipientsToSend.add(iter.next()); |
iter.remove(); |
contador++; |
} |
cloned.setRecipients(recipientsToSend); |
new SendEmailService().sendEmail(cloned); |
try { |
Thread.sleep(pauseTime); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
cloned.setRecipients(recipientsOriginal); |
} |
catch (ServiceException e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
} |
} |
email.setRecipients(recipientsToSend); |
new SendEmailService().sendEmail(email); |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
email.setRecipients(recipientsOriginal); |
} |
catch (ServiceException e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
).start(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java |
---|
5,13 → 5,17 |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.enums.LangEnum; |
import pt.estgp.estgweb.services.email.impl.EmailTransport; |
import pt.estgp.estgweb.services.email.impl.EmailTransportPool; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import javax.mail.*; |
import javax.mail.Message; |
import javax.mail.MessagingException; |
import javax.mail.internet.InternetAddress; |
import javax.mail.internet.MimeMessage; |
import java.io.UnsupportedEncodingException; |
19,7 → 23,6 |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
import java.util.Properties; |
/** |
* @author Jorge Machado |
33,16 → 36,123 |
private static final String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE; |
static String[] serverEmails; |
/*static String sendFromAddress;*/ |
public SendEmailService() { |
} |
/*static String[] serverEmails; |
static int serverEmailPos = -1; |
static Session session = null; |
static Transport transport = null; |
static{ |
static |
{ |
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT]; |
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++) |
{ |
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX; |
} |
} |
public static synchronized Transport getEmailTransport() |
{ |
if(session == null || transport == null || !transport.isConnected()) |
{ |
sendFromAddress = Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN ? |
getRoundRobinEmailUser() : Globals.SYSTEM_EMAIL_BOX; |
logger.info("CONNECTION TO TRANSPORT FAIL WILL REOPEN : " + sendFromAddress + " using round robin: " + Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN); |
} |
else |
{ |
System.out.println("TRANSPORT OK RETURNING"); |
return transport; |
} |
// Set up properties for mail session |
//Properties props = System.getProperties(); |
Properties props = new Properties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
props.setProperty("mail.transport.protocol", "smtp");//todo new |
final String username = Globals.EMAIL_SERVER_USERNAME; |
final String password = Globals.EMAIL_SERVER_PASSWORD; |
javax.mail.Authenticator authenticator = null; |
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
logger.info("Using Email Security TLS"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
logger.info("Using Email Security SSL"); |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
} |
System.out.println("Autenticator != null :" + (authenticator != null)); |
// Get session |
//Session session = authenticator != null ? |
// Session.getDefaultInstance(props, authenticator) |
// : Session.getDefaultInstance(props) ; |
session = authenticator != null ? |
Session.getInstance(props, authenticator) |
: Session.getInstance(props) ; |
try { |
System.out.println("toString:" + session.getTransport("smtp").toString()); |
transport = session.getTransport("smtp"); |
System.out.println("before connect isConnected:" + transport.isConnected()); |
transport.connect(); |
System.out.println("after connect isConnected:" + transport.isConnected()); |
} catch (MessagingException e) { |
logger.error(e,e); |
return null; |
} |
session.setDebug(true); |
session.setDebugOut(System.out); |
return transport; |
} |
private static synchronized String getRoundRobinEmailUser() |
{ |
serverEmailPos++; |
52,64 → 162,31 |
} |
return serverEmails[serverEmailPos]; |
} |
*/ |
public void sendEmail(Email email) throws ServiceException |
{ |
if(Globals.TEST_ENVIRONEMENT) |
sendEmail(email,null,null); |
} |
public void sendEmail(Email email,String url,String nome) throws ServiceException |
{ |
if(Globals.TEST_ENVIRONEMENT && !email.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try{ |
final String sendFromAddress = getRoundRobinEmailUser(); |
// Set up properties for mail session |
Properties props = System.getProperties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
final String username = Globals.EMAIL_SERVER_USERNAME; |
final String password = Globals.EMAIL_SERVER_PASSWORD; |
javax.mail.Authenticator authenticator = null; |
if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
//Transport transport = getEmailTransport(); |
//MimeMessage message = new MimeMessage(session); |
} |
EmailTransport emailTransport = EmailTransportPool.getInstance().getAvailableTransportFromPool(); |
MimeMessage message = new MimeMessage(emailTransport.getSession()); |
// Get session |
Session session = Session.getDefaultInstance(props, authenticator); |
session.setDebug(true); |
session.setDebugOut(System.out); |
// Create message |
MimeMessage message = new MimeMessage(session); |
// Set the recipients of the message |
boolean valid = false; |
for (String recipient : email.getRecipients()) |
117,23 → 194,41 |
if(Email.validEmail(recipient)) |
{ |
valid=true; |
message.addRecipient(email.getType(),new InternetAddress(recipient)); |
logger.info("Adding recipient to transport:"+recipient); |
message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient)); |
logger.info("Adding recipient (" + email.getType().toString() + ") to transport:"+recipient); |
} |
} |
if(email.getRecipientsCC() != null) |
{ |
for (String recipient : email.getRecipientsCC()) |
{ |
if(Email.validEmail(recipient)) |
{ |
//valid=true; |
message.addRecipient(Message.RecipientType.CC,new InternetAddress(recipient)); |
logger.info("Adding recipient CC (" + email.getType().toString() + ") to transport:"+recipient); |
} |
} |
} |
if(valid) |
{ |
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName()); |
// Format the mail message |
String fullMessage = MessageFormat.format(content, email.getArguments().toArray()); |
String fullMessage = getEmailTextMessage(email); |
if(url != null && nome != null) |
{ |
logger.info("Requesting certificated Email, will replace fields in template"); |
fullMessage = fullMessage.replaceAll("@USER_NOME@",nome); |
fullMessage = fullMessage.replaceAll("@URL@",url); |
} |
logger.info("FROM:" + email.getFrom() + " but using: " + sendFromAddress); |
logger.info("FROM:" + email.getFrom() + " but using: " + emailTransport.getSendFromAddress()); |
//if(email.getFromName() != null) |
try { |
message.setFrom(new InternetAddress(sendFromAddress,sendFromAddress)); |
message.setFrom(new InternetAddress(emailTransport.getSendFromAddress(),emailTransport.getSendFromAddress())); |
} catch (UnsupportedEncodingException e) { |
logger.error(e,e); |
//message.setFrom(new InternetAddress(sendFromAddress)); |
146,13 → 241,13 |
{ |
fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ? "<br/><br/>Responda para " + email.getFrom() : "<br/><br/>Por favor não responda a este email"; |
fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api através de baco 2015 </h5>"; |
fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api </h5>"; |
} |
else |
{ |
fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ? "\n\nResponda para " + email.getFrom() : "\n\nPor favor não responda a este email"; |
fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api através de baco 2015"; |
fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api "; |
} |
message.setText(fullMessage,"utf-8"); |
171,7 → 266,9 |
Transport.send(message); |
emailTransport.getTransport().send(message); |
//session.getTransport("smtp").sendMessage(message,message.getAllRecipients()); |
//session.getTransport().close(); |
} |
} |
catch(MessagingException e) |
181,6 → 278,22 |
} |
} |
private static String getEmailTextMessage(Email email) |
{ |
return getEmailTextMessage( email.getEmailTemplateName(), email.getArguments().toArray()); |
} |
public static String getEmailTextMessage(String template,List<String> arguments) |
{ |
return getEmailTextMessage(template, arguments.toArray()); |
} |
public static String getEmailTextMessage(String template,Object[] arguments) |
{ |
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" +template); |
// Format the mail message |
return MessageFormat.format(content, arguments); |
} |
public Email getSendUrlToFriendEmail(String url, String from, LangEnum langEnum, List<String> recipients) |
{ |
List<String> arguments = new ArrayList<String>(); |
293,6 → 406,95 |
return email; |
} |
public Email getMessageEmailAdulteredFromEmailIpp(String fromEmail, String from, String subject,String text, List<String> emails, User user) |
{ |
// # 0 : From |
// # 1 : Subject |
// # 2 : Text |
// # 3 : FromEmail Adultered in message |
// # 4 : URL todo with certificate |
List<String> arguments = new ArrayList<String>(); |
arguments.add(from); |
arguments.add(subject); |
arguments.add(text); |
arguments.add(fromEmail); |
String template; |
template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT; |
List<String> recipients = new ArrayList<String>(); |
for(String e: emails) |
{ |
if(Email.validEmail(e)) |
recipients.add(e); |
} |
logger.info("subject: " + subject); |
if(fromEmail == null) |
logger.info("user: " + user.getEmail()); |
else |
logger.info("user altered to: " + fromEmail); |
logger.info("template: " + template); |
logger.info("arguments:"); |
for(String arg: arguments) |
logger.info(arg); |
logger.info("recipients:"); |
for(String rec: recipients) |
logger.info(rec); |
logger.info("arguments end"); |
fromEmail = fromEmail == null ? user.getEmail() : fromEmail; |
Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.TO); |
email.setFromName(from + " (PAE-IPP)"); |
return email; |
} |
public EmailPersonalizedCertificated getMessageEmailAdulteredFromEmailIppCertificated( |
String fromEmail, String from, String subject,String text, User user, |
List<Long> userIds, |
String url |
) |
{ |
// # 0 : From |
// # 1 : Subject |
// # 2 : Text |
// # 3 : FromEmail Adultered in message |
// # 4 : URL todo with certificate |
List<String> arguments = new ArrayList<String>(); |
arguments.add(from); |
arguments.add(subject); |
arguments.add(text); |
arguments.add(fromEmail); |
String template; |
template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED; |
logger.info("Preparing batch work for Personalized Emails Certificated"); |
logger.info("subject: " + subject); |
if(fromEmail == null) |
logger.info("user: " + user.getEmail()); |
else |
logger.info("user altered to: " + fromEmail); |
logger.info("template: " + template); |
logger.info("arguments:"); |
for(String arg: arguments) |
logger.info(arg); |
logger.info("userIds:" + userIds); |
logger.info("arguments end"); |
fromEmail = fromEmail == null ? user.getEmail() : fromEmail; |
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject ,fromEmail,template,arguments, |
url, |
userIds); |
email.setFromName(from + " (PAE-IPP)"); |
return email; |
} |
public Email getMessageEmailOld(String from, String subject,String text, LangEnum langEnum, String target, List<User> users, User user) |
{ |
// # 0 : From |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/Emails.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJobPersonalizedCertificated.java |
---|
New file |
0,0 → 1,143 |
package pt.estgp.estgweb.services.email; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.authenticate.AuthenticateService; |
import pt.estgp.estgweb.services.jobs.JobHandler; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 11/Jul/2008 |
* @see pt.estgp.estgweb.services.sms |
*/ |
public class EMAILJobPersonalizedCertificated implements JobHandler, Serializable |
{ |
private static final Logger logger = Logger.getLogger(EMAILJobPersonalizedCertificated.class); |
private EmailPersonalizedCertificated email; |
public EMAILJobPersonalizedCertificated(EmailPersonalizedCertificated email) |
{ |
this.email = email; |
} |
private static final int pauseTime = 1000; |
public void runJob() |
{ |
final EmailPersonalizedCertificated cloned = email.cloneEmailForJob(); |
logger.info("Opening new Thread to send emails"); |
new Thread( |
new Runnable() { |
@Override |
public void run() { |
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
String URL_PREFIX = cloned.getUrlPatternWithoutCetificate(); |
if(URL_PREFIX.indexOf("?") < 0) |
URL_PREFIX = URL_PREFIX + "?certificate="; |
else |
URL_PREFIX = URL_PREFIX + "&certificate="; |
cloned.setRecipients(new ArrayList<String>()); |
SendEmailService sendEmailService = new SendEmailService(); |
int count = 0; |
int size = cloned.getUserIds().size(); |
for(long userId: cloned.getUserIds()) |
{ |
count++; |
logger.info("Users completed: " + count + "/" + size + " --> " + (100.0 * ((float)count) / ((float)size)) + "%"); |
try{ |
AbstractDao.getCurrentSession().beginTransaction(); |
AbstractDao.getCurrentSession().clear(); |
User user = DaoFactory.getUserDaoImpl().load(userId); |
String certificate = new AuthenticateService().createCertificate(user); |
String emailStr = user.getEmail(); |
String outEmail = user.getOutEmail(); |
String preferrefEmail = user.getPreferrefEmail(); |
String toEmail = null; |
if(preferrefEmail != null && Email.validEmail(preferrefEmail)) |
toEmail = preferrefEmail; |
else if(emailStr != null && Email.validEmail(emailStr)) |
toEmail = emailStr; |
else if(outEmail != null && Email.validEmail(outEmail)) |
toEmail = outEmail; |
String nome = user.getName(); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
if(toEmail != null) |
{ |
List<String> ccEmails = new ArrayList<String>(); |
if(emailStr != null && Email.validEmail(emailStr) && !toEmail.equals(emailStr)) |
ccEmails.add(emailStr); |
if(outEmail != null && Email.validEmail(outEmail) && !toEmail.equals(outEmail)) |
ccEmails.add(outEmail); |
cloned.setRecipientsCC(ccEmails); |
cloned.getRecipients().clear(); |
cloned.getRecipients().add(toEmail); |
String finalUrl = URL_PREFIX + certificate; |
sendEmailService.sendEmail(cloned, finalUrl, nome); |
try { |
logger.info("Watting to send another email: sent to" + toEmail); |
//Thread.sleep(pauseTime); |
Thread.sleep(pauseTime); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
}catch(Throwable e) |
{ |
logger.error(e,e); |
} |
} |
logger.info("No more user ids to send email. exiting"); |
} |
catch (Throwable e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
} |
} |
).start(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java |
---|
59,6 → 59,7 |
int studentsChangeBI = 0; |
int unitsAddedToStudents = 0; |
int alunosErasmusCadeirasEcontradas = 0; |
int alunosSemTurmaParaAUnidades = 0; |
int turmaMoreThanOneRegularCourse = 0; |
int unidadesProcuradasNumCursoAleatorio = 0; |
List<String> turmasMoreThanOneCourse = new ArrayList<String>(); |
67,6 → 68,8 |
int estudantesComCadeirasSemTurma = 0; |
int turmasComCodigoNullRemovidas = 0; |
int unidadesSoComAlunosExtra = 0; |
int turmasVindasANullDoSIGES = 0; |
int turmasVindasANullDoSIGESEncontradasNoutroCampo = 0; |
102,6 → 105,8 |
turmasComCodigoNullRemovidas = 0; |
unidadesSoComAlunosExtra = 0; |
unidadesProcuradasNumCursoAleatorio = 0; |
alunosSemTurmaParaAUnidades = 0; |
turmasVindasANullDoSIGES = 0; |
ImportCourseService.resetCourseYearTurmaPolicy(); |
162,6 → 167,9 |
newUser = true; |
} |
//if(alunoSiges.getCodigo() == 11211) |
// System.out.println("Aqui"); |
persist(alunoSiges, s, newUser,year,institutionCode,activeImportYearParaVerificacaoDePropinasEmDia,logMessages,service); |
if(studentComUnidadesRepetidas) |
263,7 → 271,19 |
serviceLogInfo("#Units not Removed because localy added: " + unitsLocalAddedNotRemoved); |
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded); |
serviceLogInfo("#Alunos com Unidades repetidas: " + unitsRepeated); |
serviceLogInfo("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas); |
serviceLogWarn("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas); |
if(turmasVindasANullDoSIGES > 0) |
{ |
serviceLogError("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR, procure no LOG pela frase: (turmasVindasANullDoSIGES) "); |
} |
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0) |
{ |
serviceLogInfo("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG"); |
} |
if(alunosSemTurmaParaAUnidades > 0) |
{ |
serviceLogError("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)"); |
} |
if(unidadesProcuradasNumCursoAleatorio > 0) |
serviceLogInfo("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")"); |
if(turmaMoreThanOneRegularCourse > 0) |
325,6 → 345,18 |
logger.info("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded); |
logger.info("#Alunos com Unidades repetidas: " + unitsRepeated); |
logger.info("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas); |
if(turmasVindasANullDoSIGES > 0) |
{ |
logger.error("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR procure no LOG pela frase: (turmasVindasANullDoSIGES) "); |
} |
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0) |
{ |
logger.info("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG"); |
} |
if(alunosSemTurmaParaAUnidades > 0) |
{ |
logger.error("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)"); |
} |
if(unidadesProcuradasNumCursoAleatorio > 0) |
logger.warn("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")"); |
510,16 → 542,18 |
"where courseunit.importYear=\"" + year + "\" and courseunit.institutionCode = \"" + institutionCode + "\" and turmas.studentId is null "); |
ResultSet rs = ps.executeQuery(); |
List<Integer> longs = new ArrayList<Integer>(); |
//alunosSemTurmaParaAUnidades = longs.size(); |
while(rs.next()) |
{ |
longs.add(rs.getInt("sigesCode")); |
} |
alunosSemTurmaParaAUnidades = longs.size(); |
rs.close(); |
ps.close(); |
if(longs.size() > 0) |
{ |
String msgS = "Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar"; |
String msgS = "(alunosSemTurmaParaAUnidades) ATENÇÃO_ Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar"; |
serviceLogWarn(msgS); |
logger.warn(msgS); |
msgS = ""; |
568,8 → 602,8 |
estudantesDesaparecidosDoSigesNesteAno++; |
Student s = DaoFactory.getStudentDaoImpl().loadBySigesCode(c); |
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(s); |
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl); |
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>()); |
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode); |
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode); |
} |
} |
else |
835,8 → 869,8 |
serviceLogWarn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo()); |
logger.warn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo()); |
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student); |
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl); |
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>()); |
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode); |
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode); |
} |
else |
{ |
866,7 → 900,7 |
//PASSO 4 - Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente |
//turmas separadas : Seguro a verificação de existencia é feita pelo id da unidade curricular no baco nas verificacoes para remocoes |
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl); |
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl,institutionCode); |
//PASSO 5 - Consistir Turmas do Aluno com novas cadeiras - Turmas do aluno sem cadeira correspondente sao apagadas, novas sao adicionadas |
//Este metodo vai necessitar de obter as turmas das unidades que vieram do SIGES atraves do mapa map_CourseUnit_x_Turma |
874,11 → 908,11 |
//em termos de relacoes com turmas na classe CourseUnitTurma |
//deste modo se alguma unidade foi adicionada localmente poderá nao ser removida no PASSO 4 e nao havera correspondente |
//para a turma nesta tabela map_CourseUnit_x_Turma logo essas turmas nessas unidades nao serao mechidas, um aviso e emitido |
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma); |
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma,institutionCode); |
} |
} |
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma) { |
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma, int institutionCode) { |
//PASSO 1 Para cada cadeira onde o aluno se encontra inscrito |
// obter a turma onde o aluno esta' colocado, se nao existir criar e afectar a turma |
//PASSO 2 Colocar o aluno nessa turma se ele ainda lá nao estiver |
890,15 → 924,13 |
Map<CourseUnitTurma,Boolean> turmasAfectadas = new HashMap<CourseUnitTurma,Boolean>(); |
for(CourseUnit cu: student.getSubscribedUnits()) |
{ |
if(cu.getImportYear().equals(year)) |
if(cu.getImportYear().equals(year) && cu.getInstitutionCode().equals(""+institutionCode)) |
{ |
if(cu.getTurmas() == null) |
{ |
cu.setTurmas(new HashSet<CourseUnitTurma>()); |
} |
// TODO O CODIGO DA TURMA AQUI VEM ANUL NUM CASO QUALQUER ESQUISITO VER O QUE E NO RUN |
String codigoTurma = map_CourseUnit_x_Turma.get(cu); |
if(student.isLocalUnit(cu) && codigoTurma == null) |
{ |
906,14 → 938,14 |
//mas foi mantida porque foi adicionada manualmente |
//deste modo usaremos a turma antiga |
//e nao afetaremos uma turma nao afetada, esta nao sera verificada |
String msg = "Atenção turma com código null nao sera verificada e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode(); |
String msg = "Atenção turma não encontrada para uma unidade do aluno, A unidade não foi importada do SIGES logo não há turma mas nao sera verificada porque e' uma local unit:" + cu.getCode() + " aluno:" + student.getSigesCode(); |
serviceLogInfo(msg); |
logger.info(msg); |
} |
else if(codigoTurma == null) |
{ |
//Este caso nao deverá acontecer porque no PASSO 4 da persistencia apenas nao se removem as adicionadas localmente |
String msg = "Atenção turma com código null e nao e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode(); |
String msg = "Atenção turma não encontrada para uma unidade do aluno. A Unidade não foi importada do SIGES ou vinha com turma NULL, logo nao se sabe a turma do aluno para escolher, e não e' uma unidade LOCALMENTE ADICIONADA logo devia vir do SIGES ou ter sido removida - unit:" + cu.getCode() + " aluno:" + student.getSigesCode(); |
serviceLogError(msg); |
logger.error(msg); |
} |
943,7 → 975,7 |
while(iter.hasNext()) |
{ |
CourseUnitTurmaImpl turma = iter.next(); |
if(turma.getCourseUnit().getImportYear().equals(year)) |
if(turma.getCourseUnit().getImportYear().equals(year) && turma.getCourseUnit().getInstitutionCode().equals(institutionCode+"")) |
{ |
if(student.isLocalUnit(turma.getCourseUnit()) && turmasAfectadas.get(turma) == null) |
{ |
1006,12 → 1038,12 |
* @param unitsFromSigesPersistentInBaco |
* @param student |
*/ |
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student) { |
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student,int institutionCode) { |
Iterator<CourseUnit> iterNowUnits = student.getSubscribedUnits().iterator(); |
while(iterNowUnits.hasNext()) |
{ |
CourseUnit cUNow = iterNowUnits.next(); |
if(cUNow.getImportYear().equals(year)) |
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(""+institutionCode)) |
//Apenas tentamos apagar as unidades do ano corrente. |
//Este servico trabalha com unidades importadas do ano que e passado como argumento |
//Se importamos unidades desse ano, as dos outros anos nao vem na lista, logo |
1104,6 → 1136,22 |
Set<CourseUnit> unitsFromSigesPersistentInBaco = new HashSet<CourseUnit>(); |
for (Disciplina disciplina : alunoSiges.getDisciplinasInscrito()) |
{ |
if(disciplina.getCdTurma() == null) |
{ |
turmasVindasANullDoSIGES++; |
String msg = "(turmasVindasANullDoSIGES) ATENÇÃO ERRO: Existe uma turma a null numa inscrição vinda do SIGES, procurar razão: unidade:" + disciplina.getCodigo() + " estudante:" + student.getSigesCode() + " possivelmente campo de turma em uso é errado, Vamos tentar usar o campo de outra TURMA P, L, TP, P, O, C, E, S"; |
serviceLogWarn(msg); |
logger.warn(msg); |
if(disciplina.getOutraTurma() != null) |
{ |
turmasVindasANullDoSIGESEncontradasNoutroCampo++; |
disciplina.setCdTurma(disciplina.getOutraTurma()); |
msg = "Encontrada Outra Turma: Atenção vai ser usada a turma " + disciplina.getOutraTurmaCode(); |
serviceLogWarn(msg); |
logger.warn(msg); |
} |
} |
boolean cursoFicticio = isCursoFicticio(disciplina.getCodigoCurso().intValue()); |
Integer codigoDoCurso = disciplina.getCodigoCurso().intValue(); |
1214,7 → 1262,8 |
{ |
for(CourseUnit found: courseUnits) |
{ |
map_CourseUnit_x_Turma.put(found,disciplina.getCdTurma()); |
String turma = disciplina.getCdTurma(); |
map_CourseUnit_x_Turma.put(found, turma); |
} |
unitsFromSigesPersistentInBaco.addAll(courseUnits); |
1306,6 → 1355,31 |
} |
if(alunoSiges.getTiposAlunosRepresentados() != null) |
{ |
for(Aluno.TipoAluno tipo:alunoSiges.getTiposAlunosRepresentados()) |
{ |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_NORMAL)) |
student.setTipoAlunoNormal(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_ERASMUS)) |
student.setTipoAlunoErasmus(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_TRABALHADOR_ESTUDANTE)) |
student.setTipoAlunoTrabalhadorEstudante(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_BOLSEIRO)) |
student.setTipoAlunoBolseiro(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_BOMBEIRO)) |
student.setTipoAlunoBombeiro(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_DEFICIENTE)) |
student.setTipoAlunoDeficiente(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_DIRIGENTE_ASSOCIATIVO)) |
student.setTipoAlunoDirigenteAssociativo(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_MILITAR)) |
student.setTipoAlunoMilitar(true); |
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_VASCODAGAMA)) |
student.setTipoAlunoVascodagama(true); |
} |
} |
} |
/*private CourseUnit tryFindCourseUnitWithOutTurma(DefaultLogMessages logMessages, String cdDuracao, String codigo,String codigoCurso,String cdLectivo,String cdTurma) |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/AlunoDao.java |
---|
79,7 → 79,13 |
if (conn == null) { |
conn = getCurrentConnection(); |
} |
PreparedStatement catCMD = conn.prepareStatement("SELECT DISTINCT CSE.T_ALUNOS.CD_ALUNO AS CD_ALUNO FROM CSE.T_ALUNOS INNER JOIN (CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP) ON CSE.T_ALUNOS.CD_ALUNO = CSE.T_INSCRI.CD_ALUNO WHERE (((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "') AND ((CSE.T_ALUNOS.CD_SITUA_PAR)=1) AND ((CSE.T_INSCRI.CD_STATUS)<>5))"); |
PreparedStatement catCMD = conn.prepareStatement("SELECT DISTINCT " + |
" CSE.T_ALUNOS.CD_ALUNO AS CD_ALUNO " + |
"FROM CSE.T_ALUNOS " + |
"INNER JOIN (CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP) ON CSE.T_ALUNOS.CD_ALUNO = CSE.T_INSCRI.CD_ALUNO " + |
"WHERE (((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "') " + |
/*AND ((CSE.T_ALUNOS.CD_SITUA_PAR)=1)*/ |
" AND ((CSE.T_INSCRI.CD_STATUS)<>5))"); |
ResultSet aReader = catCMD.executeQuery(); |
while (aReader.next()) { |
codigos.add(getDecimal("CD_ALUNO", aReader)); |
101,12 → 107,19 |
if (conn == null) { |
conn = getCurrentConnection(); |
} |
PreparedStatement catCMD = conn.prepareStatement("SELECT * FROM " + getTable() + " INNER JOIN SIGES.T_INDIVIDUO on SIGES.T_INDIVIDUO.ID_INDIVIDUO = CSE.T_ALUNOS.ID_INDIVIDUO where CD_SITUA_PAR = 1 AND " + getIdColumn() + "=" + codigo); |
PreparedStatement catCMD = conn.prepareStatement("SELECT * FROM " + getTable() + " " + |
"INNER JOIN SIGES.T_INDIVIDUO on SIGES.T_INDIVIDUO.ID_INDIVIDUO = CSE.T_ALUNOS.ID_INDIVIDUO " + |
"where /*CD_SITUA_PAR = 1 AND*/ " + getIdColumn() + "=" + codigo); |
ResultSet aReader = catCMD.executeQuery(); |
if (aReader.next()) { |
Aluno a = load(aReader); |
a.disciplinasInscrito = loadDiscilpinasInscrito(codigo, codigoInstituicao, ano); |
a.historicos = getHistorico(codigo); |
obtainTiposAlunoRepresentados(codigo, ano, conn, a); |
aReader.close(); |
return a; |
} |
119,6 → 132,34 |
return null; |
} |
private void obtainTiposAlunoRepresentados(Integer codigo, String ano, Connection conn, Aluno a) throws SQLException { |
PreparedStatement tiposAluno = conn.prepareStatement( |
"SELECT DISTINCT CSE.T_TIPALUNO.CD_TIP_ALU AS CD_TIP_ALU, CSE.T_TBTIPALU.DS_TIP_ALU AS DS_TIP_ALU " + |
" FROM CSE.T_TIPALUNO " + |
" LEFT OUTER JOIN CSE.T_TBTIPALU ON CSE.T_TIPALUNO.CD_TIP_ALU = CSE.T_TBTIPALU.CD_TIP_ALU " + |
" where CSE.T_TIPALUNO.CD_ALUNO = " + codigo + " " + |
" AND CSE.T_TIPALUNO.CD_LECTIVO = '" + ano + "'"); |
ResultSet aReaderTiposAluno = tiposAluno.executeQuery(); |
a.setTiposAlunosRepresentados(new ArrayList<Aluno.TipoAluno>()); |
while(aReaderTiposAluno.next()) |
{ |
Integer cdTipAluno = getDecimal("CD_TIP_ALU",aReaderTiposAluno); |
if(cdTipAluno != null && cdTipAluno > 0) |
{ |
Aluno.TipoAluno tipoAluno = new Aluno.TipoAluno(); |
tipoAluno.setCodigoTipoAluno(""+cdTipAluno); |
tipoAluno.setDescTipoAluno(getString("DS_TIP_ALU", aReaderTiposAluno)); |
a.getTiposAlunosRepresentados().add(tipoAluno); |
} |
} |
aReaderTiposAluno.close(); |
tiposAluno.close(); |
} |
/*Mudar a lista para uma lista de Códigos com pelo menos CD_LECTIVO, CD_DISCIP, CD_CURSO, CD_TURMA*/ |
/*Do lado do Baco as Disciplinas são criadas uma por (CD_LECTIVO, CODIGO, CURSO, SEMESTRE) ficam anexadas todas as turmas encontradas*/ |
/* O Serviço de Leituras de Sumarios pede apenas os detalhe_aula com codigos de turma igual ao pedido e CD_LECTIVO = actual */ |
133,14 → 174,23 |
" CSE.T_INSCRI.CD_TURMA_T AS CD_TURMA, " + |
" CSE.T_INSCRI.CD_TURMA_P, " + |
" CSE.T_INSCRI.CD_TURMA_L, " + |
" CSE.T_INSCRI.CD_TURMA_TP " + |
" FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP" + |
" CSE.T_INSCRI.CD_TURMA_TP, " + |
" CSE.T_INSCRI.CD_TURMA_S, " + |
" CSE.T_INSCRI.CD_TURMA_C, " + |
" CSE.T_INSCRI.CD_TURMA_O, " + |
" CSE.T_INSCRI.CD_TURMA_E " + |
" FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP " + |
//" INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " + |
" WHERE CSE.T_INSCRI.CD_ALUNO = " + codigo + " " + |
" AND" + |
" CSE.T_TBDISCIP.CD_INSTITUIC= " + codigoInstituicao + " AND " + |
" CSE.T_INSCRI.CD_LECTIVO='" + ano + "' AND " + |
" CSE.T_INSCRI.CD_STATUS<>5 AND " + |
" (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1 OR CSE.T_INSCRI.CD_TIPDIS = 6) "); |
" (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1 OR CSE.T_INSCRI.CD_TIPDIS = 6) " |
); |
//CD_TIPDISC = 1 Inscricoes normais |
//CD_TIPDISC = 2 Nao conta para media |
//CD_TIPDISC = 3 Qualitativa |
160,6 → 210,42 |
d.cdTipoDisciplina = getDecimal("CD_TIPDIS", aReader); |
d.cdDuracao = getString("CD_DURACAO", aReader); |
d.cdTurma = getString("CD_TURMA", aReader); |
if(getString("CD_TURMA_P", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_P", aReader); |
d.outraTurmaCode = "P"; |
} |
else if(getString("CD_TURMA_L", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_L", aReader); |
d.outraTurmaCode = "L"; |
} |
else if(getString("CD_TURMA_TP", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_TP", aReader); |
d.outraTurmaCode = "TP"; |
} |
else if(getString("CD_TURMA_S", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_S", aReader); |
d.outraTurmaCode = "S"; |
} |
else if(getString("CD_TURMA_C", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_C", aReader); |
d.outraTurmaCode = "C"; |
} |
else if(getString("CD_TURMA_O", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_O", aReader); |
d.outraTurmaCode = "O"; |
} |
else if(getString("CD_TURMA_E", aReader) != null) |
{ |
d.outraTurma = getString("CD_TURMA_E", aReader); |
d.outraTurmaCode = "E"; |
} |
disciplinas.add(d); |
} |
//close the reader |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DisciplinaDao.java |
---|
4,6 → 4,7 |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasHorario; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasSumario; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasTurma; |
import java.sql.Connection; |
import java.sql.PreparedStatement; |
87,7 → 88,7 |
"CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP " + |
"INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " + |
"WHERE "+ |
" (((((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))"; |
" (((((CSE.T_CURSOS.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))"; |
/**\//SO QUEREMOS 1 e 2 |
* eliminamos tb inscricoes nao regulares STATUS <> 5</> |
* As restantes 5 e 6 so servem para depois procurar a Real para atribuir ao aluno |
121,6 → 122,7 |
d.setTipologiasHorario(loadTipologiasHorario(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn)); |
d.setTipologiasSumario(loadTipologiasSumarios(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn)); |
d.setTipologiasHorarioTrabalho(loadTipologiasHorarioTrabalho(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn)); |
d.setTipologiasTdocTurma(loadTipologiasTdocTurma(codigoInstituicao, ano, semestre, d.getCodigoCurso(), d.getCodigo(), conn)); |
disciplinas.add(d); |
} |
//close the reader |
193,7 → 195,10 |
ps.close(); |
return tipologiasHorario; |
} |
private TipologiasSumario loadTipologiasSumarios(String ano, |
String semestre, |
Integer codigoCurso, |
270,6 → 275,12 |
/** |
* So muda do de cima porque usa a entrada TipoDeOcupação do Horario de Trabalho |
* Os códigos que vêm desta query são Tipos de Ocupação necessitam de mapeamento |
* ver no app.properties |
* |
* por vezes vem o código 1 não deve ser confundido com as teóricas que são aulas esse código não é usado no mapeamento |
* é descartado por ser pouco descriminatório e não estar na lista dos possiveis |
* de sumariar |
* @param ano |
* @param semestre |
* @param codigoCurso |
350,5 → 361,46 |
ps.close(); |
return tipologiasSumario; |
} |
private TipologiasTurma loadTipologiasTdocTurma(Integer codigoInstituicao, |
String ano, |
String semestre, |
Integer codigoCurso, |
Integer codigoDisciplina, |
Connection conn) throws SQLException { |
TipologiasTurma tipologiasTurma = new TipologiasTurma(); |
tipologiasTurma.setTipologias(new ArrayList<TipologiasTurma.TipologiaTurma>()); |
PreparedStatement queryTurmas = conn.prepareStatement |
("SELECT DISTINCT CSD.T_DOC_TURMA.CD_DOCENTE AS CD_DOCENTE, CSD.T_DOC_TURMA.CD_TURMA AS CD_TURMA " + |
" FROM (CSD.T_DOC_TURMA " + |
" INNER JOIN CSE.T_TBDISCIP ON CSE.T_TBDISCIP.CD_DISCIP = CSD.T_DOC_TURMA.CD_DISCIP) " + |
" WHERE " + |
" CSE.T_TBDISCIP.CD_DISCIP = " + codigoDisciplina + " " + |
" AND CSD.T_DOC_TURMA.CD_CURSO = '" + codigoCurso + "'" + |
" AND CSD.T_DOC_TURMA.CD_DURACAO = '" + semestre + "'" + |
" AND CSD.T_DOC_TURMA.CD_LECTIVO='" + ano + "'" + |
" AND CSE.T_TBDISCIP.CD_INSTITUIC=" + codigoInstituicao + " " |
); |
ResultSet turmas = queryTurmas.executeQuery(); |
while(turmas.next()) |
{ |
TipologiasTurma.TipologiaTurma th = new TipologiasTurma.TipologiaTurma(); |
th.setCdTurma(getString("CD_TURMA",turmas)); |
th.setCdDocente(getDecimal("CD_DOCENTE", turmas)); |
if(th.getCdTurma() != null && th.getCdDocente() > 0) |
tipologiasTurma.getTipologias().add(th); |
else |
logger.error("Tipologia invalida encontrada na disciplina: (" + codigoDisciplina + "): " + th.toString()); |
} |
turmas.close(); |
queryTurmas.close(); |
return tipologiasTurma; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DocenteDao.java |
---|
205,6 → 205,26 |
//d.cdTipologia = getDecimal("CD_TIPO_AULA", aReader); |
//d.codigoFuncaoDocente = getDecimal("CD_FUNCAO_DOC",aReader); |
disciplinas.add(d); |
PreparedStatement queryTurmas = conn.prepareStatement |
("SELECT DISTINCT CSD.T_DOC_TURMA.CD_TURMA AS CD_TURMA " + |
" FROM (CSD.T_DOC_TURMA " + |
" INNER JOIN CSE.T_TBDISCIP ON CSE.T_TBDISCIP.CD_DISCIP = CSD.T_DOC_TURMA.CD_DISCIP) " + |
" WHERE " + |
" CSE.T_TBDISCIP.CD_DISCIP = " + d.codigo + " " + |
" AND CSD.T_DOC_TURMA.CD_CURSO = '" + d.codigoCurso + "'" + |
" AND CSD.T_DOC_TURMA.CD_DURACAO = '" + d.cdDuracao + "'" + |
" AND CSD.T_DOC_TURMA.CD_LECTIVO='" + ano + "'" + |
" AND CSE.T_TBDISCIP.CD_INSTITUIC=" + codigoInstituicao + " " + |
" AND CSD.T_DOC_TURMA.CD_DOCENTE = " + codigo ); |
ResultSet turmas = queryTurmas.executeQuery(); |
while(turmas.next()) |
{ |
d.turmasDocente.add(turmas.getString("CD_TURMA")); |
} |
turmas.close(); |
queryTurmas.close(); |
} |
//close the reader |
aReader.close(); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Disciplina.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.services.sigesimports.oracle.domain; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 07/01/16. |
*/ |
13,8 → 15,19 |
public String cdDuracao; |
public Integer codigoInstituicao; |
public String cdTurma; |
public String outraTurma; |
public String outraTurmaCode; |
public String codigoTipoAlunoT; |
public String codigoTipoAlunoTP; |
public String descTipoAlunoT; |
public String descTipoAlunoTP; |
public ArrayList<String> turmasDocente = new ArrayList<String>(); |
public String nome; |
public String nomeCurso; |
public String grauCurso; |
57,12 → 70,55 |
public TipologiasHorario tipologiasHorario; |
public TipologiasSumario tipologiasSumario; |
public TipologiasSumario tipologiasHorarioTrabalho; |
public TipologiasTurma tipologiasTdocTurma; |
public Disciplina() |
{ |
} |
public TipologiasTurma getTipologiasTdocTurma() { |
return tipologiasTdocTurma; |
} |
public void setTipologiasTdocTurma(TipologiasTurma tipologiasTdocTurma) { |
this.tipologiasTdocTurma = tipologiasTdocTurma; |
} |
public String getCodigoTipoAlunoT() { |
return codigoTipoAlunoT; |
} |
public void setCodigoTipoAlunoT(String codigoTipoAlunoT) { |
this.codigoTipoAlunoT = codigoTipoAlunoT; |
} |
public String getCodigoTipoAlunoTP() { |
return codigoTipoAlunoTP; |
} |
public void setCodigoTipoAlunoTP(String codigoTipoAlunoTP) { |
this.codigoTipoAlunoTP = codigoTipoAlunoTP; |
} |
public String getDescTipoAlunoT() { |
return descTipoAlunoT; |
} |
public void setDescTipoAlunoT(String descTipoAlunoT) { |
this.descTipoAlunoT = descTipoAlunoT; |
} |
public String getDescTipoAlunoTP() { |
return descTipoAlunoTP; |
} |
public void setDescTipoAlunoTP(String descTipoAlunoTP) { |
this.descTipoAlunoTP = descTipoAlunoTP; |
} |
public void setCodigo(Integer codigo) { |
this.codigo = codigo; |
} |
183,6 → 239,22 |
this.grauCurso = grauCurso; |
} |
public String getOutraTurma() { |
return outraTurma; |
} |
public void setOutraTurma(String outraTurma) { |
this.outraTurma = outraTurma; |
} |
public String getOutraTurmaCode() { |
return outraTurmaCode; |
} |
public void setOutraTurmaCode(String outraTurmaCode) { |
this.outraTurmaCode = outraTurmaCode; |
} |
@Override |
public String toString() { |
return "Disciplina{" + |
192,6 → 264,7 |
", cdDuracao='" + cdDuracao + '\'' + |
", codigoInstituicao=" + codigoInstituicao + |
", cdTurma='" + cdTurma + '\'' + |
", cdOutraTurma='" + outraTurma + '\'' + |
", nome='" + nome + '\'' + |
", nomeCurso='" + nomeCurso + '\'' + |
", grauCurso='" + grauCurso + '\'' + |
200,4 → 273,6 |
", cdTipologia=" + cdTipologia + |
'}'; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/TipologiasTurma.java |
---|
New file |
0,0 → 1,52 |
package pt.estgp.estgweb.services.sigesimports.oracle.domain; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 08/03/16. |
*/ |
public class TipologiasTurma |
{ |
private ArrayList<TipologiaTurma> tipologias; |
public ArrayList<TipologiaTurma> getTipologias() |
{ |
return tipologias; |
} |
public void setTipologias(ArrayList<TipologiaTurma> tipologias) { |
this.tipologias = tipologias; |
} |
public static class TipologiaTurma |
{ |
String cdTurma; |
Integer cdDocente; |
public String getCdTurma() { |
return cdTurma; |
} |
public void setCdTurma(String cdTurma) { |
this.cdTurma = cdTurma; |
} |
public Integer getCdDocente() { |
return cdDocente; |
} |
public void setCdDocente(Integer cdDocente) { |
this.cdDocente = cdDocente; |
} |
@Override |
public String toString() { |
return "TipologiaHorario{" + |
"cdTurma='" + cdTurma + '\'' + |
", cdDocente=" + cdDocente + |
'}'; |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Aluno.java |
---|
21,6 → 21,7 |
public String usernameNetpa; |
public ArrayList<Disciplina> disciplinasInscrito; |
public ArrayList<AlunoHistorico> historicos; |
public ArrayList<TipoAluno> tiposAlunosRepresentados; |
public Aluno() |
{ |
29,6 → 30,14 |
// |
} |
public ArrayList<TipoAluno> getTiposAlunosRepresentados() { |
return tiposAlunosRepresentados; |
} |
public void setTiposAlunosRepresentados(ArrayList<TipoAluno> tiposAlunosRepresentados) { |
this.tiposAlunosRepresentados = tiposAlunosRepresentados; |
} |
public Integer getCodigo() { |
return codigo; |
} |
80,4 → 89,27 |
public ArrayList<AlunoHistorico> getHistoricos() { |
return historicos; |
} |
public static class TipoAluno |
{ |
public String codigoTipoAluno; |
public String descTipoAluno; |
public String getCodigoTipoAluno() { |
return codigoTipoAluno; |
} |
public void setCodigoTipoAluno(String codigoTipoAluno) { |
this.codigoTipoAluno = codigoTipoAluno; |
} |
public String getDescTipoAluno() { |
return descTipoAluno; |
} |
public void setDescTipoAluno(String descTipoAluno) { |
this.descTipoAluno = descTipoAluno; |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java |
---|
152,7 → 152,7 |
try |
{ |
persist(d, t, newUser,year,logMessages); |
persist(d, t, newUser,year,logMessages,institutionCode); |
} |
catch (Exception e) |
{ |
283,7 → 283,7 |
* @param institutionCode |
* @param codigos |
*/ |
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) { |
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) { |
String msgS; |
List<Integer> codesInBaco = DaoFactory.getTeacherDaoImpl().findAllSigesCodesYear(year,institutionCode); |
codesInBaco.removeAll(codigos); |
305,7 → 305,7 |
professoresDesaparecidosDoSigesNesteAno++; |
Teacher t = DaoFactory.getTeacherDaoImpl().loadBySigesCode(c); |
TeacherImpl teacherImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t); |
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>()); |
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>(),institutionCode); |
//consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>()); |
} |
} |
435,7 → 435,7 |
* @param teacher teacher |
* @throws Exception . |
*/ |
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages) throws Exception |
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages,int institutionCode) throws Exception |
{ |
String msgS; |
try |
451,7 → 451,7 |
/******Logging****/ |
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher); |
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>()); |
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>(),institutionCode); |
} |
else |
{ |
471,7 → 471,7 |
//PASSO 3 |
adicionarCadeirasNovasAoDocente(tImpl, unitsFromSigesPersistentInBaco); |
//PASSO 4 |
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco); |
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco,institutionCode); |
} |
480,19 → 480,18 |
catch (Exception e) |
{ |
logger.error(e, e); |
List<String> emails = new ArrayList<String>(); |
emails.add(ConfigProperties.getProperty("admin.email")); |
List<String> emails = ConfigProperties.getListValues("admin.email"); |
List<String> arguments = new ArrayList<String>(); |
String cause = e.getCause() == null ? "" : e.getCause().toString(); |
arguments.add((e.toString() + "\n" + cause).replace("\n","<br/>")); |
Email email = new Email("Erro de importa��o de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments); |
Email email = new Email("Erro de importacao de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments); |
new SendEmailService().sendEmail(email); |
throw e; |
} |
} |
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units) |
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units,int institutionCode) |
{ |
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente |
Iterator<CourseUnit> iterNowUnits = teacher.getTeachedUnits().iterator(); |
500,7 → 499,7 |
while(iterNowUnits.hasNext()) |
{ |
CourseUnit cUNow = iterNowUnits.next(); |
if(cUNow.getImportYear().equals(year)) |
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(institutionCode+"")) |
{ |
//Apenas tentamos apagar as unidades do ano corrente. |
//Este servico trabalha com unidades importadas do ano que e passado como argumento |
672,13 → 671,20 |
//na criacao de questionarios é natural que falhe alguma coisa por haver aqui unidades a mais |
//por isso devera ser ai feita a verificacao destes casos |
boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(disciplina.getCodigoCurso(), year, logmessages, this); |
/* |
este procedimento requer que a turma venha do siges, neste momento nao vem |
if(separateTurmas) |
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma()); |
else |
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo()); |
*/ |
//este procedimento requer que a turma venha do siges, neste momento nao vem |
//Este procedimento foi colocado por mim a 6 de Junho para que os questionarios tenham os profs certos nas disciplinas |
//e não em duplicado, daqui para baixo o código nunca compara com separateTurmas, o mapa apenas é acedido aqui |
//porque daqui para baixo uma vez carregadas as turmas persistentes do SIGES apenas o id é comparado para ver se fica ou se é removida |
//Vamos apenas ter de verificar que o código de turma vem na associação do docente à turma. |
//NAO DA A TURMA NUNCA VEM DO SIGENS PARA NAO DUPLICAR TURMAS NO JOIN |
//RESOVE-SE NA ATRIBUICAO DE RESPOSTAS DOS QUESTINARIOS SO SE METE O QUE TEM SUMARIO SE O CURSO FOR DE TURMAS |
//SEPARADAS |
//if(separateTurmas) |
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma()); |
//else |
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo()); |
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo()); |
/*******Logging************************/ |
if(loadedunits.size() > 1 && !separateTurmas) |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java |
---|
19,6 → 19,7 |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasHorario; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasSumario; |
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasTurma; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Email; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
257,7 → 258,7 |
* @param logMessages |
* @return |
*/ |
protected static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) { |
public static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) { |
Boolean turmasSeparated = courseYearTurmasPolicy.get(codigoDoCurso + "-" + year); |
if(turmasSeparated != null) |
432,7 → 433,7 |
else |
c.setCdTurma(""); |
c.setName(d.getNome()); |
c.setInstitutionCode("" + institutionCode); |
c.setInstitutionCode("" + d.getCodigoInstituicao());//MUDADO AQUI |
c.setCode("" + d.getCodigo().intValue()); |
c.setCourseCode("" + d.getCodigoCurso()); |
c.setCourseName("" + d.getNomeCurso()); |
453,6 → 454,18 |
if(t == null) |
t = new CourseUnitImpl.Tipologias(); |
t.setTipologiasTdocTurma(new ArrayList<CourseUnitImpl.Tipologia>()); |
for(TipologiasTurma.TipologiaTurma tipologiaTurma : d.getTipologiasTdocTurma().getTipologias()) |
{ |
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
tipoSum.setOcorrencias(1); |
tipoSum.setDsTipologia("Aulas"); |
tipoSum.setCdTurma(tipologiaTurma.getCdTurma()); |
tipoSum.setCdDocente("" + tipologiaTurma.getCdDocente()); |
tipoSum.setCdTipologia("1"); |
tipoSum.setTdocturma(true); |
t.getTipologiasTdocTurma().add(tipoSum); |
} |
t.setTipologiasSumarios(new ArrayList<CourseUnitImpl.Tipologia>()); |
for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias()) |
{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/LoadUsersService.java |
---|
66,7 → 66,17 |
return null; |
return UserView.getViews(users); |
} |
public List<UserView> LoadTeachersWithUnitsInLast3Years() throws ServiceException |
{ |
//area no more implemented |
List<Long> usersIds = DaoFactory.getTeacherDaoImpl().loadByAreaWithUnitsInLast3Years(DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()); |
if(usersIds == null) |
return null; |
return UserView.getViewsFromIds(usersIds); |
} |
public List<UserView> load(String role) throws ServiceException |
{ |
List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(role); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/CreateUserService.java |
---|
6,10 → 6,10 |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.common.CommonServicesManager; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.services.expceptions.FieldException; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.common.CommonServicesManager; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.Date; |
60,4 → 60,18 |
else |
logger.info(userSession.getUser().getName() + " - Creating user:" + user.getUsername() + " " + user.getName()); |
} |
public User addRole2User(Long userId, String role, UserSession userSession) throws ServiceException |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
u.addRole(role); |
return u; |
} |
public User removeRole2User(Long userId, String role, UserSession userSession) throws ServiceException |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
u.removeRole(role); |
return u; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java |
---|
179,6 → 179,10 |
"user.role.questionarios.admin=Questionários - Super Administrador\n" + |
"user.role.questionarios.gerais=Questionários - Permissões Básicas (necessário)\n" + |
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" + |
"user.role.servicesStudiesPlans=Gestão de Planos de Estudos\n" + |
"user.role.servicesCoursesManagement=Gestão de Cursos\n" + |
"user.role.event_class_manager=Gestão de Classes de Eventos\n" + |
"user.role.event_manager_nfc=Gestão de Eventos do Nucleo de Formacao Continua\n" + |
"user.role.administrativeCouncil=Membro da Direcção\n" + |
"user.role.administrativeCouncil.director=Director\n" + |
"user.role.administrativeCouncil.vice=Vice Director\n" + |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/events/EventsService.java |
---|
New file |
0,0 → 1,194 |
package pt.estgp.estgweb.services.events; |
import jomm.utils.FilesUtils; |
import org.apache.log4j.Logger; |
import org.apache.struts.upload.FormFile; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.domain.EventFormacoes; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.IOException; |
/** |
* Created by jorgemachado on 04/10/16. |
*/ |
public class EventsService implements IService |
{ |
private static final Logger logger = Logger.getLogger(EventsService.class); |
public void save(EventClass eventClass, UserSession userSession) |
{ |
if(eventClass.getId() <= 0) |
{ |
DaoFactory.getEventClassDaoImpl().save(eventClass); |
} |
else |
{ |
EventClass persistent = DaoFactory.getEventClassDaoImpl().load(eventClass.getId()); |
persistent.setName(eventClass.getName()); |
persistent.setDescription(eventClass.getDescription()); |
persistent.setManagersRole(eventClass.getManagersRole()); |
persistent.setEventosFormacoes(eventClass.isEventosFormacoes()); |
persistent.setEventosGenericos(eventClass.isEventosGenericos()); |
} |
} |
public void delete(long eventClassId, UserSession userSession) throws NotAuthorizedException { |
EventClass persistent = DaoFactory.getEventClassDaoImpl().load(eventClassId); |
if(persistent.getEvents().size() > 0) |
{ |
throw new NotAuthorizedException("Existem eventos nesta classe"); |
} |
else |
{ |
DaoFactory.getEventClassDaoImpl().delete(persistent); |
} |
} |
public void saveEvent(long eventClassId,EventGeneric event, FormFile flyer, UserSession userSession) |
{ |
System.out.println("Serviço de gravação de eventos OK"); |
System.out.println(event.getDataAberturaFormulario()); |
System.out.println(event.getDataFechoFormulario()); |
System.out.println(event.getDataPublicacao()); |
System.out.println(event.getDataInicio()); |
EventClass eventClass; |
EventGeneric eventPersistent; |
if(event.getId() <= 0) |
{ |
eventClass = DaoFactory.getEventClassDaoImpl().load(eventClassId); |
event.setEventClass(eventClass); |
event.setOwner(userSession.getUser()); |
if(event instanceof EventFormacoes) |
{ |
DaoFactory.getEventFormacoesDaoImpl().save((EventFormacoes) event); |
} |
else if(event instanceof EventGeneric) |
{ |
DaoFactory.getEventGenericDaoImpl().save(event); |
} |
updateFlyer(event, flyer, userSession); |
eventPersistent = event; |
} |
else |
{ |
eventPersistent = DaoFactory.getEventGenericDaoImpl().load(event.getId()); |
eventClass = eventPersistent.getEventClass(); |
updateEventFields(event,eventPersistent,flyer,userSession); |
} |
//todo falta docentes apenas depois de estar o evento gravado por razões de já haver unidade |
logger.info("Propiedades do Evento Gravadas e Flyer actualizado, vamos iniciar operações de actividade curricular"); |
//EVENTO SALVO |
} |
private void updateEventFields(EventGeneric event, EventGeneric eventPersistent,FormFile flyer,UserSession userSession) |
{ |
eventPersistent.setAtivo(event.isAtivo()); |
//CONTROLO |
eventPersistent.setDataPublicacao(event.getDataPublicacao()); |
eventPersistent.setDataAberturaFormulario(event.getDataAberturaFormulario()); |
eventPersistent.setDataFechoFormulario(event.getDataFechoFormulario()); |
eventPersistent.setCategory(event.getCategory()); |
eventPersistent.setSubCategory(event.getSubCategory()); |
eventPersistent.setRegisteredUsersOnly(event.isRegisteredUsersOnly()); |
eventPersistent.setTitle(event.getTitle()); |
eventPersistent.setDescription(event.getDescription()); |
eventPersistent.setObservacoes(event.getObservacoes()); |
eventPersistent.setLocais(event.getLocais()); |
eventPersistent.setDataInicio(event.getDataInicio()); |
eventPersistent.setPreInformation(event.getPreInformation()); |
eventPersistent.setAfterRegisterInformation(event.getAfterRegisterInformation()); |
updateFlyer(eventPersistent, flyer, userSession); |
eventPersistent.setDataNascimento(event.isDataNascimento()); |
eventPersistent.setEmpresa(event.isEmpresa()); |
eventPersistent.setEscolaridade(event.isEscolaridade()); |
eventPersistent.setProfissao(event.isProfissao()); |
eventPersistent.setSexo(event.isSexo()); |
eventPersistent.setTelefone1(event.isTelefone1()); |
eventPersistent.setTelefone2(event.isTelefone2()); |
eventPersistent.setPais(event.isPais()); |
eventPersistent.setMorada(event.isMorada()); |
eventPersistent.setNif(event.isNif()); |
eventPersistent.setBi(event.isBi()); |
if(event instanceof EventFormacoes) |
{ |
EventFormacoes eventFormacoes = (EventFormacoes) event; |
EventFormacoes eventPersistentFormacoes = (EventFormacoes) eventPersistent; |
eventPersistentFormacoes.setReferencia(eventFormacoes.getReferencia()); |
eventPersistentFormacoes.setUnidadeOrganica(eventFormacoes.getUnidadeOrganica()); |
eventPersistentFormacoes.setLocalDeRealizacao(eventFormacoes.getLocalDeRealizacao()); |
eventPersistentFormacoes.setDominio(eventFormacoes.getDominio()); |
eventPersistentFormacoes.setOutroDominio(eventFormacoes.getOutroDominio()); |
eventPersistentFormacoes.setDestinatarios(eventFormacoes.getDestinatarios()); |
eventPersistentFormacoes.setConteudos(eventFormacoes.getConteudos()); |
//CONTROLO FINANCEIRO |
eventPersistentFormacoes.setStatus(eventFormacoes.getStatus()); |
eventPersistentFormacoes.setNumeroVagas(eventFormacoes.getNumeroVagas()); |
eventPersistentFormacoes.setDuracaoHoras(eventFormacoes.getDuracaoHoras()); |
eventPersistentFormacoes.setEcts(eventFormacoes.getEcts()); |
eventPersistentFormacoes.setDiasDuracao(eventFormacoes.getDiasDuracao()); |
eventPersistentFormacoes.setCustoFormacao(eventFormacoes.getCustoFormacao()); |
eventPersistentFormacoes.setPrecoFormando(eventFormacoes.getPrecoFormando()); |
eventPersistentFormacoes.setPercentagemMinimaLucro(eventFormacoes.getPercentagemMinimaLucro()); |
} |
} |
private void updateFlyer(EventGeneric eventPersistent, FormFile flyer, UserSession userSession) { |
if(flyer != null && flyer.getFileSize() > 0) |
{ |
RepositoryService repositoryService = new RepositoryService(); |
if(eventPersistent.getFlyerRepositoryStream() != null && eventPersistent.getFlyerRepositoryStream().trim().length() > 0) |
{ |
try { |
repositoryService.updateRepositoryFile( |
eventPersistent.getFlyerRepositoryStream(), |
flyer.getInputStream(), |
flyer.getContentType(), |
FilesUtils.getExtension(flyer.getFileName()), |
flyer.getFileSize(), |
flyer.getFileName(), |
"Flyer de formacao " + eventPersistent.getTitle(), |
ResourceAccessControlEnum.publicDomain |
); |
} catch (IOException e) { |
logger.error(e,e); |
} |
} |
else |
{ |
try { |
String repositoryIdentifier = repositoryService.storeRepositoryFile( |
flyer.getInputStream(), |
flyer.getContentType(), |
FilesUtils.getExtension(flyer.getFileName()), |
flyer.getFileSize(), |
flyer.getFileName(), |
"Flyer de formacao " + eventPersistent.getTitle(), |
ResourceAccessControlEnum.publicDomain, |
userSession |
); |
eventPersistent.setFlyerRepositoryStream(repositoryIdentifier); |
} catch (IOException e) { |
logger.error(e,e); |
} |
} |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/TeachersAnswersProcessor.java |
---|
New file |
0,0 → 1,91 |
package pt.estgp.estgweb.services.questionarios.pedagogico; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.QuestionarioImpl; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.jobs.ServiceJob; |
import pt.estgp.estgweb.services.logresults.ILogMessages; |
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages; |
/** |
* Created by jorgemachado on 28/05/16. |
*/ |
public class TeachersAnswersProcessor extends ServiceJob { |
private static Logger logger = Logger.getLogger(TeachersAnswersProcessor.class); |
/** |
* |
* @return |
* @throws Throwable |
*/ |
@Override |
protected ILogMessages runJobServiceTask() throws Throwable |
{ |
DefaultLogMessages logMessages = new DefaultLogMessages(); |
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject()); |
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId); |
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre |
/**logging**/ |
String msg = "Starting running service answers generation for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle(); |
serviceLogInfo(msg); |
logger.info(msg); |
/**logging**/ |
/*List<String> newCourseCodesList = new ArrayList<String>(); |
int count = 0; |
int totalCourses = coursesList.length; |
for(String courseStrId: coursesList) |
{ |
count++;*/ |
try{ |
/*Long courseLong = Long.parseLong(courseStrId); |
/** logging **/ |
//msg = "Loading Course BACO ID: " + courseStrId; |
//serviceLogInfo(msg); |
//logger.info(msg); |
/** logging **/ |
/** COMMIT OPERATION **/ |
//setProgress((int)((((float)count)/((float)totalCourses))*100.0f)); |
//commitPartially(); |
//DaoFactory.getQuestionarioDaoImpl().update(q); |
/** COMMIT OPERATION **/ |
} |
catch(Throwable t) |
{ |
logger.error(t,t); |
serviceLogError(t.toString(),t); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,t.toString())); |
} |
//} |
//removeUnselectedCourses(q, newCourseCodesList); |
/** COMMIT OPERATION **/ |
setProgress(100); |
commitPartially(); |
DaoFactory.getQuestionarioDaoImpl().update(q); |
/** COMMIT OPERATION **/ |
//TODO FALTA VERIFICAR SE HA COISAS DEPENDENTES DO COURSES_ASSIGNED TEM DE MUDAR PARA OU ANSWERS ASSIGNED |
//OIU ENTAO SO DEPOIS DO REVERT E QUE PODEM VOLTAR A ATRIBUIR RESPOSTAS E ALTERAR SELECAO DE CURSOS |
msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.name(); |
serviceLogInfo(msg); |
logger.info(msg); |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED); |
commitPartially(); |
return logMessages; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AssignAnswersJobService.java |
---|
5,10 → 5,6 |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.jobs.JobDeamon; |
import pt.estgp.estgweb.services.jobs.ServiceJob; |
import pt.estgp.estgweb.services.logresults.ILogMessages; |
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
19,12 → 15,21 |
/** |
* Created by jorgemachado on 22/03/16. |
*/ |
public class AssignAnswersJobService extends ServiceJob implements IService |
public class AssignAnswersJobService implements IService |
{ |
public static final Logger logger = Logger.getLogger(AssignAnswersJobService.class); |
/** |
* CRIAR O JOB PARA O RUNNER |
* |
* @param questionarioId |
* @param session |
* @param questionarioCleared |
* @return |
* @throws NotAuthorizedException |
*/ |
public QuestionarioImpl runJobAssignAnswers(long questionarioId, UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException { |
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name()) ) |
32,22 → 37,30 |
throw new NotAuthorizedException("Nao tem autorização para atribuir respostas ao questionario " + questionarioId); |
} |
/*******VERIFICACAO DE RESPOSTAS*********/ |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas > 0) |
{ |
logger.warn("Vai falhar tem respostas, deixar correr para avisar o user no log"); |
} |
else |
{ |
//Nao muda de estado porque pode sempre gerar as respostas quando está em estado COURSES_ASSIGNED |
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_ANSWERS); |
} |
//CRIAR ATIVIDADE DE ATRIBUICAO DE RESPOSTAS |
//Nao muda de estado porque pode sempre gerar as respostas quando está em estado COURSES_ASSIGNED |
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_ANSWERS); |
Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>(); |
JobServiceTaskParameterImpl paramJob = DomainObjectFactory.createJobServiceTaskParameterImpl(); |
paramJob.setName(ServiceJob.JOB_questionario_id_KEY); |
paramJob.setDescription("ID do questionário"); |
paramJob.setObject("" + questionarioId); |
paramsJob.add(paramJob); |
JobServiceTask job = JobDeamon.createServiceJob(AssignAnswersJobService.class, session.getUser(), paramsJob, |
JobServiceTask job = JobDeamon.createServiceJob(questionarioCleared.getiAnswersProcessorClass().getJobServiceTaskAnswersProcessor(), session.getUser(), paramsJob, |
"Service: Atribuição de Respostas a um questionário Pedagógico"); |
questionarioCleared.setAnswerGenerationTaskId(job.getId()); |
56,78 → 69,6 |
/** |
* |
* @return |
* @throws Throwable |
*/ |
@Override |
protected ILogMessages runJobServiceTask() throws Throwable |
{ |
DefaultLogMessages logMessages = new DefaultLogMessages(); |
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject()); |
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId); |
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre |
/**logging**/ |
String msg = "Starting running service answers generation for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle(); |
serviceLogInfo(msg); |
logger.info(msg); |
/**logging**/ |
/*List<String> newCourseCodesList = new ArrayList<String>(); |
int count = 0; |
int totalCourses = coursesList.length; |
for(String courseStrId: coursesList) |
{ |
count++;*/ |
try{ |
/*Long courseLong = Long.parseLong(courseStrId); |
/** logging **/ |
//msg = "Loading Course BACO ID: " + courseStrId; |
//serviceLogInfo(msg); |
//logger.info(msg); |
/** logging **/ |
/** COMMIT OPERATION **/ |
//setProgress((int)((((float)count)/((float)totalCourses))*100.0f)); |
//commitPartially(); |
//DaoFactory.getQuestionarioDaoImpl().update(q); |
/** COMMIT OPERATION **/ |
} |
catch(Throwable t) |
{ |
logger.error(t,t); |
serviceLogError(t.toString(),t); |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.ERROR,t.toString())); |
} |
//} |
//removeUnselectedCourses(q, newCourseCodesList); |
/** COMMIT OPERATION **/ |
setProgress(100); |
commitPartially(); |
DaoFactory.getQuestionarioDaoImpl().update(q); |
/** COMMIT OPERATION **/ |
//TODO FALTA VERIFICAR SE HA COISAS DEPENDENTES DO COURSES_ASSIGNED TEM DE MUDAR PARA OU ANSWERS ASSIGNED |
//OIU ENTAO SO DEPOIS DO REVERT E QUE PODEM VOLTAR A ATRIBUIR RESPOSTAS E ALTERAR SELECAO DE CURSOS |
msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.name(); |
serviceLogInfo(msg); |
logger.info(msg); |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED); |
commitPartially(); |
return logMessages; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AnswersAlunosProcessor.java |
---|
New file |
0,0 → 1,411 |
package pt.estgp.estgweb.services.questionarios.pedagogico; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.jobs.ServiceJob; |
import pt.estgp.estgweb.services.logresults.ILogMessages; |
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage; |
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import java.util.*; |
/** |
* Created by jorgemachado on 28/05/16. |
*/ |
public class AnswersAlunosProcessor extends ServiceJob { |
int unidadesNaoUtilizadas = 0; |
int unidadesUtilizadas = 0; |
int unidadesMarcadas = 0; |
int unidadesNaoVistasProf = 0; |
int unidadesNaoVistasAlunos = 0; |
int cursosUtilizados = 0; |
int respostasRequisitadas = 0; |
private static Logger logger = Logger.getLogger(AnswersAlunosProcessor.class); |
/** |
* ############# JOB TASK ############ |
* ############# JOB TASK ############ |
* @return |
* @throws Throwable |
*/ |
@Override |
protected ILogMessages runJobServiceTask() throws Throwable |
{ |
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject()); |
DefaultLogMessages logMessages = new DefaultLogMessages(); |
/*****VERIFICACAO DE RESPOSTAS********/ |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas > 0) |
{ |
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING, |
"Operação não permitida, Existem Respostas")); |
logger.warn(logMessages.getLastMessage()); |
serviceLogError(logMessages.getLastMessage()); |
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas"); |
} |
unidadesNaoUtilizadas = 0; |
unidadesUtilizadas = 0; |
unidadesMarcadas = 0; |
unidadesNaoVistasProf = 0; |
unidadesNaoVistasAlunos = 0; |
cursosUtilizados = 0; |
respostasRequisitadas = 0; |
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId); |
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre |
/**logging**/ |
String msg = "Starting running service answers generation for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle(); |
serviceLogInfo(msg); |
logger.info(msg); |
List<Long> cursosAfetosIds = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().findCursosAfetosIds(questionarioId); |
int count = 0; |
UpdateCoursesAndUnitsJobService.revertAllRespostasCandidatas(questionarioId, this); |
for(Long cursoAfetoId : cursosAfetosIds) |
{ |
/** COMMIT OPERATION **/ |
count++; |
cursosUtilizados++; |
setProgress((int)((((float)count)/((float)cursosAfetosIds.size()))*100.0f)); |
commitPartially(); |
/** COMMIT OPERATION **/ |
QuestionarioPedagogicoCursoAfeto cu = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().get(cursoAfetoId); |
msg = "(+) Iniciando atribuição de respostas de alunos para o curso " + cu.getNome() + " (" + cu.getCodigoCurso() + ") escola " + cu.getNomeInstituicao() + "(" + cu.getCodigoInstituicao() + ")"; |
logger.info(msg); |
serviceLogInfo(msg); |
int unidades; |
if(cu.getUnidadesAfetas() != null) |
{ |
unidades = cu.getUnidadesAfetas().size(); |
int countUnidades = 0; |
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas()) |
{ |
countUnidades++; |
msg = unidadeCurricularAfeta.isUsar() ? "(+)" : "(----IGNORADA-----)"; |
msg += "(" + countUnidades + "/" + unidades + ") Iniciando atribuição de Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome(); |
logger.info(msg); |
serviceLogInfo(msg); |
if(!unidadeCurricularAfeta.isUsar()) |
{ |
unidadesNaoUtilizadas++; |
msg = "!!! A unidade está marcada para NÃO SER UTILIZADA, passando à próxima"; |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg)); |
} |
else |
{ |
CourseUnitImpl cuImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit()); |
CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit().getCourse()); |
//boolean separateTurmas = false; |
//try{ |
// separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(Integer.parseInt(unidadeCurricularAfeta.getCursoAfeto().getCodigoCurso()), q.getYear(), logMessages, this); |
//}catch(Throwable e) |
//{ |
// msg = "!!! Código de Curso inválido a tentar verificar politica de turmas separadas, vai assumir falso"; |
// serviceLogError(msg); |
// logger.error(msg); |
// logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg)); |
//} |
unidadesUtilizadas++; |
verificaAlertasUnidade(logMessages, unidadeCurricularAfeta); |
List<CourseUnitImpl.Tipologia> tipologias; |
if(unidadeCurricularAfeta.getCursoAfeto().isUsarTipologias()) |
{ |
tipologias = cuImpl.getTipologiasClass().obtainMergeTipologias(); |
//TODO ALTERAR QUANDO GERIRMOS USADAS PARA JA SO SE USAM SUMARIOS |
for(CourseUnitImpl.Tipologia tMerge: tipologias) |
{ |
//if(tMerge.isSumario()) |
//{ |
tMerge.setUse(true); |
// break; |
//} |
} |
} |
else |
{ |
tipologias = cuImpl.getTipologiasClass().obtainTipologiasSimples(unidadeCurricularAfeta.getCourseUnit()); |
//TODO ALTERAR QUANDO GERIRMOS USADAS PARA JA SO SE USAM SUMARIOS |
for(CourseUnitImpl.Tipologia tMerge: tipologias) |
{ |
tMerge.setUse(true); |
} |
} |
/** |
* Iterar as tipologias e tentar criar com as turmas e os docentes |
* Os que não derem resultados devolvem falso e são retirados da lista |
* A verificação do falso é feita sempre que uma turma falhe a abrir ou tenha zero alunos |
*/ |
Iterator<CourseUnitImpl.Tipologia> iterTipologias = tipologias.iterator(); |
while(iterTipologias.hasNext()) |
{ |
CourseUnitImpl.Tipologia tipologia = iterTipologias.next(); |
boolean criada = criarTipologiasRequisitadas(logMessages, q, (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadeCurricularAfeta, (QuestionarioPedagogicoCursoAfetoImpl)cu, cuImpl, tipologia); |
if(criada) |
{ |
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).incStatTipologiasRequisitadas(); |
((QuestionarioPedagogicoCursoAfetoImpl)cu).incStatTipologiasRequisitadas(); |
} |
else |
{ |
iterTipologias.remove(); |
} |
} |
//CASO ALGUM TENHA FALHADO VAMOS ENTAO ADICIONA-LOS AS TURMAS TODAS |
//OU NAO TENHA VINDO TIPOLOGIA PARA ELE |
//todo ESTE PROBLEMA DEVE SER RESOLVIDO COM A ADICAO DE TIPOLOGIAS SIMPLES PARA AS ASSOCIACOES |
//todo T_DOC_TURMA Mudar no DisciplinaDao na importação de cursos |
Map<String,Teacher> professoresEsperados = new HashMap<String, Teacher>(); |
for(Teacher t: cuImpl.getTeachers()) |
{ |
professoresEsperados.put(t.getSigesCode() + "", t); |
} |
for(CourseUnitImpl.Tipologia tMerge: tipologias) |
{ |
professoresEsperados.remove(tMerge.getCdDocente()); |
} |
List<CourseUnitImpl.Tipologia> tipologiasEmFalta = criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(logMessages, q, unidadeCurricularAfeta, cuImpl, professoresEsperados); |
//tipologias.addAll(tipologiasEmFalta); |
for(CourseUnitImpl.Tipologia emFalta: tipologiasEmFalta) |
{ |
msg = "Criando tipologia em falta (docente:" + emFalta.getCdDocente() + ", turma: " + emFalta.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome() + " do curso de " + unidadeCurricularAfeta.getCursoAfeto().getNome() + "(" + unidadeCurricularAfeta.getCursoAfeto().getCodigoCurso() +")"; |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg)); |
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).incStatTipologiasRequisitadas(); |
((QuestionarioPedagogicoCursoAfetoImpl)cu).incStatTipologiasRequisitadas(); |
criarTipologiasRequisitadas(logMessages, q, (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadeCurricularAfeta, (QuestionarioPedagogicoCursoAfetoImpl)cu, cuImpl, emFalta); |
} |
} |
} |
} |
} |
/** COMMIT OPERATION **/ |
setProgress(100); |
commitPartially(); |
DaoFactory.getQuestionarioDaoImpl().update(q); |
/** COMMIT OPERATION **/ |
msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.name(); |
serviceLogInfo(msg); |
logger.info(msg); |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED); |
commitPartially(); |
serviceLogInfo("######################################"); |
serviceLogInfo("######################################"); |
serviceLogInfo("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas); |
serviceLogInfo("#unidadesUtilizadas:" + unidadesUtilizadas); |
serviceLogInfo("#unidadesMarcadas:" + unidadesMarcadas); |
serviceLogInfo("#unidadesNaoVistasProf:" + unidadesNaoVistasProf); |
serviceLogInfo("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos); |
serviceLogInfo("#cursosUtilizados:" + cursosUtilizados); |
serviceLogInfo("#respostasRequisitadas:" + respostasRequisitadas); |
logger.info("######################################"); |
logger.info("######################################"); |
logger.info("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas); |
logger.info("#unidadesUtilizadas:" + unidadesUtilizadas); |
logger.info("#unidadesMarcadas:" + unidadesMarcadas); |
logger.info("#unidadesNaoVistasProf:" + unidadesNaoVistasProf); |
logger.info("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos); |
logger.info("#cursosUtilizados:" + cursosUtilizados); |
logger.info("#respostasRequisitadas:" + respostasRequisitadas); |
return logMessages; |
} |
private List<CourseUnitImpl.Tipologia> criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(DefaultLogMessages logMessages, QuestionarioImpl q, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta, CourseUnitImpl cuImpl, Map<String, Teacher> teachersAffected) { |
String msg; |
List<CourseUnitImpl.Tipologia> tipologias = new ArrayList<CourseUnitImpl.Tipologia>(); |
if(teachersAffected.size() > 0) |
{ |
msg = "!!! Existem " + teachersAffected.size() + "professores que não tinham tipologias de sumário associadas na unidade " + cuImpl.getCode() + "(" + cuImpl.getName() + ")" + ", associando uma tipologia simples por turma para este docente"; |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg)); |
for(Teacher t: teachersAffected.values()) |
{ |
if(cuImpl.getTurmas() != null) |
{ |
for(CourseUnitTurma turma: cuImpl.getTurmas()) |
{ |
msg = "!!! Criando tipologia Simples para (Prof: " + t.getSigesCode() + " " + t.getName() + " turma: " + turma.getTurma() + " ) " ; |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg)); |
CourseUnitImpl.Tipologia tipo = new CourseUnitImpl.Tipologia(); |
tipo.setCdDocente(t.getSigesCode() + ""); |
tipo.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE); |
tipo.setCdTurma(turma.getTurma()); |
tipo.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS); |
tipo.setUse(true); |
tipologias.add(tipo); |
} |
} |
} |
} |
return tipologias; |
} |
/** |
* Devolve true se conseguiu criar pelo menos uma resposta a um aluno caso contrario a turma pode não existir ou ser lixo |
* @param logMessages |
* @param q |
* @param unidadeCurricularAfeta |
* @param cursoAfeto |
* @param cuImpl |
* @param tMerge |
* @return |
*/ |
private boolean criarTipologiasRequisitadas(DefaultLogMessages logMessages, |
QuestionarioImpl q, |
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeCurricularAfeta, |
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto, |
CourseUnitImpl cuImpl, |
CourseUnitImpl.Tipologia tMerge) { |
String msg; |
if(tMerge.isUse()) |
{ |
//todo Criar Tipologia Requisitada |
String cdDocente = tMerge.getCdDocente(); |
String cdTipologia = tMerge.getCdTipologia(); |
String dsTipologia = tMerge.getDsTipologia(); |
String cdTurma = tMerge.getCdTurma(); |
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo = DomainObjectFactory.createQuestionarioPedagogicoTipologiaRequisitadaImpl(); |
tipo.setCdDocente(cdDocente); |
tipo.setCdTipologia(cdTipologia); |
tipo.setCdTurma(cdTurma); |
tipo.setDsTipologia(dsTipologia); |
tipo.setUnidadeAfeta(unidadeCurricularAfeta); |
try{ |
CourseUnitImpl.TipologiaPersistent tMergePersistente = cuImpl.loadPersistent(tMerge); |
tipo.setNomeDocente(tMergePersistente.getTeacher().getName()); |
tipo.setDocenteAfeto(tMergePersistente.getTeacher()); |
tipo.setTurmaAfeta(tMergePersistente.getCourseUnitTurma()); |
DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().save(tipo); |
return criarAlunosRequisitados(q, tipo, tMergePersistente.getCourseUnitTurma(),unidadeCurricularAfeta,cursoAfeto); |
} |
catch(CourseUnitImpl.TipologiaLoadExeption exp) |
{ |
msg = "Tipologia não devolve persistente " + exp.getMessage() + " (docente:" + tMerge.getCdDocente() + ", turma: " + tMerge.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome() + " do curso de " + cursoAfeto.getNome() + "(" + cursoAfeto.getCodigoCurso() +")"; |
serviceLogError(msg); |
logger.error(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg)); |
return false; |
} |
//Depois o home tem de procurar respostas requisitadas sem resposta |
//para cada uma vai pelo aluno requisitado buscar a turma o docente e pela |
//unidade afeta a unidade e o curso |
//apresenta o questionario com o id da resposta requisitada |
} |
return false; |
} |
/** |
* Return true se encotrou pelo menos um aluno |
* @param q |
* @param tipo |
* @param turma |
* @param unidadeAfeta |
* @param cursoAfeto |
* @return |
*/ |
private boolean criarAlunosRequisitados(QuestionarioImpl q, |
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo, |
CourseUnitTurma turma, |
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta, |
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto) |
{ |
if(turma.getStudents() != null && turma.getStudents().size()>0) |
{ |
for(Student s: turma.getStudents()) |
{ |
unidadeAfeta.incStatRespostasRequisitadas(); |
cursoAfeto.incStatRespostasRequisitadas(); |
QuestionarioRespostaRequisitadaImpl respostaRequisitada = DomainObjectFactory.createQuestionarioRespostaRequisitadaImpl(); |
respostaRequisitada.setQuestionario(q); |
respostaRequisitada.setUser(s); |
DaoFactory.getQuestionarioRespostaRequisitadaDaoImplImpl().save(respostaRequisitada); |
QuestionarioPedagogicoAlunoRequisitadoImpl alunoRequisitado = DomainObjectFactory.createQuestionarioPedagogicoAlunoRequisitadoImpl(); |
alunoRequisitado.setTipologiaRequisitada(tipo); |
alunoRequisitado.setAluno(s); |
alunoRequisitado.setRespostaRequisitada(respostaRequisitada); |
DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().save(alunoRequisitado); |
respostasRequisitadas++; |
} |
return true; |
} |
return false; |
} |
private void verificaAlertasUnidade(DefaultLogMessages logMessages, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta) { |
String msg; |
if(unidadeCurricularAfeta.isMarked() || !unidadeCurricularAfeta.isVista() || !unidadeCurricularAfeta.isVistaProfs()) |
{ |
msg = " !!!! ALERTA :--> "; |
if(unidadeCurricularAfeta.isMarked()) |
{ |
unidadesMarcadas++; |
msg+= " MARCADA ; "; |
} |
if(!unidadeCurricularAfeta.isVista()) |
{ |
unidadesNaoVistasAlunos++; |
msg+= " NÃO VISTA ALUNOS ; "; |
} |
if(!unidadeCurricularAfeta.isVistaProfs()) |
{ |
unidadesNaoVistasProf++; |
msg+= " NÃO VISTA PROFS ; "; |
} |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg)); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/UpdateCoursesAndUnitsJobService.java |
---|
95,13 → 95,33 |
return new String[0]; |
} |
/************* |
* CRIAR O JOB PARA O RUNNER |
* @param questionarioId |
* @param coursesList |
* @param session |
* @param questionarioCleared |
* @return |
* @throws NotAuthorizedException |
*/ |
public QuestionarioImpl runJobSelectCourses(long questionarioId,String[] coursesList,UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException { |
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name())) |
{ |
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos"); |
} |
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES); |
/*******VERIFICACAO DE RESPOSTAS*********/ |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas == 0) |
{ |
(questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES); |
} |
else |
{ |
logger.warn("Vai falhar no serviço, deixar falhar para visar o user"); |
} |
JSONArray jsonArray = new JSONArray(); |
for(String sele: coursesList) |
{ |
145,6 → 165,15 |
{ |
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos"); |
} |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas > 0) |
{ |
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING, |
"Operação não permitida, Existem Respostas")); |
logger.warn(logMessages.getLastMessage()); |
serviceLogError(logMessages.getLastMessage()); |
return logMessages; |
} |
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId)) |
{ |
int unidades = 0; |
153,16 → 182,18 |
unidades = cu.getUnidadesAfetas().size(); |
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas()) |
{ |
logger.info("Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome()); |
unidadeCurricularAfeta.setCursoAfeto(null); |
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta); |
String msg = "Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome(); |
logger.info(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg)); |
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0) |
{ |
String msg = "A unidade tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas associadas"; |
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas"; |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg)); |
removeTipologiasERespostasCascade(unidadeCurricularAfeta); |
} |
unidadeCurricularAfeta.setCursoAfeto(null); |
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta); |
} |
} |
String msg = "Removendo curso afeto:" + cu.getNome() + " e " + unidades + " uniades afetas"; |
176,10 → 207,59 |
return logMessages; |
} |
public static ILogMessages revertAllRespostasCandidatas(long questionarioId, ServiceJob serviceJob) throws NotAuthorizedException { |
DefaultLogMessages logMessages = new DefaultLogMessages(); |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas > 0) |
{ |
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING, |
"Operação não permitida, Existem Respostas")); |
logger.warn(logMessages.getLastMessage()); |
serviceJob.serviceLogError(logMessages.getLastMessage()); |
throw new NotAuthorizedException(logMessages.getLastMessage()); |
} |
String msg = "Revertendo respostas candidatas do questionario " + questionarioId; |
logger.info(msg); |
serviceJob.serviceLogInfo(msg); |
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId)) |
{ |
msg = "Revertendo respostas do curso " + cu.getCodigoCurso() + " , iremos remover todas as tipologias e respostas candidatas associadas"; |
logger.info(msg); |
serviceJob.serviceLogInfo(msg); |
((QuestionarioPedagogicoCursoAfetoImpl)cu).resetAnswerStats(); |
int unidades = 0; |
if(cu.getUnidadesAfetas() != null) |
{ |
unidades = cu.getUnidadesAfetas().size(); |
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas()) |
{ |
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).resetAnswerStats(); |
logger.info("Reverting Respostas Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome()); |
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0) |
{ |
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas"; |
logger.info(msg); |
serviceJob.serviceLogWarn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg)); |
removeTipologiasERespostasCascade(unidadeCurricularAfeta); |
} |
} |
} |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.INFO,msg)); |
} |
return logMessages; |
} |
/** |
* |
*/ |
private void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta) |
protected static void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta) |
{ |
for(QuestionarioPedagogicoTipologiaRequisitada tr: unidadeAfeta.getTipologiasRequisitadas()) |
{ |
212,6 → 292,8 |
/** |
* |
* ############# JOB TASK ############ |
* ############# JOB TASK ############ |
* @return |
* @throws Throwable |
*/ |
223,6 → 305,17 |
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject()); |
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId); |
/********VERIFICACAO DE RESPOSTAS***********/ |
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId); |
if(respostas > 0) |
{ |
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING, |
"Operação não permitida, Existem Respostas")); |
logger.warn(logMessages.getLastMessage()); |
serviceLogError(logMessages.getLastMessage()); |
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas"); |
} |
String[] coursesList = deserializeCoursesList(q); |
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre |
232,6 → 325,8 |
logger.info(msg); |
/**logging**/ |
revertAllRespostasCandidatas(questionarioId,this); |
List<String> newCourseCodesList = new ArrayList<String>(); |
int count = 0; |
int totalCourses = coursesList.length; |
329,7 → 424,7 |
DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().delete(cursoAfeto); |
} |
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<String> newUnidadesCodesList) { |
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<Long> newUnidadesCodesList) { |
/** logging **/ |
String msg = "Removing unselected units from course: " + cursoAfetado.getCodigoCurso(); |
serviceLogInfo(msg); |
338,7 → 433,7 |
Set<QuestionarioPedagogicoUnidadeCurricularAfeta> allUnidades = cursoAfetado.getUnidadesAfetas(); |
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta: allUnidades) |
{ |
if(!newUnidadesCodesList.contains(unidadeAfeta.getCodigoUnidade())) |
if(!newUnidadesCodesList.contains(unidadeAfeta.getCourseUnit().getId())) |
{ |
/** logging **/ |
msg = "--->Deleting unidade: " + unidadeAfeta.getCodigoUnidade(); |
407,7 → 502,7 |
List<String> newUnitCodesList = new ArrayList<String>(); |
List<Long> newUnitCodesList = new ArrayList<Long>(); |
int countUnits = 0; |
List<CourseUnitDaoImpl.CourseUnitResult> results = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(c.getId(), q.getSemestre(), q.getYear()); |
int totalUnits = results.size(); |
415,7 → 510,7 |
{ |
countUnits++; |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(cur.id); |
newUnitCodesList.add(cu.getCode()); |
newUnitCodesList.add(cu.getId()); |
/** logging **/ |
msg = "---->(" + countUnits + " of " + totalUnits +") CourseUnit loaded: " + cu.getName() + "(" + cu.getCode() + ")"; |
serviceLogInfo(msg); |
439,10 → 534,10 |
String msg; |
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta = null; |
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getCode()); |
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getId()); |
if(unidadesFound != null && unidadesFound.size() > 1) |
{ |
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " apagando um"; |
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " com id sistema(" + cu.getId() + ") apagando um"; |
serviceLogWarn(msg); |
logger.warn(msg); |
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg)); |
472,7 → 567,7 |
unidadeAfeta.setCursoAfeto(cursoAfeto);//so metemos de um dos lados |
unidadeAfeta.setCourseUnit(cu); |
unidadeAfeta.setCodigoUnidade(cu.getCode()); |
unidadeAfeta.setObs(""); |
unidadeAfeta.addObs(""); |
unidadeAfeta.setNome(cu.getName()); |
unidadeAfeta.setMarked(false); |
639,7 → 734,8 |
public void updateCheckVarPedagogico(long questionarioId,long unidadeAfetaId, String op,String val,UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException { |
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) && |
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name()) && |
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) && |
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) && |
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name())) |
{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/PedagogicoAlunosProcessor.java |
---|
7,6 → 7,7 |
import pt.estgp.estgweb.domain.UserSessionImpl; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport; |
import pt.estgp.estgweb.services.questionarios.pedagogico.AnswersAlunosProcessor; |
import pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService; |
import pt.estgp.estgweb.utils.ConfigProperties; |
46,106 → 47,135 |
questionario.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.START); |
} |
public void initClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s) |
{ |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS) |
assignationDetailsClearances(q, usession, s); |
if(q.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || q.getStateEnum() == QuestionarioImpl.State.PROCESSING || q.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS) |
{ |
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START || |
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession); |
if(usession.getUser().hasRole(Globals.ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession); |
} |
} |
} |
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() && |
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition()) |
private void assignationDetailsClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s) { |
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession); |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
if(q.getCourseSelectionTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition()) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession); |
else |
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START || |
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession); |
} |
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() && |
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition()) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession); |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId()); |
if(task.isExecuted() || (task.getSaveDate() != null && |
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos |
if(q.getCourseSelectionTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition()) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession); |
else |
{ |
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000) |
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId()); |
if(task.isExecuted() || (task.getSaveDate() != null && |
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos |
{ |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned |
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000) |
{ |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned |
} |
task.setExecuted(true); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession); |
} |
task.setExecuted(true); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession); |
} |
} |
} |
} |
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() && |
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition()) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_START_ASSIGN_ANSWERS.name(),usession); |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN)) |
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() && |
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition()) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession); |
} |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession); |
} |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name(),usession); |
} |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession); |
} |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession); |
//s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession); |
} |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession); |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name(),usession); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession); |
} |
//ATRIBUIR RESPOSTAS MAS SO DEPOIS DE CURSOS ATRIBUIDOS |
if(q.getAnswerGenerationTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition()) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession); |
else |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getAnswerGenerationTaskId()); |
if(task.isExecuted() || (task.getSaveDate() != null && |
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_START_ASSIGN_ANSWERS.name(),usession); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession); |
//ATRIBUIR RESPOSTAS MAS SO DEPOIS DE CURSOS ATRIBUIDOS |
if(q.getAnswerGenerationTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition()) |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession); |
else |
{ |
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000) |
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getAnswerGenerationTaskId()); |
if(task.isExecuted() || (task.getSaveDate() != null && |
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos |
{ |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);//rolling back to courses assigned |
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000) |
{ |
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);//rolling back to courses assigned |
} |
task.setExecuted(true); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession); |
} |
task.setExecuted(true); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession); |
} |
} |
} |
} |
if(q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition()) |
{ |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
if(q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition()) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_FINNISH_ASSIGNEMENTS.name(),usession); |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.name(),usession); |
} |
} |
} |
} |
@Override |
public Class getJobServiceTaskAnswersProcessor() { |
return AnswersAlunosProcessor.class; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosService.java |
---|
1,12 → 1,22 |
package pt.estgp.estgweb.services.questionarios; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl; |
import pt.estgp.estgweb.domain.views.QuestionarioView; |
import pt.estgp.estgweb.services.email.EMAILJob; |
import pt.estgp.estgweb.services.email.EMAILJobPersonalizedCertificated; |
import pt.estgp.estgweb.services.email.SendEmailService; |
import pt.estgp.estgweb.services.jobs.JobScheduleService; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.List; |
import java.util.*; |
/** |
* Created by jorgemachado on 21/03/16. |
14,6 → 24,8 |
public class QuestionariosService implements IService |
{ |
private static final Logger logger = Logger.getLogger(QuestionariosService.class); |
//NEW QUESTIONARIOS COME BY THIS SERVICE |
public QuestionarioImpl newQuestionarioForm(QuestionarioImpl qform, UserSession userSession) throws NotAuthorizedException |
{ |
113,4 → 125,194 |
} |
} |
/** |
* Passa para o estado ASSIGNED_ANSWERS |
* @param questionarioId |
* @param userSession |
* @param questionarioCleared |
* @return |
*/ |
public QuestionarioImpl putAssignedAnswers(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
{ |
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.toString())) |
{ |
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNED_ANSWERS); |
} |
return questionarioCleared; |
} |
public QuestionarioImpl revertAssignationDetails(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
{ |
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.toString())) |
{ |
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNATION_DETAILS); |
} |
return questionarioCleared; |
} |
public QuestionarioImpl startProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
{ |
if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.toString())) |
{ |
if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.ASSIGNED_ANSWERS) |
questionarioCleared.setStateClass(QuestionarioImpl.State.PROCESSING); |
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS) |
questionarioCleared.setStateClass(QuestionarioImpl.State.PROCESSING_WITH_ANSWERS); |
} |
return questionarioCleared; |
} |
public QuestionarioImpl stopProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
{ |
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.toString())) |
{ |
if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.PROCESSING) |
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNED_ANSWERS); |
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS) |
questionarioCleared.setStateClass(QuestionarioImpl.State.STOPED_WITH_ANSWERS); |
} |
return questionarioCleared; |
} |
public void salvarResposta(QuestionarioResposta resposta,Long alunoRequisitadoId,UserSession userSession) throws NotAuthorizedException { |
Questionario q = DaoFactory.getQuestionarioDaoImpl().load(resposta.getQuestionario().getId()); |
QuestionarioImpl questionario = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().narrow(q); |
QuestionarioPedagogicoAlunoRequisitado alunoRequisitado = DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().load(alunoRequisitadoId); |
if(questionario.getStateEnum() != QuestionarioImpl.State.PROCESSING && questionario.getStateEnum() != QuestionarioImpl.State.PROCESSING_WITH_ANSWERS ) |
{ |
throw new NotAuthorizedException("O questionário interrompido por razões administrativas, por favor tente mais tarde"); |
} |
if(!((alunoRequisitado.getRespostaRequisitada().getQuestionario().getId() == questionario.getId()) |
&& |
alunoRequisitado.getRespostaRequisitada().getResposta() == null |
&& |
alunoRequisitado.getAluno().getId() == userSession.getUser().getId())) |
{ |
throw new NotAuthorizedException("Não está autorizado a submeter esta resposta."); |
} |
resposta.setId(0); |
resposta.setQuestionario(questionario); |
resposta.setUser(alunoRequisitado.getAluno()); |
alunoRequisitado.getRespostaRequisitada().setResposta(resposta); |
DaoFactory.getQuestionarioRespostaDaoImpl().save(resposta); |
questionario.setStateClass(QuestionarioImpl.State.PROCESSING_WITH_ANSWERS); |
} |
SendEmailService sendEmailService = new SendEmailService(); |
public int sendMessage(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario message"; |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIds(id, onlyNotAnswered); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
public int sendMessageCursoAfeto(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario curso message"; |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, id, 0); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
public int sendMessageUnidadeAfeta(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario unidade message"; |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, 0, id); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
public int sendMessageAllProcessing(boolean onlyNotAnswered,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionarios em processamento message"; |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogicoAllProcessing(onlyNotAnswered); |
return sendEmails(null, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
private int sendEmails(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source, AnnouncementDaoImpl.FindUsersIdResult result) { |
List<Long> usersToConsume = result.userIds; |
logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients"); |
logger.info("Sender User logged in BACO: " + userSession.getUser().getName() + "(" + userSession.getUser().getUsername() + ")" + " - " + userSession.getUser().getEmail()); |
//while(usersToConsume.size() > 0) |
//{ |
// Iterator<String> iter = usersToConsume.iterator(); |
// List<String> usersToJob = new ArrayList<String>(); |
// int contador = 0; |
// while(iter.hasNext() && contador < 20) |
// { |
// usersToJob.add(iter.next()); |
// iter.remove(); |
// contador++; |
// } |
String suffix = Globals.SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE; |
if(suffix.startsWith("/")) |
suffix = suffix.substring(1); |
String url = Globals.SITE_URL.endsWith("/") ? Globals.SITE_URL + suffix : Globals.SITE_URL + "/" + suffix; |
EmailPersonalizedCertificated e = sendEmailService.getMessageEmailAdulteredFromEmailIppCertificated(emailFrom, |
personFrom, |
subject, |
msg, |
userSession.getUser(), |
usersToConsume, |
url); |
e.setHtml(true); |
EMAILJobPersonalizedCertificated emailJob = new EMAILJobPersonalizedCertificated(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
//} |
enviarComprovativoAoRemetente(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size()); |
enviarComprovativoAAdministracao(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size()); |
return result.users; |
} |
private void enviarComprovativoAAdministracao(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo) |
{ |
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
personFrom, |
subject + " (COMPROVATIVO PAE) ", |
"<u>Caros membros da administração este é um comprovativo de um email enviado pelo PAE pelo user: " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg, |
ConfigProperties.getListValuesByPrefix("admin.email"), |
userSession.getUser()); |
e.setHtml(true); |
EMAILJob emailJob = new EMAILJob(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
} |
private void enviarComprovativoAoRemetente(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo) |
{ |
Map<String,String> emailsComprovativos = new HashMap<String, String>(); |
if(Email.validEmail(userSession.getUser().getEmail())) |
emailsComprovativos.put(userSession.getUser().getEmail(),""); |
if(Email.validEmail(userSession.getUser().getOutEmail())) |
emailsComprovativos.put(userSession.getUser().getOutEmail(),""); |
if(Email.validEmail(userSession.getUser().getPreferrefEmail())) |
emailsComprovativos.put(userSession.getUser().getPreferrefEmail(),""); |
List<String> comprovativos = new ArrayList<String>(); |
comprovativos.addAll(emailsComprovativos.keySet()); |
if(comprovativos.size() > 0) |
{ |
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
personFrom, |
subject + " (COMPROVATIVO PAE) ", |
"<u>Olá " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg, |
comprovativos, |
userSession.getUser()); |
e.setHtml(true); |
EMAILJob emailJob = new EMAILJob(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/authenticate/AuthenticateService.java |
---|
329,6 → 329,15 |
User u = DaoFactory.getUserDaoImpl().load(userId); |
return createCertificate(u, usersession); |
} |
public String createCertificateForId(long userId) |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
return createCertificate(u); |
} |
public String createCertificate(User user) |
{ |
return createCertificate(user,null); |
} |
/** |
* Create a new Certificate for usage in URL auto login |
* |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/utils/UrlHashValidatorService.java |
---|
New file |
0,0 → 1,22 |
package pt.estgp.estgweb.services.utils; |
import jomm.utils.BytesUtils; |
/** |
* Created by jorgemachado on 10/10/16. |
*/ |
public class UrlHashValidatorService { |
private static final String PREFIX_TRASH = "#=%$%&(dsfde"; |
private static final String SUFFIX_TRASH = "vF64%dKZd_9d"; |
public static String getHashString(String data) |
{ |
return BytesUtils.getMD5(PREFIX_TRASH + data + SUFFIX_TRASH); |
} |
public static boolean checkHashString(String data, String hash) |
{ |
return hash.equals(getHashString(data)); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/entity/EntityServiceJson.java |
---|
2,12 → 2,13 |
import com.owlike.genson.Genson; |
import com.owlike.genson.TransformationException; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.IOException; |
import java.io.Serializable; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 22/03/16. |
27,8 → 28,37 |
.create(); |
static Genson userGenson = new Genson.Builder() |
.exclude(Object.class) |
.exclude(User.class) |
.exclude(GenericUser.class) |
.exclude(Student.class) |
.exclude(Teacher.class) |
.include("id", User.class) |
.include("name", User.class) |
.include("sigesCode", User.class) |
.include("email", User.class) |
.include("roles", User.class) |
.create(); |
public String courseUnit(CourseUnit cu) throws IOException, TransformationException { |
return courseUnitGenson.serialize(cu); |
} |
public String courseUnit(Serializable s) throws IOException, TransformationException { |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().get(s); |
return courseUnitGenson.serialize(cu); |
} |
public String user(Serializable s) throws IOException, TransformationException { |
User u = DaoFactory.getUserDaoImpl().get(s); |
return userGenson.serialize(u); |
} |
public String user(User u) throws IOException, TransformationException { |
return userGenson.serialize(u); |
} |
public String user(ArrayList<User> users) throws IOException, TransformationException { |
return userGenson.serialize(users); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventGenericImpl.java |
---|
New file |
0,0 → 1,25 |
package pt.estgp.estgweb.domain; |
import java.io.Serializable; |
import java.util.List; |
/** |
* Created by jorgemachado on 05/09/16. |
*/ |
public class EventGenericImpl extends EventGeneric { |
@Override |
public List<String> getOwnerRoles() { |
return null; |
} |
@Override |
public String getChoosedOwnerRole() { |
return null; |
} |
@Override |
public Serializable getSerializable() { |
return null; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventFormacoesImpl.java |
---|
New file |
0,0 → 1,33 |
package pt.estgp.estgweb.domain; |
/** |
* Created by jorgemachado on 07/09/16. |
*/ |
public class EventFormacoesImpl extends EventFormacoes { |
private Double lucro = null; |
private Boolean rentavel = false; |
private Double percentagemLucro = 0.0; |
public double getLucroPrevisto() |
{ |
if(lucro == null) |
{ |
double entradas = getPrecoFormando() * getEventRecords().size(); |
double custos = getCustoFormacao(); |
lucro = entradas - custos; |
percentagemLucro = lucro <= 0 ? 0.0 : lucro/custos; |
if(percentagemLucro > getPercentagemMinimaLucro()) |
rentavel = true; |
} |
return lucro; |
} |
public double getPercentagemLucro(){ |
getLucroPrevisto(); |
return percentagemLucro; |
} |
public boolean isRentavel(){ |
getLucroPrevisto(); |
return rentavel; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/StudentImpl.java |
---|
3,6 → 3,7 |
import jomm.utils.StringsUtils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
50,8 → 51,11 |
return subscribedCoursesOldYearsView; |
} |
public String getManagedRole() { |
return STUDENT_ROLE; |
public String getManagedRole() |
{ |
List<String> roles = new ArrayList<String>(); |
roles.add(STUDENT_ROLE); |
return RoleManager.getSerialRoles(roles); |
} |
public List<CourseUnit> getSubscribedUnitsViewS1() |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventClassImpl.java |
---|
New file |
0,0 → 1,8 |
package pt.estgp.estgweb.domain; |
/** |
* Created by jorgemachado on 05/09/16. |
*/ |
public class EventClassImpl extends EventClass { |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/IAnswersProcessor.java |
---|
20,4 → 20,6 |
/** to be used on clearances initialization**/ |
public void initClearances(QuestionarioImpl questionario, UserSessionImpl session, SimpleClearanceRuledSupport s); |
public Class getJobServiceTaskAnswersProcessor(); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseView.java |
---|
42,6 → 42,9 |
private String code; |
private String area; |
private String name; |
private String nameEn; |
private String nameEs; |
private String nameFr; |
private String degree; |
private String importYear; |
private String description; |
86,14 → 89,27 |
private String externalSitePath; |
private String validationRole; |
private boolean status; |
private boolean showStudiesPlan; |
private String userGroupStudents; |
private List<CourseYearView> courseYearViews = new DynamicArrayList<CourseYearView>(CourseYearView.class); |
private List<CourseStudiesPlan> courseStudiesPlans = new DynamicArrayList<CourseStudiesPlan>(CourseStudiesPlan.class); |
public List<CourseStudiesPlan> getCourseStudiesPlans() { |
return courseStudiesPlans; |
} |
public void setCourseStudiesPlans(List<CourseStudiesPlan> courseStudiesPlans) { |
this.courseStudiesPlans = courseStudiesPlans; |
} |
private Course course; |
public CourseDepartment getCourseDepartment(){ |
return course.getDepartment(); |
} |
public boolean isStatus() { |
return status; |
} |
138,11 → 154,19 |
courseYearViews.add(courseYearView); |
} |
this.course = course; |
if(course.getDepartment() != null) |
{ |
course.getDepartment().getName(); |
} |
this.id = course.getId(); |
this.code = course.getCode(); |
this.area = course.getArea(); |
this.name = course.getName(); |
this.nameEn = course.getNameEn(); |
this.nameEs = course.getNameEs(); |
this.nameFr = course.getNameFr(); |
this.degree = course.getDegree(); |
this.validationRole = course.getValidationRole(); |
this.description = course.getDescription(); |
152,6 → 176,7 |
this.externalSitePath = course.getExternalSitePath(); |
this.externalSiteServer = course.getExternalSiteServer(); |
this.status = course.isStatus(); |
this.showStudiesPlan = course.isShowStudiesPlan(); |
this.userGroupStudents = course.getUserGroupStudents(); |
if(course.getStudiesPlan() != null) |
this.studiesPlanStreamId = course.getStudiesPlan(); |
187,16 → 212,24 |
} |
} |
c.setCode(code); |
c.setArea(area); |
// c.setArea(area); |
CourseDepartment department = DaoFactory.getCourseDepartmentDaoImpl().findBySigla(area); |
if(department != null) |
c.setDepartment(department); |
c.setDegree(degree); |
c.setDescription(description); |
c.setImportYear(importYear); |
c.setInstitutionalCode(institutionalCode); |
c.setName(name); |
c.setNameEn(nameEn); |
c.setNameEs(nameEs); |
c.setNameFr(nameFr); |
c.setExternalSitePath(externalSitePath); |
c.setExternalSiteServer(externalSiteServer); |
c.setValidationRole(validationRole); |
c.setStatus(status); |
c.setShowStudiesPlan(showStudiesPlan); |
c.setUserGroupStudents(userGroupStudents); |
if(coordinator != null && coordinator.getId() > 0) |
{ |
278,6 → 311,30 |
this.name = name; |
} |
public String getNameEn() { |
return nameEn; |
} |
public void setNameEn(String nameEn) { |
this.nameEn = nameEn; |
} |
public String getNameEs() { |
return nameEs; |
} |
public void setNameEs(String nameEs) { |
this.nameEs = nameEs; |
} |
public String getNameFr() { |
return nameFr; |
} |
public void setNameFr(String nameFr) { |
this.nameFr = nameFr; |
} |
public String getDegree() |
{ |
return degree; |
703,7 → 760,14 |
this.userGroupStudents = userGroupStudents; |
} |
public boolean isShowStudiesPlan() { |
return showStudiesPlan; |
} |
public void setShowStudiesPlan(boolean showStudiesPlan) { |
this.showStudiesPlan = showStudiesPlan; |
} |
public boolean isSeparatedUnits(String year) |
{ |
for(CourseYearView cyv: courseYearViews) |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java |
---|
654,6 → 654,18 |
} |
return views; |
} |
public static List<UserView> getViewsFromIds(List<Long> usersIds) |
{ |
if(usersIds == null) |
return null; |
List<UserView> views = new ArrayList<UserView>(); |
for(Long uId: usersIds) |
{ |
views.add(new UserView(DaoFactory.getUserDaoImpl().load(uId))); |
} |
return views; |
} |
public static List<UserView> getTeacherViews(List<Teacher> users) |
{ |
if(users == null) |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java |
---|
34,6 → 34,7 |
private String courseName; |
private String semestre; |
private String importYear; |
private String institutionCode; |
private String contentsGrants; |
private BlogView blog; |
private String pathIntranet; |
142,6 → 143,7 |
this.sumariosPathFileIntranet = ((CourseUnitImpl)courseUnit).getSummariosPathFileIntranet(); |
this.evaluationOpenByAdmin = courseUnit.isEvaluationOpenByAdmin(); //nao tem persistencia propria tem de ser feito num serviço |
this.cdTurma = courseUnit.getCdTurma(); |
this.institutionCode = courseUnit.getInstitutionCode(); |
// this.objectives = courseUnit.getObjectives(); DEPRECATED |
if(courseUnit.getCourseUnitProgram() !=null && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null) |
207,7 → 209,7 |
logger.error("Unidade sem turmas: " + courseUnit.getName() + " (" + courseUnit.getCode() + ")"); |
} |
if(students.size() != courseUnit.getStudents().size()) |
if(initStudents && students.size() != courseUnit.getStudents().size()) |
{ |
for(Student s: courseUnit.getStudents()) |
{ |
470,6 → 472,7 |
c.setCode(code); |
c.setCdTurma(cdTurma); |
c.setSemestre(semestre); |
c.setInstitutionCode(institutionCode); |
if(courseId > 0) |
{ |
c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId)); |
729,7 → 732,14 |
return true; |
} |
public String getInstitutionCode() { |
return institutionCode; |
} |
public void setInstitutionCode(String institutionCode) { |
this.institutionCode = institutionCode; |
} |
public boolean isValidProgram() |
{ |
return validProgram; |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoUnidadeCurricularAfetaImpl.java |
---|
9,8 → 9,10 |
{ |
if(getObs() == null) |
setObs(""); |
else if(obs.trim().length() > 0) |
setObs(getObs() + " ; "); |
setObs(getObs() + " ; " + obs); |
setObs(getObs() + obs); |
} |
public void resetStats() { |
19,9 → 21,19 |
setStudents(0); |
setProfs(0); |
setMarked(false); |
setObs(""); |
//setObs(""); |
setProfsWithoutTurma(0); |
setTurmas(0); |
setTurmaWithoutProf(0); |
} |
public void resetAnswerStats() { |
setStatTipologiasRequisitadas(0); |
setStatRespostasRequisitadas(0); |
} |
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);} |
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseImpl.java |
---|
1,6 → 1,9 |
package pt.estgp.estgweb.domain; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import java.io.Serializable; |
import java.util.List; |
/** |
* @author Jorge Machado |
21,4 → 24,52 |
return userSession.getUser()!= null && |
userSession.getUser().hasRole(getValidationRole()); |
} |
public String getDegreeForJsonApi() |
{ |
return ConfigProperties.getProperty("course." + getDegree()); |
} |
public void setDegreeForJsonApi() |
{ |
//is needed for Genson generation |
} |
public String getStatusForJsonApi() |
{ |
if(isShowStudiesPlan()) |
{ |
return "active"; |
} |
else |
return "inactive"; |
} |
public void setStatusForJsonApi() |
{ |
//is needed for Genson generation |
} |
public String getSchoolForJsonApi() |
{ |
return ConfigProperties.getProperty("institution.code.prefix." + getInstitutionalCode()); |
} |
public void setSchoolForJsonApi() |
{ |
//is needed for Genson generation |
} |
//Auxiliary method fot manual load |
List<Teacher> courseComission; |
public void setCourseComission(List<Teacher> courseComission) { |
this.courseComission = courseComission; |
} |
public List<Teacher> getCourseComission() { |
return courseComission; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java |
---|
415,4 → 415,31 |
public static ConfigurationImpl createConfigurationImpl() { |
return new ConfigurationImpl(); |
} |
public static QuestionarioRespostaRequisitadaImpl createQuestionarioRespostaRequisitadaImpl(){ |
return new QuestionarioRespostaRequisitadaImpl(); |
} |
public static QuestionarioRespostaImpl createQuestionarioRespostaImpl() { |
return new QuestionarioRespostaImpl(); |
} |
public static CourseStudiesPlanImpl createCourseStudiesPlanImpl() { |
return new CourseStudiesPlanImpl(); |
} |
public static CourseDepartmentImpl createCourseDepartmentImpl() { |
return new CourseDepartmentImpl(); |
} |
public static EventClassImpl createEventClass() { |
return new EventClassImpl(); |
} |
public static EventGenericImpl createEventGenericImpl() { |
return new EventGenericImpl(); |
} |
public static EventFormacoesImpl createEventFormacoesImpl() { |
return new EventFormacoesImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseStudiesPlanImpl.java |
---|
New file |
0,0 → 1,14 |
package pt.estgp.estgweb.domain; |
import java.io.Serializable; |
/** |
* Created by jorgemachado on 28/07/16. |
*/ |
public class CourseStudiesPlanImpl extends CourseStudiesPlan |
{ |
@Override |
public Serializable getSerializable() { |
return getId(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java |
---|
112,4 → 112,11 |
{ |
return DesUtils.getInstance().decrypt(getPop3password()); |
}*/ |
public String getShortName() |
{ |
if(getName() != null) |
return getName().split(" ")[0]; |
return getName(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventUserImpl.java |
---|
New file |
0,0 → 1,7 |
package pt.estgp.estgweb.domain; |
/** |
* Created by jorgemachado on 12/09/16. |
*/ |
public class EventUserImpl extends EventUser { |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioImpl.java |
---|
30,7 → 30,7 |
CREATED(1), |
ASSIGNATION_DETAILS(2), |
ASSIGNING_ANSWERS_PROCESSEMENT(3), |
ASSIGNING_ANSWERS_PROCESSEMENT(3), //NAO USADO NO PEDAGOGIGO OS ESTADOS INTERNOS RESOLVEM O PROBLEMA |
ASSIGNED_ANSWERS(4), |
PROCESSING(5), |
PROCESSING_WITH_ANSWERS(6), |
213,6 → 213,11 |
public void initClearances(QuestionarioImpl questionario, UserSessionImpl session, SimpleClearanceRuledSupport s) { |
} |
@Override |
public Class getJobServiceTaskAnswersProcessor() { |
return null; |
} |
}; |
} |
284,9 → 289,10 |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN)) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession); |
304,24 → 310,49 |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_DELETE.name(),usession); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_ANSWER_PROCESSOR.name(),usession); |
} |
if(getStateEnum() == State.ASSIGNED_ANSWERS) |
{ |
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.name(),usession); |
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession); |
} |
if(getStateEnum() == State.PROCESSING) |
{ |
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession); |
} |
if(getStateEnum() == State.PROCESSING_WITH_ANSWERS) |
{ |
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession); |
} |
if(getStateEnum() == State.STOPED_WITH_ANSWERS) |
{ |
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession); |
} |
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession); |
} |
} |
//ANO SEMESTRE ESPECIFICO apenas neste estado, em atribuição de respostas e respostas atribuidas já não permite |
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS) |
{ |
if((usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession); |
} |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_ASSIGNATION_OPERATIONS.name(),usession); |
} |
getiAnswersProcessorClass().initClearances(this,usession,s); |
} |
if(getStateEnum() == State.ASSIGNING_ANSWERS_PROCESSEMENT) |
if(getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || getStateEnum() == QuestionarioImpl.State.PROCESSING || getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS) |
{ |
if(usession.getUser().isSuperuserOrAdmin() |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN) |
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS)) |
{ |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession); |
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession); |
} |
} |
} |
//AS CLEARANCES SAO VERIFICADAS LA DENTRO PARA TODOS OS ESTADOS |
getiAnswersProcessorClass().initClearances(this,usession,s); |
setClearanceRuledSupport(s); |
} |
338,6 → 369,13 |
QUESTIONARIO_DELETE, |
QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS, |
QUESTIONARIO_PUT_ANSWERS_ASSIGNED, |
QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS, |
QUESTIONARIO_START_PROCESSEMENT, |
QUESTIONARIO_STOP_PROCESSEMENT, |
/*Pedagogico Cursos*/ |
QUESTIONARIO_SET_ANO_SEMESTRE, |
QUESTIONARIO_SCHEDULLE_SELECT_COURSES, |
347,7 → 385,10 |
QUESTIONARIO_SEE_START_ASSIGN_ANSWERS, |
QUESTIONARIO_CHANGE_ASSIGNEMENTS, |
QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS, |
QUESTIONARIO_FINNISH_ASSIGNEMENTS, |
QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT, |
QUESTIONARIO_SEE_DASHBOARD |
; |
public static QuestionarioClearancesOperation parse(String clearance) |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java |
---|
511,8 → 511,36 |
setTipologias(tipologias.serialize()); |
} |
public TipologiaPersistent loadPersistent(Tipologia myTipo) |
public static class TipologiaLoadExeption extends Exception |
{ |
boolean teacherFail = false; |
boolean turmaFail = false; |
public TipologiaLoadExeption(boolean teacherFail, boolean turmaFail) { |
this.teacherFail = teacherFail; |
this.turmaFail = turmaFail; |
} |
public boolean isTeacherFail() { |
return teacherFail; |
} |
public boolean isTurmaFail() { |
return turmaFail; |
} |
@Override |
public String getMessage() { |
return "Professor: " + (teacherFail? "Falhou" : "OK") + " Turma: " + (turmaFail? "Falhou" : "OK"); |
} |
} |
/** |
* |
* @param myTipo |
* @return |
*/ |
public TipologiaPersistent loadPersistent(Tipologia myTipo) throws TipologiaLoadExeption |
{ |
TipologiaPersistent tipologiaPersistent = new TipologiaPersistent(); |
tipologiaPersistent.setHorRef(myTipo.isHorRef()); |
tipologiaPersistent.setExtra(myTipo.isExtra()); |
526,7 → 554,7 |
if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null) |
{ |
logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.getCdTurma() + " teacher code: " + myTipo.getCdDocente()); |
return null; |
throw new TipologiaLoadExeption(tipologiaPersistent.getTeacher() == null,tipologiaPersistent.getCourseUnitTurma() == null); |
} |
return tipologiaPersistent; |
} |
641,7 → 669,16 |
protected boolean extra; |
protected boolean horRef; |
protected boolean tdocturma = false; |
public boolean isTdocturma() { |
return tdocturma; |
} |
public void setTdocturma(boolean tdocturma) { |
this.tdocturma = tdocturma; |
} |
public boolean isUse() { |
return use; |
} |
775,7 → 812,14 |
ArrayList<Tipologia> tipologiasExtraAdicionadas = new ArrayList<Tipologia>(); |
ArrayList<Tipologia> tipologiasUsadas = new ArrayList<Tipologia>(); |
ArrayList<Tipologia> tipologiasMarcadas = new ArrayList<Tipologia>(); |
ArrayList<Tipologia> tipologiasTdocTurma = new ArrayList<Tipologia>(); |
public ArrayList<Tipologia> getTipologiasTdocTurma() { |
return tipologiasTdocTurma == null ? new ArrayList<Tipologia>() : tipologiasTdocTurma; |
} |
public void setTipologiasTdocTurma(ArrayList<Tipologia> tipologiasTdocTurma) { this.tipologiasTdocTurma = tipologiasTdocTurma; } |
public ArrayList<Tipologia> getTipologiasHorarioReferencia() { |
return tipologiasHorarioReferencia == null ? new ArrayList<Tipologia>() : tipologiasHorarioReferencia; |
822,11 → 866,13 |
.include("tipologiasHorarioReferencia", Tipologias.class) |
.include("tipologiasUsadas", Tipologias.class) |
.include("tipologiasMarcadas", Tipologias.class) |
.include("tipologiasTdocTurma", Tipologias.class) |
.include("cdTipologia", Tipologia.class) |
.include("cdDocente", Tipologia.class) |
.include("cdTurma", Tipologia.class) |
.include("dsTipologia",Tipologia.class) |
.include("ocorrencias", Tipologia.class) |
.include("tdocturma", Tipologia.class) |
.create(); |
return genson; |
} |
844,6 → 890,7 |
.include("horRef", Tipologia.class) |
.include("extra", Tipologia.class) |
.include("use", Tipologia.class) |
.include("tdocturma", Tipologia.class) |
.include("markWarning", Tipologia.class) |
.create(); |
return genson; |
914,6 → 961,14 |
return serializeMergedList(obtainMergeTipologias()); |
} |
/** |
* Junta todas as tipologias obtidas dos sumarios, horario(ref+trab) + extra |
* e coloca todas numa lista de unicas |
* Marca-as com isHorario, isSumario, isExtra |
* @return |
*/ |
public ArrayList<Tipologia> obtainMergeTipologias() |
{ |
ArrayList<Tipologia> merge = new ArrayList<Tipologia>(); |
975,10 → 1030,27 |
} |
} |
} |
if(getTipologiasTdocTurma() != null) |
for(Tipologia t: getTipologiasTdocTurma()) |
{ |
for(Tipologia tMerge: merge) |
{ |
if(tMerge.equals(t)) |
{ |
tMerge.setUse(true); |
break; |
} |
} |
} |
return merge; |
} |
/** |
* |
* |
* @param courseUnit |
* @return |
*/ |
public ArrayList<Tipologia> obtainTipologiasSimples(CourseUnit courseUnit) |
{ |
ArrayList<Tipologia> merge = new ArrayList<Tipologia>(); |
990,6 → 1062,7 |
fullfillTipologiasSimples(getTipologiasHorarioReferencia(), docenteTurmas); |
fullfillTipologiasSimples(getTipologiasMarcadas(), docenteTurmas); |
fullfillTipologiasSimples(getTipologiasUsadas(), docenteTurmas); |
fullfillTipologiasSimples(getTipologiasTdocTurma(), docenteTurmas); |
if(docenteTurmas.size() == 0) |
1003,6 → 1076,7 |
{ |
Tipologia simples = new Tipologia(); |
simples.setMarkWarning(true); |
//simples.setUse(true); |
simples.setCdDocente(""+t.getSigesCode()); |
simples.setCdTurma(turma.getTurma()); |
simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE); |
1025,6 → 1099,14 |
return merge; |
} |
/** |
* Cria uma tipologia Simples para cada par Docente-Turma nesta cadeira olhando para |
* todas as tipologias existentes, uma vez que o Baco não guarda associações entre |
* Docentes e Turmas isso será retirado das tipologias importadas |
* |
* @param tipologias |
* @param docenteTurmas |
*/ |
private void fullfillTipologiasSimples(ArrayList<Tipologia> tipologias, Map<String, Map<String, Tipologia>> docenteTurmas) { |
if(tipologias != null) |
for(Tipologia tipo: tipologias) |
1041,17 → 1123,22 |
simples.setCdTurma(tipo.getCdTurma()); |
simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE); |
simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS); |
//simples.setUse(true);//TODAS USADAS |
if(tipo.hasOcorrencias()) |
{ |
simples.setOcorrencias(tipo.getOcorrencias()); |
} |
turmasDocente.put(tipo.getCdTurma(),simples); |
if(tipo.isTdocturma()) |
simples.setTdocturma(true); |
} |
if(tipo.hasOcorrencias()) |
else if(tipo.hasOcorrencias()) |
{ |
if(simples.getOcorrencias() == null) |
simples.setOcorrencias(0); |
simples.setOcorrencias(simples.getOcorrencias()+tipo.getOcorrencias()); |
if(tipo.isTdocturma()) |
simples.setTdocturma(true); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java |
---|
7,9 → 7,11 |
import org.hibernate.HibernateException; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.Teacher; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.dao.DaoUtils; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
import pt.estgp.estgweb.utils.RoleManager; |
import java.io.Serializable; |
import java.util.ArrayList; |
133,6 → 135,16 |
} |
} |
public List<User> loadRoleUsers(String role, int maxResults, int firstResult) |
{ |
Criteria c = createCriteria() |
.add(like("roles","%" + role + RoleManager.ROLE_SEPARATOR +"%")) |
.addOrder(Order.asc("name")) |
.setMaxResults(maxResults) |
.setFirstResult(firstResult); |
return c.list(); |
} |
public List<User> loadRoleUsers(String role) |
{ |
if(role == null || role.trim().length() == 0) |
148,6 → 160,16 |
return users; |
} |
public List<Teacher> loadRoleTeachers(String role) |
{ |
if(role == null || role.trim().length() == 0) |
return new ArrayList<Teacher>(); |
List<Teacher> users = createCriteria(Teacher.class).add(like("roles", "%" + role + ",%")).addOrder(Order.asc("name")).list(); |
return users; |
} |
public List<User> loadRoleAreaUsers(String role, String area) |
{ |
Criteria c = createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name")); |
169,6 → 191,11 |
return findUsers(textToSearch, null); |
} |
public List<User> findUsersFromClassUserAndTeacherOnly() |
{ |
return createCriteria().add(or(eq("class","UserImpl"),eq("class","TeacherImpl"))).list(); |
} |
public List<User> findUsers(String textToSearch, String typeToSearch) |
{ |
Criteria criteria; |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventFormacoesDaoImpl.java |
---|
New file |
0,0 → 1,24 |
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 EventFormacoesDaoImpl extends EventFormacoesDao |
{ |
private EventFormacoesDaoImpl() |
{ |
} |
public static EventFormacoesDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventFormacoesDaoImpl(); |
return (EventFormacoesDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioDaoImpl.java |
---|
1,15 → 1,18 |
package pt.estgp.estgweb.domain.dao.impl; |
import jomm.dao.DaoException; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.HibernateException; |
import org.hibernate.Query; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.QuestionarioImpl; |
import pt.estgp.estgweb.domain.*; |
import java.util.ArrayList; |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.eq; |
import static org.hibernate.criterion.Restrictions.*; |
/** |
* @author Jorge Machado |
63,5 → 66,295 |
} |
} |
public List<QuestionarioImpl> findProcessing() |
{ |
try |
{ |
Criteria criteria = createCriteria(); |
criteria.add(or(eq("state",QuestionarioImpl.State.PROCESSING.name()),eq("state",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name()))); |
return criteria.list(); |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
public List<QuestionarioImpl> findNotClosed() |
{ |
try |
{ |
Criteria criteria = createCriteria(); |
criteria.add(not(or(or(eq("state",QuestionarioImpl.State.CLOSED.name()),eq("state",QuestionarioImpl.State.PROCESSING_OLAP.name())), |
eq("state",QuestionarioImpl.State.OLAP.name())))) |
.addOrder(Order.desc("id")); |
return criteria.list(); |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
public long getNumeroRespostas(long questionarioId) |
{ |
Query q = getCurrentSession().createQuery |
("select count(r.id) from r in class " + QuestionarioResposta.class.getName() + " " + |
" JOIN r.questionario q " + |
" where q.id = " + questionarioId); |
Object result = q.uniqueResult(); |
if(result != null && ((Long)result) > 0) |
{ |
return (Long)result; |
} |
else |
return 0; |
} |
public long getNumeroAlunosComRespostas(long questionarioId) |
{ |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" count(distinct a.aluno.id) AS respostasAlunos " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.questionario q " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"JOIN a.respostaRequisitada rR " + |
"JOIN rR.resposta r " + |
"WHERE q.id = :id "); |
q.setLong("id",questionarioId); |
Object result = q.uniqueResult(); |
if(result != null) |
return (Long) result; |
return 0; |
} |
public long getNumeroUnidadesUsadas(long questionarioId) |
{ |
Query q = getCurrentSession().createQuery |
("select count(u.id) from u in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " + |
" JOIN u.cursoAfeto c " + |
" JOIN c.questionario q " + |
" where u.usar = true AND q.id = " + questionarioId); |
Object result = q.uniqueResult(); |
if(result != null && ((Long)result) > 0) |
{ |
return (Long)result; |
} |
else |
return 0; |
} |
public long getNumeroRespostasRequisitadas(long questionarioId) |
{ |
Query q = getCurrentSession().createQuery |
("select count(r.id) from r in class " + QuestionarioRespostaRequisitada.class.getName() + " " + |
" JOIN r.questionario q " + |
" where q.id = " + questionarioId); |
Object result = q.uniqueResult(); |
if(result != null && ((Long)result) > 0) |
{ |
return (Long)result; |
} |
else |
return 0; |
} |
/* |
public AnnouncementDaoImpl.FindUsersResult findUsersEmails(Long id,boolean onlyNotAnswered) |
{ |
AnnouncementDaoImpl.FindUsersResult findUsersResult = new AnnouncementDaoImpl.FindUsersResult(); |
List<String> users = new ArrayList<String>(); |
findUsersResult.emails = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.outEmail, u.preferrefEmail, u.email " + |
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " + |
"JOIN rR.questionario q " + |
"JOIN rR.user u " + |
"WHERE q.id = :id " + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
q.setLong("id",id); |
List<Object[]> results = (List<Object[]>) q.list(); |
fullFillResults(findUsersResult, results); |
return findUsersResult; |
} |
*/ |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIds(Long id,boolean onlyNotAnswered) |
{ |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.id " + |
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " + |
"JOIN rR.questionario q " + |
"JOIN rR.user u " + |
"WHERE q.id = :id " + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
q.setLong("id",id); |
List<Object> results = (List<Object>) q.list(); |
for(Object result: results) |
{ |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogico(boolean onlyNotAnswered,long cursoAfetoId,long unidadeAfetaId) |
{ |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.id " + |
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " + |
"JOIN aR.respostaRequisitada rR " + |
"JOIN rR.user u " + |
"WHERE " + |
(cursoAfetoId > 0 ? |
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.id = " + cursoAfetoId : |
" aR.tipologiaRequisitada.unidadeAfeta.id = " + unidadeAfetaId) + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
List<Object> results = (List<Object>) q.list(); |
for(Object result: results) |
{ |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogicoAllProcessing(boolean onlyNotAnswered) |
{ |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.id " + |
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " + |
"JOIN aR.respostaRequisitada rR " + |
"JOIN rR.user u " + |
"WHERE " + |
"( " + |
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP1 " + |
" OR " + |
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP2 " + |
")" + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
q.setString("sP1",QuestionarioImpl.State.PROCESSING.name()); |
q.setString("sP2",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name()); |
List<Object> results = (List<Object>) q.list(); |
for(Object result: results) |
{ |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
public static class QuestionarioStatsVars |
{ |
public long cursos; |
public long unidades; |
public long profs; |
public long alunos; |
public long turmas; |
public long alunosDeUsadas; |
public long profsDeUsadas; |
public long unidadesUsadas; |
public long tipologiasUsadas; |
public long profsTimeStudents; |
public long respostasRequisitadas; |
public long respostasObtidas; |
public long alunosQueResponderam; |
} |
public QuestionarioStatsVars loadQuestionarioStatsPedagogico(long questionarioId) |
{ |
QuestionarioStatsVars questionarioStatsVars = new QuestionarioStatsVars(); |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" count(distinct c.id) AS cursos " + |
",count(distinct u.id) AS unidades " + |
",sum (u.profs) AS profs " + |
",count(distinct t.cdTurma) AS turmas " + |
",sum (u.students) AS students " + |
",count(distinct a.aluno.id) AS alunosDeUsadas " + |
",count(distinct t.docenteAfeto.id) AS profsDeUsadas " + |
",count(distinct t.id) AS tipologiasRequisitadas " + |
",sum (case when u.usar = true then (u.profs * u.students) else 0 end) AS respostasEsperadas " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.questionario q " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"WHERE q.id = :id " + |
"GROUP BY q.id"); |
q.setLong("id",questionarioId); |
Object[] results = (Object[]) q.uniqueResult(); |
if(results != null && results[0] != null) |
{ |
questionarioStatsVars.cursos = (Long) results[0]; |
questionarioStatsVars.unidades = (Long) results[1]; |
questionarioStatsVars.profs = (Long) results[2]; |
questionarioStatsVars.turmas = (Long) results[3]; |
questionarioStatsVars.alunos = (Long) results[4]; |
questionarioStatsVars.alunosDeUsadas = (Long) results[5]; |
questionarioStatsVars.profsDeUsadas = (Long) results[6]; |
questionarioStatsVars.tipologiasUsadas = (Long) results[7]; |
questionarioStatsVars.profsTimeStudents = (Long) results[8]; |
questionarioStatsVars.alunosQueResponderam = getNumeroAlunosComRespostas(questionarioId); |
questionarioStatsVars.respostasRequisitadas = getNumeroRespostasRequisitadas(questionarioId); |
questionarioStatsVars.respostasObtidas = getNumeroRespostas(questionarioId); |
questionarioStatsVars.unidadesUsadas = getNumeroUnidadesUsadas(questionarioId); |
if(questionarioStatsVars.unidadesUsadas > questionarioStatsVars.unidades) |
logger.error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM"); |
} |
return questionarioStatsVars; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoCursoAfetoDaoImpl.java |
---|
1,7 → 1,9 |
package pt.estgp.estgweb.domain.dao.impl; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.Query; |
import org.hibernate.criterion.Projections; |
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto; |
import java.util.List; |
13,6 → 15,8 |
*/ |
public class QuestionarioPedagogicoCursoAfetoDaoImpl extends QuestionarioPedagogicoCursoAfetoDao{ |
private static final Logger logger = Logger.getLogger(QuestionarioPedagogicoCursoAfetoDaoImpl.class); |
public static QuestionarioPedagogicoCursoAfetoDaoImpl getInstance() { |
if (myInstance == null) |
myInstance = new QuestionarioPedagogicoCursoAfetoDaoImpl(); |
33,9 → 37,17 |
.list(); |
} |
public List<Long> findCursosAfetosIds(long questionarioId) |
{ |
return createCriteria() |
.setProjection(Projections.distinct(Projections.property("id"))) |
.add(eq("questionario.id", questionarioId)) |
.list(); |
} |
public static class CourseStatsVars |
{ |
public long unidades; |
46,6 → 58,8 |
public long naoUsadas; |
} |
public CourseStatsVars loadStats(long cursoAfetoId) |
{ |
CourseStatsVars courseStatsVars = new CourseStatsVars(); |
63,13 → 77,74 |
q.setLong("id",cursoAfetoId); |
Object[] results = (Object[]) q.uniqueResult(); |
courseStatsVars.porVer = (Long) results[0]; |
courseStatsVars.porVerProfs = (Long) results[1]; |
courseStatsVars.naoUsadas = (Long) results[2]; |
courseStatsVars.marcadas = (Long) results[3]; |
courseStatsVars.observadas = (Long) results[4]; |
courseStatsVars.unidades = (Long) results[5]; |
if(results != null && results[0] != null) |
{ |
courseStatsVars.porVer = (Long) results[0]; |
courseStatsVars.porVerProfs = (Long) results[1]; |
courseStatsVars.naoUsadas = (Long) results[2]; |
courseStatsVars.marcadas = (Long) results[3]; |
courseStatsVars.observadas = (Long) results[4]; |
courseStatsVars.unidades = (Long) results[5]; |
} |
return courseStatsVars; |
} |
public long countRespostas(long cursoAfetoId) |
{ |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" count(distinct r.id) AS respostas " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"JOIN a.respostaRequisitada rR " + |
"JOIN rR.resposta r " + |
"WHERE c.id = :id "); |
q.setLong("id",cursoAfetoId); |
Object result = q.uniqueResult(); |
if(result != null) |
return (Long) result; |
return 0; |
} |
public long countAlunosComRespostas(long cursoAfetoId) |
{ |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" count(distinct a.aluno.id) AS respostasAlunos " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"JOIN a.respostaRequisitada rR " + |
"JOIN rR.resposta r " + |
"WHERE c.id = :id "); |
q.setLong("id",cursoAfetoId); |
Object result = q.uniqueResult(); |
if(result != null) |
return (Long) result; |
return 0; |
} |
public long countAlunos(long cursoAfetoId) |
{ |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" count(distinct a.aluno.id) AS respostasAlunos " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"JOIN a.respostaRequisitada rR " + |
"WHERE c.id = :id "); |
q.setLong("id",cursoAfetoId); |
Object result = q.uniqueResult(); |
if(result != null) |
return (Long) result; |
return 0; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java |
---|
2,7 → 2,10 |
import org.hibernate.Criteria; |
import org.hibernate.Query; |
import org.hibernate.criterion.*; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Expression; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Projections; |
import pt.estgp.estgweb.domain.Course; |
import pt.estgp.estgweb.domain.CourseImpl; |
import pt.estgp.estgweb.domain.CourseUnit; |
67,7 → 70,24 |
.uniqueResult(); |
} |
public int countCoursesUnits(String importYear,long courseId,String semestre) |
{ |
/* return createCriteria() |
.createAlias("courseUnits", "c") |
.setProjection(Projections.property("c.id")) |
.add(eq("c.importYear", importYear)) |
.add(eq("id", courseId)) |
.list().size(); |
*/ |
return (Integer) createCriteria(CourseUnit.class) |
.setProjection(Projections.rowCount()) |
.add(eq("importYear",importYear)) |
.add(eq("semestre",semestre)) |
.add(eq("course.id",courseId)) |
.uniqueResult(); |
} |
public int countCoursesUnitsTurmas(String importYear,long courseId) |
{ |
return (Integer) createCriteria(CourseUnitTurma.class) |
170,6 → 190,33 |
.list(); |
} |
public List<Course> findAllActiveOrderByNameEvenWithoutCourseUnit() |
{ |
Criteria c = createCriteria(); |
/* c.setProjection(Projections.projectionList() |
.add(Projections.distinct(Projections.id())));*/ |
c.add(eq("status", true)); |
return c.addOrder(Order.asc("name")) |
.list(); |
} |
public List<Course> findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree) |
{ |
Criteria c = createCriteria(); |
c.add(eq("showStudiesPlan", true)); |
if (degree != null && degree.length() > 0) |
c.add(eq("degree", degree)); |
if (institutionalCode != null && institutionalCode.length() > 0) |
c.add(eq("institutionalCode", institutionalCode)); |
return c.addOrder(Order.asc("name")) |
.list(); |
} |
public List<Course> findAllActiveOrderByNameEvenWithoutCourseUnit(String importYear, String area, String type) |
{ |
Criteria c = createCriteria(); |
231,7 → 278,7 |
} |
if (institutionCode != null && institutionCode.trim().length() > 0) |
{ |
query += logic + "cu.institutionCode = :institutionCode "; |
query += logic + "c.institutionalCode = :institutionCode "; |
logic = " and "; |
} |
if (area != null && area.length() > 0) |
350,4 → 397,6 |
.add(Expression.isNotNull("area")) |
.list(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventClassDaoImpl.java |
---|
New file |
0,0 → 1,24 |
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 EventClassDaoImpl extends EventClassDao |
{ |
private EventClassDaoImpl() |
{ |
} |
public static EventClassDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventClassDaoImpl(); |
return (EventClassDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/TeacherDaoImpl.java |
---|
1,12 → 1,16 |
package pt.estgp.estgweb.domain.dao.impl; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.Query; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Projections; |
import org.hibernate.exception.GenericJDBCException; |
import org.hibernate.sql.JoinFragment; |
import pt.estgp.estgweb.domain.Teacher; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.utils.DatesUtils; |
import java.util.List; |
21,6 → 25,7 |
*/ |
public class TeacherDaoImpl extends TeacherDao |
{ |
private static final Logger logger = Logger.getLogger(TeacherDaoImpl.class); |
private TeacherDaoImpl(){} |
// protected Class getReferenceClass() { |
63,6 → 68,38 |
} |
} |
public List<Long> loadByAreaWithUnitsInLast3Years( String importYear) |
{ |
try |
{ |
String lastYear = DatesUtils.getPreviousImportYear(importYear); |
String twoYearsAgo = DatesUtils.getPreviousImportYear(lastYear); |
System.out.println(lastYear); |
System.out.println(twoYearsAgo); |
Query q = AbstractDao.getCurrentSession().createQuery( |
"select distinct t.id from " + Teacher.class.getName() + " t " + |
"join t.teachedUnits tu " + |
"where tu.importYear = :importYear or " + |
"tu.importYear = :lastYear or " + |
"tu.importYear = :twoYearsAgo " + |
"order by t.name"); |
q.setString("importYear",importYear); |
q.setString("lastYear",lastYear); |
q.setString("twoYearsAgo",twoYearsAgo); |
return q.list(); |
} |
catch(GenericJDBCException e) |
{ |
logger.error(e,e); |
throw e; |
} |
} |
public Teacher loadByBi(String bi) |
{ |
return (Teacher) createCriteria().add(eq("bi",bi)).uniqueResult(); |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseStudiesPlanDaoImpl.java |
---|
New file |
0,0 → 1,19 |
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 CourseStudiesPlanDaoImpl extends CourseStudiesPlanDao { |
public static CourseStudiesPlanDaoImpl getInstance() { |
if (myInstance == null) |
myInstance = new CourseStudiesPlanDaoImpl(); |
return (CourseStudiesPlanDaoImpl) myInstance; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventGenericDaoImpl.java |
---|
New file |
0,0 → 1,24 |
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 EventGenericDaoImpl extends EventGenericDao |
{ |
private EventGenericDaoImpl() |
{ |
} |
public static EventGenericDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventGenericDaoImpl(); |
return (EventGenericDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java |
---|
41,6 → 41,13 |
public int users; |
public List<String> emails; |
} |
public static class FindUsersIdResult |
{ |
public int users; |
public List<Long> userIds; |
} |
public FindUsersResult findUsersEmails(String year, String department, long courseId, long courseUnitId, String semestre, CreateAnnouncementService.MessageTarget target) |
{ |
FindUsersResult findUsersResult = new FindUsersResult(); |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl.java |
---|
16,16 → 16,16 |
return (QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl) myInstance; |
} |
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,String codeUnidade) |
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,Long idUnidade) |
{//pt.estgp.estgweb.domain.dao.DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().getCurrentSession().createCriteria(QuestionarioPedagogicoUnidadeCurricularAfeta.class).add(eq("cursoAfeto.id","1")).list() |
//add(eq("cuA.questionario.id", new Long(20))).add(eq("codigoUnidade","209535")).add(eq("cuA.codigoCurso","9119")) |
Query q = getCurrentSession().createQuery("select c from c in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " + |
" join c.cursoAfeto as curso " + |
"where curso.questionario.id = :questionarioId and curso.codigoCurso = :codigoCurso" + |
" and c.codigoUnidade = :codigoUnidade"); |
" and c.courseUnit.id = :idUnidade"); |
q.setLong("questionarioId", questionarioId); |
q.setString("codigoCurso", cursoCode); |
q.setString("codigoUnidade",codeUnidade); |
q.setLong("idUnidade",idUnidade); |
return q.list(); |
/*DaoFactory.getCourseDaoImpl() |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java |
---|
352,13 → 352,14 |
public CourseUnit loadBySigesCodeUniqueMostRecent(String sigesCode, String courseCode, String semestre) |
{ |
List<CourseUnit> cus = |
createCriteria() |
List<CourseUnit> cus; |
Criteria cr = createCriteria() |
.add(eq("code", sigesCode)) |
.add(eq("courseCode", courseCode)) |
.add(eq("semestre", semestre)) |
.addOrder(Order.desc("importYear")) |
.setMaxResults(1).list(); |
.add(eq("courseCode", courseCode)); |
if(semestre != null) |
cr.add(eq("semestre", semestre)); |
cr.addOrder(Order.desc("importYear")).setMaxResults(1); |
cus = cr.list(); |
if(cus.size() > 0) |
return cus.get(0); |
logger.warn("Accessing unit not existent with siges code " + sigesCode + " course code: " + courseCode + " semestre: " + semestre); |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDepartmentDaoImpl.java |
---|
New file |
0,0 → 1,41 |
package pt.estgp.estgweb.domain.dao.impl; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.CourseDepartment; |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.eq; |
/** |
* Created by jorgemachado on 15/09/16. |
*/ |
public class CourseDepartmentDaoImpl extends CourseDepartmentDao |
{ |
public static CourseDepartmentDaoImpl getInstance() { |
if (myInstance == null) |
myInstance = new CourseDepartmentDaoImpl(); |
return (CourseDepartmentDaoImpl) myInstance; |
} |
public CourseDepartment findBySigla(String sigla) |
{ |
try{ |
return (CourseDepartment) createCriteria().add(eq("sigla",sigla)).uniqueResult(); |
}catch(Exception e) |
{} |
return null; |
} |
public List<CourseDepartment> findActives() |
{ |
return createCriteria().add(eq("active", true)).addOrder(Order.asc("institutionalCode")).addOrder(Order.asc("sigla")).list(); |
} |
public List<CourseDepartment> findActives(String institutionalCode) |
{ |
return createCriteria().add(eq("active", true)).add(eq("institutionalCode",institutionalCode)).list(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserRoleConfigDaoImpl.java |
---|
7,6 → 7,7 |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.eq; |
import static org.hibernate.criterion.Restrictions.like; |
/** |
* Created by IntelliJ IDEA. |
36,4 → 37,9 |
return null; |
} |
public List<UserRoleConfig> findRolesByPrefix(String prefix){ |
List<UserRoleConfig> userRoleConfigList = createCriteria().add(like("role", prefix + "%")).list(); |
return userRoleConfigList; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java |
---|
11,6 → 11,10 |
public class DaoFactory |
{ |
private static CourseDepartmentDaoImpl courseDepartmentDaoImpl; |
private static EventClassDaoImpl eventClassDaoImpl; |
private static EventFormacoesDaoImpl eventFormacoesDaoImpl; |
public static JobDaoImpl getJobDaoImpl() |
{ |
return JobDaoImpl.getInstance(); |
415,4 → 419,25 |
return SeccaoDaoImpl.getInstance(); |
} |
public static CourseStudiesPlanDaoImpl getCourseStudiesPlanDaoImpl(){ |
return CourseStudiesPlanDaoImpl.getInstance(); |
} |
public static CourseDepartmentDaoImpl getCourseDepartmentDaoImpl() { |
return CourseDepartmentDaoImpl.getInstance(); |
} |
public static EventClassDaoImpl getEventClassDaoImpl() |
{ |
return EventClassDaoImpl.getInstance(); |
} |
public static EventFormacoesDaoImpl getEventFormacoesDaoImpl() |
{ |
return EventFormacoesDaoImpl.getInstance(); |
} |
public static EventGenericDaoImpl getEventGenericDaoImpl() |
{ |
return EventGenericDaoImpl.getInstance(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventGenericRecordImpl.java |
---|
New file |
0,0 → 1,29 |
package pt.estgp.estgweb.domain; |
import java.io.Serializable; |
import java.util.List; |
/** |
* Created by jorgemachado on 05/09/16. |
*/ |
public class EventGenericRecordImpl extends EventGenericRecord { |
@Override |
public GenericUser getOwner() { |
return null; |
} |
@Override |
public List<String> getOwnerRoles() { |
return null; |
} |
@Override |
public String getChoosedOwnerRole() { |
return null; |
} |
@Override |
public Serializable getSerializable() { |
return null; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserSessionImpl.java |
---|
308,4 → 308,11 |
return getUser() == null; |
} |
public String getShortName() |
{ |
if(getName() != null) |
return getName().split(" ")[0]; |
return getName(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseDepartmentImpl.java |
---|
New file |
0,0 → 1,20 |
package pt.estgp.estgweb.domain; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import java.io.Serializable; |
/** |
* Created by jorgemachado on 14/09/16. |
*/ |
public class CourseDepartmentImpl extends CourseDepartment { |
@Override |
public Serializable getSerializable() { |
return getSigla(); |
} |
public String getSchoolFromInstitutionalCode() |
{ |
return ConfigProperties.getProperty("institution.code.prefix." + getInstitutionalCode()); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoCursoAfetoImpl.java |
---|
22,4 → 22,13 |
{ |
setMarcadas(getMarcadas()+1); |
} |
public void resetAnswerStats() { |
setStatTipologiasRequisitadas(0); |
setStatRespostasRequisitadas(0); |
} |
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);} |
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java |
---|
50,6 → 50,18 |
return false; |
} |
public boolean hasRolePrefix(String r) |
{ |
if (r == null || getRoles() == null || getRoles().length() == 0) |
return false; |
for (String role : RoleManager.getRolesFromSerial(getRoles())) |
{ |
if (role.startsWith(r)) |
return true; |
} |
return false; |
} |
public boolean hasRole(List<String> roles) |
{ |
return RoleManager.hasRole(this,roles); |
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/EventManager.java |
---|
New file |
0,0 → 1,61 |
package pt.estgp.estgweb.filters.filters; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.AdminControlFilter; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.RoleManager; |
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; |
public class EventManager extends AdminControlFilter { |
private static final Logger logger = Logger.getLogger(EventManager.class); |
private static final String ALL_ROLE = ConfigProperties.getProperty("user.super"); |
public void execute(ServiceRequest request, ServiceResponse response) |
throws FilterException, Exception |
{ |
} |
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().isSuperuserOrAdmin()) |
return; |
String eventClassIdParameter = (String) filterParameters.getParameter(0); |
EventGeneric eventParameter = (EventGeneric) filterParameters.getParameter(1); |
if(eventParameter.getId() > 0) |
{ |
EventGeneric persistent = DaoFactory.getEventGenericDaoImpl().load(eventParameter.getId()); |
if(RoleManager.hasRole(userSession.getUser(), persistent.getEventClass().getManagersRole())) |
return; |
} |
else |
{ |
EventClass eventClass = DaoFactory.getEventClassDaoImpl().load(eventClassIdParameter); |
if(RoleManager.hasRole(userSession.getUser(), eventClass.getManagersRole())) |
return; |
} |
throw new AccessDeniedOperationException("fail.role"); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/HasRolePrefixTag.java |
---|
New file |
0,0 → 1,90 |
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.JspException; |
import javax.servlet.jsp.JspWriter; |
import javax.servlet.jsp.tagext.BodyTagSupport; |
public class HasRolePrefixTag extends BodyTagSupport |
{ |
private static final Logger logger = Logger.getLogger(HasRolePrefixTag.class); |
private String role; |
private String rolePrefix; |
public String getRolePrefix() { |
return rolePrefix; |
} |
public void setRolePrefix(String rolePrefix) { |
this.rolePrefix = rolePrefix; |
} |
public String getRole() |
{ |
return role; |
} |
public void setRole(String role) |
{ |
this.role = role; |
} |
public int doStartTag() throws JspException |
{ |
if(go()) |
return EVAL_BODY_TAG; |
else |
return SKIP_BODY; |
} |
public boolean go() |
{ |
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY); |
if(userSession != null && userSession.getUser() != null) |
{ |
String[] roles = role.split(","); |
String[] rolesPrefix = rolePrefix.split(","); |
for(String role: roles) |
{ |
if(userSession.getUser().hasRole(role)) |
return true; |
} |
for(String role: rolesPrefix) |
{ |
if(userSession.getUser().hasRolePrefix(role)) |
return true; |
} |
} |
return false; |
} |
public int doEndTag() throws JspException |
{ |
if (go()) |
{ |
String toPage = bodyContent.getString().trim(); |
JspWriter writer = pageContext.getOut(); |
try |
{ |
writer.write(toPage); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw new JspException(e); |
} |
} |
// Continue processing this page |
return EVAL_PAGE; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/IsNotAuthenticatedTag.java |
---|
1,53 → 1,18 |
package pt.estgp.estgweb.web.tags; |
import org.apache.log4j.Logger; |
import org.apache.struts.taglib.logic.ConditionalTagBase; |
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 pt.estgp.estgweb.domain.UserSessionImpl; |
import pt.estgp.estgweb.Globals; |
public class IsNotAuthenticatedTag extends BodyTagSupport |
public class IsNotAuthenticatedTag extends ConditionalTagBase |
{ |
private static final Logger logger = Logger.getLogger(IsNotAuthenticatedTag.class); |
public int doStartTag() throws JspException |
{ |
if (go()) |
return EVAL_BODY_TAG; |
else |
return SKIP_BODY; |
} |
public boolean go() |
{ |
protected boolean condition() throws JspException { |
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY); |
return userSession == null || userSession.getUser() == null; |
return !(userSession != null && userSession.getUser() != null); |
} |
public int doEndTag() throws JspException |
{ |
if (go()) |
{ |
String toPage = bodyContent.getString().trim(); |
JspWriter writer = pageContext.getOut(); |
try |
{ |
writer.write(toPage); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw new JspException(e); |
} |
} |
// Continue processing this page |
return EVAL_PAGE; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/IsAuthenticatedTag.java |
---|
1,53 → 1,22 |
package pt.estgp.estgweb.web.tags; |
import org.apache.log4j.Logger; |
import org.apache.struts.taglib.logic.ConditionalTagBase; |
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 pt.estgp.estgweb.domain.UserSessionImpl; |
import pt.estgp.estgweb.domain.UserImpl; |
import pt.estgp.estgweb.Globals; |
public class IsAuthenticatedTag extends BodyTagSupport |
public class IsAuthenticatedTag extends ConditionalTagBase |
{ |
private static final Logger logger = Logger.getLogger(IsAuthenticatedTag.class); |
public int doStartTag() throws JspException |
{ |
if (go()) |
return EVAL_BODY_TAG; |
else |
return SKIP_BODY; |
} |
public boolean go() |
{ |
@Override |
protected boolean condition() throws JspException { |
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY); |
return userSession != null && userSession.getUser() != null; |
} |
public int doEndTag() throws JspException |
{ |
if (go()) |
{ |
String toPage = bodyContent.getString().trim(); |
JspWriter writer = pageContext.getOut(); |
try |
{ |
writer.write(toPage); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw new JspException(e); |
} |
} |
// Continue processing this page |
return EVAL_PAGE; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/WebProxy.java |
---|
1,11 → 1,9 |
package pt.estgp.estgweb.web; |
import jomm.utils.StreamsUtils; |
import org.apache.commons.httpclient.URIException; |
import org.apache.commons.httpclient.util.URIUtil; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.StringsUtils; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServlet; |
18,9 → 16,11 |
import java.io.OutputStream; |
import java.net.*; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.Map; |
import java.util.zip.GZIPInputStream; |
import java.util.zip.InflaterInputStream; |
import java.util.zip.ZipInputStream; |
import java.util.zip.InflaterInputStream; |
import java.util.zip.GZIPInputStream; |
/** |
* @author Jorge Machado |
197,8 → 197,24 |
String pathFinal = path.indexOf("?") >=0 ? URIUtil.encodePath(path.substring(0,path.indexOf("?")), "ISO-8859-1") + "?" +path.substring(path.indexOf("?")+1) : path; |
System.out.println(pathFinal); |
} |
static Map<String,Boolean> urlOKCACHE = new HashMap<String, Boolean>(); |
static Map<String,Integer> urlOKCACHE_LAST_CHECK_COUNT = new HashMap<String, Integer>(); |
public static boolean checkExist( String server, String path) |
{ |
String serverPathKey = server + "$" + path; |
Boolean urlOk = urlOKCACHE.get(serverPathKey); |
if(urlOk != null) |
{ |
int count = urlOKCACHE_LAST_CHECK_COUNT.get(serverPathKey); |
if(count > 0) |
{ |
count = count-1; |
urlOKCACHE_LAST_CHECK_COUNT.put(serverPathKey,count); |
return urlOk; |
} |
} |
String serverUrl = ConfigProperties.getProperty("server." + server); |
String serverEncoding = ConfigProperties.getProperty(server + ".encoding"); |
210,19 → 226,27 |
try |
{ |
String pathFinal = path.indexOf("?") >=0 ? URIUtil.encodePath(path.substring(0,path.indexOf("?")), "ISO-8859-1") + path.substring(path.indexOf("?")) : path; |
System.out.println("Getting: " + serverUrl + pathFinal); |
URL url = new URL(serverUrl + pathFinal); |
String pathFinal = path.indexOf("?") >= 0 ? URIUtil.encodePath(path.substring(0,path.indexOf("?")), "ISO-8859-1") + path.substring(path.indexOf("?")) : path; |
URLConnection con = url.openConnection(); |
InputStream stream = con.getInputStream(); |
String out = StreamsUtils.readString(stream); |
stream.close(); |
System.out.println("Getting: " + serverUrl + pathFinal + " CHECK TIME"); |
URL url = new URL(serverUrl + pathFinal); |
HttpURLConnection huc = (HttpURLConnection) url.openConnection(); |
huc.setRequestMethod("HEAD"); |
urlOKCACHE_LAST_CHECK_COUNT.put(serverPathKey,10); |
if(huc.getResponseCode() == HttpURLConnection.HTTP_OK) |
{ |
urlOKCACHE.put(serverPathKey,true); |
huc.disconnect(); |
return true; |
} |
else |
{ |
urlOKCACHE.put(serverPathKey,false); |
huc.disconnect(); |
return false; |
} |
if(out.trim().length() == 0) |
return false; |
return true; |
} |
catch (FileNotFoundException e) |
{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/utils/GoogleRecaptcha.java |
---|
New file |
0,0 → 1,48 |
package pt.estgp.estgweb.web.utils; |
import jomm.utils.StreamsUtils; |
import org.apache.log4j.Logger; |
import org.json.JSONException; |
import org.json.JSONObject; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import java.io.IOException; |
import java.io.InputStream; |
import java.net.MalformedURLException; |
import java.net.URL; |
/** |
* Created by jorgemachado on 10/10/16. |
*/ |
public class GoogleRecaptcha |
{ |
private static String secretCaptcha = ConfigProperties.getProperty("google.recaptcha.secret.key"); |
private static String address = ConfigProperties.getProperty("google.recaptcha.address"); |
private static String paramSecret = ConfigProperties.getProperty("google.recaptcha.secret.param.name"); |
private static String paramResponse = ConfigProperties.getProperty("google.recaptcha.response.param.name"); |
private static final Logger logger = Logger.getLogger(GoogleRecaptcha.class); |
public static boolean validateCaptcha(String responseUser) |
{ |
try { |
URL url = new URL(address + "?" + paramSecret + "=" + secretCaptcha + "&" + paramResponse + "=" + responseUser); |
InputStream stream = url.openStream(); |
String responseGoogle = StreamsUtils.readString(stream); |
JSONObject response = new JSONObject(responseGoogle); |
stream.close(); |
if(response.getString("success").equals("true")) |
return true; |
} catch (MalformedURLException e) { |
logger.error(e,e); |
} catch (IOException e) { |
logger.error(e,e); |
} catch (JSONException e) { |
logger.error(e, e); |
} |
return false; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/utils/TestHttpServletRequest.java |
---|
20,8 → 20,11 |
*/ |
public class TestHttpServletRequest implements HttpServletRequest |
{ |
Cookie[] cookies = new Cookie[1]; |
public TestHttpServletRequest(String requester) |
{ |
cookies[0] = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE,requester); |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseForm.java |
---|
33,11 → 33,14 |
private List<String> areas = Globals.DEPARTAMENTOS; |
public CourseForm() |
{ |
courseView = new CourseView(); |
} |
public String getForUser() { |
return forUser; |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseStudiesPlansAdminForm.java |
---|
New file |
0,0 → 1,96 |
package pt.estgp.estgweb.web.form.courses; |
import pt.estgp.estgweb.domain.CourseStudiesPlanImpl; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.services.courses.xsd.Curso; |
import pt.estgp.estgweb.services.courses.xsd.CursoImpl; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class CourseStudiesPlansAdminForm extends ApplicationForm |
{ |
//Wrapper do Plano de estudos em edicao com versao e descricao de versao |
private CourseStudiesPlanImpl courseStudiesPlan = DomainObjectFactory.createCourseStudiesPlanImpl(); |
//Plano de Estudos deserializado de XML para classe correspondente ao xsd em src/planoestudos.xsd |
private Curso planoEstudos = new CursoImpl(); |
//curso em edição |
private long courseId = 0; |
//flag para indicar se o plano em edição é o ultimo plano criado |
private boolean versaoVigor = false; |
private String semestreId; |
private String perfilId; |
private long sourcePlanId; |
public CourseStudiesPlansAdminForm() |
{ |
} |
public long getSourcePlanId() { |
return sourcePlanId; |
} |
public void setSourcePlanId(long sourcePlanId) { |
this.sourcePlanId = sourcePlanId; |
} |
public String getSemestreId() { |
return semestreId; |
} |
public void setSemestreId(String semestreId) { |
this.semestreId = semestreId; |
} |
public String getPerfilId() { |
return perfilId; |
} |
public void setPerfilId(String perfilId) { |
this.perfilId = perfilId; |
} |
public CourseStudiesPlanImpl getCourseStudiesPlan() { |
return courseStudiesPlan; |
} |
public void setCourseStudiesPlan(CourseStudiesPlanImpl courseStudiesPlan) { |
this.courseStudiesPlan = courseStudiesPlan; |
} |
public long getCourseId() { |
return courseId; |
} |
public void setCourseId(long courseId) { |
this.courseId = courseId; |
} |
public boolean isVersaoVigor() { |
return versaoVigor; |
} |
public void setVersaoVigor(boolean versaoVigor) { |
this.versaoVigor = versaoVigor; |
} |
public Curso getPlanoEstudos() { |
return planoEstudos; |
} |
public void setPlanoEstudos(Curso planoEstudos) { |
this.planoEstudos = planoEstudos; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/courseunits/CourseUnitEvaluationForm.java |
---|
74,7 → 74,8 |
+courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprovEspecial(); |
if(!totalAprovadosCorrecto) |
addMessage(errors,request,"error.evaluation.report.total.aprovados.epocas.wrong"); |
if(courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1013() +courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1416() + courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1720() != 100 ) |
if(courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprovTotal().intValue() != 0 && |
courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1013() +courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1416() + courseUnitEvaluationView.getCourseUnitEvaluation().getNumAlunosAprov1720() != 100 ) |
addMessage(errors,request,"error.evaluation.report.total.aprovados.grades"); |
try{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventGenericForm.java |
---|
New file |
0,0 → 1,15 |
package pt.estgp.estgweb.web.form.events; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
/** |
* Created by jorgemachado on 07/10/16. |
*/ |
public class MyEventGenericForm extends MyEventForm |
{ |
public MyEventGenericForm() |
{ |
event = DomainObjectFactory.createEventGenericImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventFormacoesForm.java |
---|
New file |
0,0 → 1,22 |
package pt.estgp.estgweb.web.form.events; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventFormacoes; |
/** |
* Created by jorgemachado on 07/10/16. |
*/ |
public class MyEventFormacoesForm extends MyEventForm |
{ |
@Override |
public EventFormacoes getEvent() { |
return (EventFormacoes) super.getEvent(); |
} |
public MyEventFormacoesForm() |
{ |
super(); |
event = DomainObjectFactory.createEventFormacoesImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/EventClassForm.java |
---|
New file |
0,0 → 1,65 |
package pt.estgp.estgweb.web.form.events; |
import org.apache.struts.action.ActionErrors; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class EventClassForm extends ApplicationForm |
{ |
private long eventId; |
private EventClass eventClass; |
public EventClassForm() |
{ |
eventClass = DomainObjectFactory.createEventClass(); |
} |
public long getEventId() { |
return eventId; |
} |
public void setEventId(long eventId) { |
this.eventId = eventId; |
} |
public EventClass getEventClass() { |
return eventClass; |
} |
public void setEventClass(EventClass eventClass) { |
this.eventClass = eventClass; |
} |
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest) |
{ |
ActionErrors errors = new ActionErrors(); |
if(eventClass.getName() == null || eventClass.getName().length() == 0) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.name"); |
} |
if(eventClass.getManagersRole() == null || eventClass.getManagersRole().length() == 0) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.managerRole"); |
} |
if(!eventClass.isEventosFormacoes() && !eventClass.isEventosGenericos() ) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.permited.types"); |
} |
return errors; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventForm.java |
---|
New file |
0,0 → 1,97 |
package pt.estgp.estgweb.web.form.events; |
import org.apache.struts.upload.FormFile; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class MyEventForm extends ApplicationForm |
{ |
private long eventClassId; |
private long eventId; |
protected EventGeneric event; |
private FormFile flyerFile; |
private String dataAberturaFormulario; |
private String dataFechoFormulario; |
private String dataPublicacao; |
private String dataInicio; |
public MyEventForm() |
{ |
event = DomainObjectFactory.createEventFormacoesImpl(); |
} |
public long getEventClassId() { |
return eventClassId; |
} |
public void setEventClassId(long eventClassId) { |
this.eventClassId = eventClassId; |
} |
public long getEventId() { |
return eventId; |
} |
public void setEventId(long eventId) { |
this.eventId = eventId; |
} |
public EventGeneric getEvent() { |
return event; |
} |
public void setEvent(EventGeneric event) { |
this.event = event; |
} |
public FormFile getFlyerFile() { |
return flyerFile; |
} |
public void setFlyerFile(FormFile flyerFile) { |
this.flyerFile = flyerFile; |
} |
public String getDataAberturaFormulario() { |
return dataAberturaFormulario; |
} |
public void setDataAberturaFormulario(String dataAberturaFormulario) { |
this.dataAberturaFormulario = dataAberturaFormulario; |
} |
public String getDataFechoFormulario() { |
return dataFechoFormulario; |
} |
public void setDataFechoFormulario(String dataFechoFormulario) { |
this.dataFechoFormulario = dataFechoFormulario; |
} |
public String getDataPublicacao() { |
return dataPublicacao; |
} |
public void setDataPublicacao(String dataPublicacao) { |
this.dataPublicacao = dataPublicacao; |
} |
public String getDataInicio() { |
return dataInicio; |
} |
public void setDataInicio(String dataInicio) { |
this.dataInicio = dataInicio; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioMessage.java |
---|
New file |
0,0 → 1,118 |
package pt.estgp.estgweb.web.form.questionarios; |
import org.apache.struts.action.ActionErrors; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
import javax.servlet.http.HttpServletRequest; |
public class QuestionarioMessage extends ApplicationForm |
{ |
boolean onlyNotAnswered = false; |
String message; |
private long cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId; |
String fromEmail; |
String fromPerson; |
String subject; |
String formDescription; |
String dispatch; |
long questionarioId; |
public long getQuestionarioId() { |
return questionarioId; |
} |
public void setQuestionarioId(long questionarioId) { |
this.questionarioId = questionarioId; |
} |
public String getDispatch() { |
return dispatch; |
} |
public void setDispatch(String dispatch) { |
this.dispatch = dispatch; |
} |
public String getFormDescription() { |
return formDescription; |
} |
public void setFormDescription(String formDescription) { |
this.formDescription = formDescription; |
} |
public String getSubject() { |
return subject; |
} |
public void setSubject(String subject) { |
this.subject = subject; |
} |
public boolean isOnlyNotAnswered() { |
return onlyNotAnswered; |
} |
public void setOnlyNotAnswered(boolean onlyNotAnswered) { |
this.onlyNotAnswered = onlyNotAnswered; |
} |
public String getFromEmail() { |
return fromEmail; |
} |
public void setFromEmail(String fromEmail) { |
this.fromEmail = fromEmail; |
} |
public String getFromPerson() { |
return fromPerson; |
} |
public void setFromPerson(String fromPerson) { |
this.fromPerson = fromPerson; |
} |
public String getMessage() { |
return message; |
} |
public void setMessage(String message) { |
this.message = message; |
} |
public long getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId() { |
return cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId; |
} |
public void setCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(long cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId) { |
this.cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId = cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId; |
} |
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) |
{ |
ActionErrors errors = new ActionErrors(); |
if(getSubject() == null || getSubject().trim().length() == 0) |
{ |
addMessageWithKeys(errors,request,"errors.required","questionario.email.subject"); |
} |
if(getFromEmail() == null || getFromEmail().trim().length() == 0) |
{ |
addMessageWithKeys(errors,request,"errors.required","questionario.email.from.email"); |
} |
if(getFromPerson() == null || getFromPerson().trim().length() == 0) |
{ |
addMessageWithKeys(errors,request,"errors.required","questionario.email.from.person"); |
} |
if(getMessage() == null || getMessage().trim().length() == 0) |
{ |
addMessageWithKeys(errors,request,"errors.required","questionario.email.message"); |
} |
return errors; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioRespostaForm.java |
---|
New file |
0,0 → 1,71 |
package pt.estgp.estgweb.web.form.questionarios; |
import org.apache.struts.action.ActionErrors; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.QuestionarioResposta; |
import pt.estgp.estgweb.domain.QuestionarioRespostaImpl; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
import javax.servlet.http.HttpServletRequest; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 05/06/16. |
*/ |
public class QuestionarioRespostaForm extends ApplicationForm |
{ |
QuestionarioRespostaImpl resposta = DomainObjectFactory.createQuestionarioRespostaImpl(); |
public QuestionarioRespostaForm() { |
resposta.setQuestionario(DomainObjectFactory.createQuestionarioImpl()); |
} |
long alunoRequesitadoId; |
public long getAlunoRequesitadoId() { |
return alunoRequesitadoId; |
} |
public void setAlunoRequesitadoId(long alunoRequesitadoId) { |
this.alunoRequesitadoId = alunoRequesitadoId; |
} |
public QuestionarioRespostaImpl getResposta() { |
return resposta; |
} |
public void setResposta(QuestionarioRespostaImpl resposta) { |
this.resposta = resposta; |
} |
@Override |
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { |
ActionErrors errors = new ActionErrors(); |
List<String> respostasVazias = new ArrayList<String>(); |
for(int i = 1; i <= 17; i++) |
{ |
try { |
String r = (String) QuestionarioResposta.class.getMethod("getR"+i).invoke(resposta); |
if(r == null || r.trim().length() == 0) |
{ |
if(respostasVazias.size() == 0) |
addMessage(errors, request, "questionario.respostas.grupos.1.2.3"); |
respostasVazias.add("" + i); |
} |
} |
catch (Throwable e) |
{ |
System.err.println("Erro nao esperado metodo getR" + i + " nao existe na resposta"); |
e.printStackTrace(); |
} |
} |
if(respostasVazias.size() > 0) |
request.setAttribute("respostasVazias",respostasVazias); |
return errors; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java |
---|
4,14 → 4,21 |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.CourseStudiesPlanImpl; |
import pt.estgp.estgweb.domain.views.CourseView; |
import pt.estgp.estgweb.filters.exceptions.NotFoundException; |
import pt.estgp.estgweb.services.courses.CoursesService; |
import pt.estgp.estgweb.services.courses.xsd.Curso; |
import pt.estgp.estgweb.services.courses.xsd.PerfilImpl; |
import pt.estgp.estgweb.services.courses.xsd.SemestreImpl; |
import pt.estgp.estgweb.services.courses.xsd.UnidadeImpl; |
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses; |
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController; |
import pt.estgp.estgweb.web.exceptions.NoCookiesException; |
import pt.estgp.estgweb.web.form.courses.CourseForm; |
import pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException; |
25,6 → 32,7 |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.util.Iterator; |
/** |
* @author Jorge Machado |
51,10 → 59,21 |
cF.setCourseView(cV); |
return mapping.findForward("submit"); |
} |
private void loadOnlyCourseAndPlans(CourseForm cF, HttpServletRequest request, HttpServletResponse response) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
load(cF,request,response,false,true); |
} |
private void load(CourseForm cF, HttpServletRequest request, HttpServletResponse response) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
load(cF,request,response,true,true); |
} |
private void load(CourseForm cF, HttpServletRequest request, HttpServletResponse response,boolean loadUnits,boolean loadStudiesPlans) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
String code = cF.getCourseView().getCode(); |
long id = cF.getCourseView().getId(); |
64,17 → 83,49 |
String serviceName; |
if(code != null) |
{ |
args = new Object[]{code,true}; |
args = new Object[]{code,loadUnits}; |
if(loadStudiesPlans) |
serviceName = "LoadCourseByCodeAndStudiesPlans"; |
else |
serviceName = "LoadCourseByCode"; |
} |
else |
{ |
args = new Object[]{id,loadUnits}; |
if(loadStudiesPlans) |
serviceName = "LoadCourseAndStudiesPlans"; |
else |
serviceName = "LoadCourse"; |
} |
CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), serviceName, args, names); |
request.setAttribute("CourseView",cV); |
cF.setCourseView(cV); |
} |
private void loadForPublic(CourseForm cF, HttpServletRequest request, HttpServletResponse response) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
load(cF,request,response,false,false); |
/* String code = cF.getCourseView().getCode(); |
long id = cF.getCourseView().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"serializable"}; |
Object[] args; |
String serviceName; |
if(code != null) |
{ |
args = new Object[]{code,false}; |
serviceName = "LoadCourseByCode"; |
} |
else |
{ |
args = new Object[]{id,true}; |
args = new Object[]{id,false}; |
serviceName = "LoadCourse"; |
} |
CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), serviceName, args, names); |
request.setAttribute("CourseView",cV); |
cF.setCourseView(cV); |
cF.setCourseView(cV);*/ |
} |
public ActionForward loadPlan(ActionMapping mapping, |
138,7 → 189,7 |
{ |
try |
{ |
load((CourseForm) form,request,response); |
loadForPublic((CourseForm) form,request,response); |
return mapping.findForward("loadSeparators"); |
} |
catch (FilterChainFailedException e) |
210,6 → 261,32 |
} |
} |
public ActionForward editAdmin(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
loadOnlyCourseAndPlans((CourseForm) form, request, response); |
return mapping.findForward("submit"); |
} |
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 submit(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
273,6 → 350,8 |
} |
public ActionForward loadCoursesPrograms(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
382,4 → 461,410 |
return mapping.findForward("error500"); |
} |
} |
/** |
* StudiesPlans Controller Functions |
* @param mapping |
* @param form |
* @param request |
* @param response |
* @return |
* @throws ServletException |
*/ |
public ActionForward addNewVersion(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
long courseId = frm.getCourseId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{courseId,frm.getCourseStudiesPlan()}; |
sm.execute(RequestUtils.getRequester(request, response), "AddNewStudiesPlan", args, names); |
addMessage(request, "course.studies.plan.added"); |
return mapping.findForward("loadstudyplans"); |
} |
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 savePlano(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
long courseId = frm.getCourseId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{courseId,frm.getCourseStudiesPlan().getId(),frm.getPlanoEstudos(),frm.getCourseStudiesPlan()}; |
sm.execute(RequestUtils.getRequester(request, response), "SavePlanoEstudos", args, names); |
addMessage(request, "course.studies.plan.saved"); |
request.setAttribute("courseId",courseId); |
return mapping.findForward("adminStudyPlans"); |
} |
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 addUnidadePerfil(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String perfilId = frm.getPerfilId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()){ |
for(Curso.Semestre.Perfil perfil: semestre.getPerfil()) |
{ |
if(perfil.getPerfilId().equals(perfilId)) |
{ |
perfil.getUnidade().add(new UnidadeImpl()); |
break; |
} |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward removePerfil(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String perfilId = frm.getPerfilId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()){ |
Iterator<Curso.Semestre.Perfil> iterPerfil = semestre.getPerfil().iterator(); |
while(iterPerfil.hasNext()) |
{ |
Curso.Semestre.Perfil perfil = iterPerfil.next(); |
if(perfil.getPerfilId().equals(perfilId)) |
{ |
iterPerfil.remove(); |
break; |
} |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward addUnidadeSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String semestreId = frm.getSemestreId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()) |
{ |
if(semestre.getSemestreId().equals(semestreId)) |
{ |
semestre.getUnidade().add(new UnidadeImpl()); |
break; |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward removeSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String semestreId = frm.getSemestreId(); |
Iterator<Curso.Semestre> iteSem = frm.getPlanoEstudos().getSemestre().iterator(); |
while(iteSem.hasNext()) |
{ |
Curso.Semestre semestre = iteSem.next(); |
if(semestre.getSemestreId().equals(semestreId)) |
{ |
iteSem.remove(); |
break; |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward addNewSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
frm.getPlanoEstudos().getSemestre().add(new SemestreImpl()); |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward addPerfilSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String semestreId = frm.getSemestreId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()) |
{ |
if(semestre.getSemestreId().equals(semestreId)) |
{ |
semestre.getPerfil().add(new PerfilImpl()); |
break; |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward sendUpSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String semestreId = frm.getSemestreId(); |
for(int i = 0; i < frm.getPlanoEstudos().getSemestre().size();i++) |
{ |
Curso.Semestre semestre = frm.getPlanoEstudos().getSemestre().get(i); |
if(semestre.getSemestreId().equals(semestreId)) |
{ |
int nextPos = i-1; |
frm.getPlanoEstudos().getSemestre().remove(i); |
if(nextPos < 0) |
nextPos = 0; |
frm.getPlanoEstudos().getSemestre().add(nextPos,semestre); |
break; |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward sendDownSemestre(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String semestreId = frm.getSemestreId(); |
for(int i = 0; i < frm.getPlanoEstudos().getSemestre().size();i++) |
{ |
Curso.Semestre semestre = frm.getPlanoEstudos().getSemestre().get(i); |
if(semestre.getSemestreId().equals(semestreId)) |
{ |
int nextPos = i+1; |
frm.getPlanoEstudos().getSemestre().remove(i); |
if(nextPos >= frm.getPlanoEstudos().getSemestre().size()) |
frm.getPlanoEstudos().getSemestre().add(semestre); |
else |
frm.getPlanoEstudos().getSemestre().add(nextPos,semestre); |
break; |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward sendUpPerfil(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String perfilId = frm.getPerfilId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()) |
{ |
for(int i = 0; i < semestre.getPerfil().size();i++) |
{ |
Curso.Semestre.Perfil perfil = semestre.getPerfil().get(i); |
if(perfil.getPerfilId().equals(perfilId)) |
{ |
int nextPos = i-1; |
semestre.getPerfil().remove(i); |
if(nextPos < 0) |
nextPos = 0; |
semestre.getPerfil().add(nextPos,perfil); |
break; |
} |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward sendDownPerfil(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
String perfilId = frm.getPerfilId(); |
for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()) |
{ |
for(int i = 0; i < semestre.getPerfil().size();i++) |
{ |
Curso.Semestre.Perfil perfil = semestre.getPerfil().get(i); |
if(perfil.getPerfilId().equals(perfilId)) |
{ |
int nextPos = i+1; |
semestre.getPerfil().remove(i); |
if(nextPos >= semestre.getPerfil().size()) |
semestre.getPerfil().add(perfil); |
else |
semestre.getPerfil().add(nextPos,perfil); |
break; |
} |
} |
} |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward clonarPlano(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form; |
long planId = frm.getCourseStudiesPlan().getId(); |
long sourcePlanId = frm.getSourcePlanId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sourcePlanId,planId,frm.getCourseId()}; |
CourseStudiesPlanImpl novoPlano = (CourseStudiesPlanImpl) sm.execute(RequestUtils.getRequester(request, response), "CloneStudiesPlanVersionFrom", args, names); |
frm.setCourseStudiesPlan(novoPlano); |
frm.setPlanoEstudos(new CoursesService().loadCursoPlanoFromXml(novoPlano.getXml())); |
addMessage(request, "course.studies.plan.cloned"); |
return mapping.findForward("editStudyPlan"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/events/EventsController.java |
---|
New file |
0,0 → 1,116 |
package pt.estgp.estgweb.web.controllers.events; |
import org.apache.log4j.Logger; |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.EventFormacoes; |
import pt.estgp.estgweb.filters.exceptions.NotFoundException; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.form.events.EventClassForm; |
import pt.estgp.estgweb.web.form.events.MyEventForm; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
/** |
* @author Jorge Machado |
* @date 26/Fev/2008 |
* @time 18:01:54 |
* @see pt.estgp.estgweb.web |
*/ |
public class EventsController extends ApplicationDispatchController |
{ |
private static final Logger logger = Logger.getLogger(EventsController.class); |
public ActionForward saveClassAjax(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
try{ |
EventClassForm frm = (EventClassForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {frm.getEventClass()}; |
sm.execute(RequestUtils.getRequester(request, response),"EventsSaveClass",args,names); |
System.out.println(frm.getEventClass().getName()); |
return mapping.findForward("jsonOk"); |
} |
catch (FilterChainFailedException e) |
{ |
addError(request, "error.401.authenticated"); |
return mapping.findForward("jsonErrors"); |
} |
catch (NotFoundException e) |
{ |
addError(request,"error.404.explain"); |
return mapping.findForward("jsonErrors"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "error.500"); |
return mapping.findForward("jsonErrors"); |
} |
} |
public ActionForward saveEvent(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
try{ |
MyEventForm frm = (MyEventForm) form; |
frm.getEvent().setDataAberturaFormulario(DatesUtils.getDateFromString(frm.getDataAberturaFormulario())); |
frm.getEvent().setDataFechoFormulario(DatesUtils.getDateFromString(frm.getDataFechoFormulario())); |
frm.getEvent().setDataPublicacao(DatesUtils.getDateFromString(frm.getDataPublicacao())); |
frm.getEvent().setDataInicio(DatesUtils.getDateFromString(frm.getDataInicio())); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"eventClassId","event","flyer"}; |
Object[] args = {frm.getEventClassId(), frm.getEvent(),frm.getFlyerFile()}; |
sm.execute(RequestUtils.getRequester(request, response),"EventsSaveEvent",args,names); |
addMessageAsString(request, "Evento " + frm.getEvent().getTitle() + ": Adicionado com Sucesso"); |
if(frm.getEvent() instanceof EventFormacoes) |
addMessageAsString(request,"Para adicionar professores volte a entrar no formulário"); |
return mapping.findForward("ok"); |
} |
catch (FilterChainFailedException e) |
{ |
addError(request, "error.401.authenticated"); |
return mapping.findForward("errors"); |
} |
catch (NotFoundException e) |
{ |
addError(request,"error.404.explain"); |
return mapping.findForward("errors"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "error.500"); |
return mapping.findForward("errors"); |
} |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioYearSemestreController.java |
---|
3,6 → 3,7 |
import org.apache.struts.action.*; |
import pt.estgp.estgweb.domain.QuestionarioImpl; |
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm; |
import pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
52,4 → 53,25 |
} |
return mapping.findForward("admin"); |
} |
public ActionForward submitResposta(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioRespostaForm frm = (QuestionarioRespostaForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"resposta","alunoRequisitadoId"}; |
Object[] args = {frm.getResposta(),frm.getAlunoRequesitadoId()}; |
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSalvarResposta",args,names); |
addMessage(request,"questionario.resposta.com.sucesso"); |
return mapping.findForward("success"); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioController.java |
---|
11,6 → 11,7 |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm; |
import pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
141,5 → 142,222 |
} |
public ActionForward putInAssignedAnwsers(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioForm frm = (QuestionarioForm) form; |
long questionarioId; |
if(request.getParameter("questionarioId")!=null) |
questionarioId = Long.parseLong(request.getParameter("questionarioId")); |
else |
questionarioId = frm.getQuestionario().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"questionarioId"}; |
Object[] args = {questionarioId}; |
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioPutAssignedAnswers",args,names); |
frm.setQuestionario(affected); |
return mapping.findForward("admin"); |
} |
public ActionForward revertAssignationDetails(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioForm frm = (QuestionarioForm) form; |
long questionarioId; |
if(request.getParameter("questionarioId")!=null) |
questionarioId = Long.parseLong(request.getParameter("questionarioId")); |
else |
questionarioId = frm.getQuestionario().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"questionarioId"}; |
Object[] args = {questionarioId}; |
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioRevertAssignationDetails",args,names); |
frm.setQuestionario(affected); |
return mapping.findForward("admin"); |
} |
public ActionForward stopProcessement(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioForm frm = (QuestionarioForm) form; |
long questionarioId; |
if(request.getParameter("questionarioId")!=null) |
questionarioId = Long.parseLong(request.getParameter("questionarioId")); |
else |
questionarioId = frm.getQuestionario().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"questionarioId"}; |
Object[] args = {questionarioId}; |
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStopProcessement",args,names); |
frm.setQuestionario(affected); |
return mapping.findForward("admin"); |
} |
public ActionForward startProcessement(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioForm frm = (QuestionarioForm) form; |
long questionarioId; |
if(request.getParameter("questionarioId")!=null) |
questionarioId = Long.parseLong(request.getParameter("questionarioId")); |
else |
questionarioId = frm.getQuestionario().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"questionarioId"}; |
Object[] args = {questionarioId}; |
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStartProcessement",args,names); |
frm.setQuestionario(affected); |
return mapping.findForward("admin"); |
} |
/******** |
* EMAILS QUESTIONARIO |
* @param mapping |
* @param form |
* @param request |
* @param response |
* @return |
* @throws Throwable |
*/ |
public ActionForward sendEmailQuestionario(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioMessage frm = (QuestionarioMessage) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"}; |
Object[] args = { |
frm.isOnlyNotAnswered(), |
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(), |
frm.getMessage(), |
frm.getFromEmail(), |
frm.getFromPerson(), |
frm.getSubject() |
}; |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessage",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
public ActionForward sendEmailQuestionarioCursoAfeto(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioMessage frm = (QuestionarioMessage) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"}; |
Object[] args = { |
frm.isOnlyNotAnswered(), |
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(), |
frm.getMessage(), |
frm.getFromEmail(), |
frm.getFromPerson(), |
frm.getSubject() |
}; |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageCursoAfeto",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
public ActionForward sendEmailQuestionarioUnidadeAfeta(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioMessage frm = (QuestionarioMessage) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"}; |
Object[] args = { |
frm.isOnlyNotAnswered(), |
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(), |
frm.getMessage(), |
frm.getFromEmail(), |
frm.getFromPerson(), |
frm.getSubject() |
}; |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageUnidadeAfeta",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
public ActionForward sendEmailQuestionariosProcessing(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioMessage frm = (QuestionarioMessage) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"}; |
Object[] args = { |
frm.isOnlyNotAnswered(), |
frm.getMessage(), |
frm.getFromEmail(), |
frm.getFromPerson(), |
frm.getSubject() |
}; |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageAllProcessing",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("seeAll"); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/contacts/ContactsController.java |
---|
1,21 → 1,18 |
package pt.estgp.estgweb.web.controllers.contacts; |
import org.apache.log4j.Logger; |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.views.UserView; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.controllers.utils.UtilsController; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.estgp.estgweb.domain.views.AnnouncementView; |
import pt.estgp.estgweb.domain.views.UserView; |
import pt.estgp.estgweb.Globals; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import org.apache.log4j.Logger; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import org.apache.struts.action.ActionForm; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import javax.servlet.ServletException; |
import java.util.List; |
/** |
40,9 → 37,11 |
String area = request.getParameter("area"); |
request.setAttribute("area",area); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"area"}; |
Object[] args = new Object[]{area}; |
List<UserView> teachers = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "LoadTeachersWithUnits", args, names); |
//String[] names = new String[]{"area"}; |
//Object[] args = new Object[]{area}; |
String[] names = new String[]{}; |
Object[] args = new Object[]{}; |
List<UserView> teachers = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "LoadTeachersWithUnitsInLast3Years", args, names); |
request.setAttribute("teachers",teachers); |
return mapping.findForward("contactTeachers"); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/authenticate/AuthenticateController.java |
---|
139,7 → 139,7 |
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request); |
if(userSession.getUser() == null) |
return mapping.findForward("welcome"); |
return mapping.findForward(Globals.SYSTEM_REDIRECTIONS_POLICY_INDEX_WELCOME); |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = new Object[]{}; |
//to send good by message |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/filters/UserSessionFilter.java |
---|
91,9 → 91,9 |
if(((HttpServletRequest)request).getServletPath().indexOf("errorNoCookies.do")>=0 || !hrequest.isRequestedSessionIdFromCookie()) |
{ |
chain.doFilter(request,response); |
//chain.doFilter(request,response); |
logger.info("COOKIE lost"); |
return; |
} |
try |
{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/json/JsonHandler.java |
---|
1,24 → 1,43 |
package pt.estgp.estgweb.web.json; |
import com.owlike.genson.TransformationException; |
import org.apache.log4j.Logger; |
import org.json.JSONArray; |
import org.json.JSONException; |
import org.json.JSONObject; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.services.courses.xsd.Curso; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServlet; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import javax.xml.bind.JAXBContext; |
import javax.xml.bind.JAXBException; |
import javax.xml.bind.Marshaller; |
import javax.xml.bind.Unmarshaller; |
import java.io.IOException; |
import java.io.PrintWriter; |
import java.io.StringReader; |
/** |
* Created by jorgemachado on 02/02/16. |
*/ |
public class JsonHandler extends HttpServlet |
{ |
private static final Logger logger = Logger.getLogger(JsonHandler.class); |
/** Handles the HTTP <code>GET</code> method. |
* @param request servlet request |
* @param response servlet response |
*/ |
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException |
{ |
processRequest(request, response); |
throws ServletException, IOException { |
processRequestSafe(request, response); |
} |
/** Handles the HTTP <code>POST</code> method. |
27,11 → 46,127 |
*/ |
protected void doPost(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException { |
processRequest(request, response); |
processRequestSafe(request, response); |
} |
private void processRequest(HttpServletRequest request, HttpServletResponse response) { |
private void processRequestSafe(HttpServletRequest request, HttpServletResponse response) throws IOException { |
response.setContentType("application/json"); |
try { |
processRequest(request, response); |
} catch (TransformationException e) |
{ |
response.getWriter().print(e); |
response.getWriter().print("See log for details:"); |
logger.error(e,e); |
} |
catch (JAXBException e) |
{ |
response.getWriter().print(e); |
response.getWriter().print("See log for details:"); |
logger.error(e,e); |
} |
catch (JSONException e) |
{ |
response.getWriter().print(e); |
response.getWriter().print("See log for details:"); |
logger.error(e, e); |
} catch (Throwable throwable) { |
response.getWriter().print(throwable); |
response.getWriter().print("See log for details:"); |
logger.error(throwable, throwable); |
} |
} |
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws Throwable { |
IServiceManager sm = ServiceManager.getInstance(); |
String service = request.getParameter("service"); |
if(service == null) |
{ |
printServices(response.getWriter()); |
} |
else if(service.equals("listCourses")) |
{ |
String school = request.getParameter("school"); |
String type = request.getParameter("type"); |
JSONObject obj = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "GetActiveCoursesForJsonApi", new Object[]{school, type}); |
response.getWriter().write(obj.toString()); |
} |
else if(service.equals("getCourse") && request.getParameter("code") != null) |
{ |
String code = request.getParameter("code"); |
JSONObject obj = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "GetCourseDetailForJsonApi", new Object[]{code}); |
response.getWriter().write(obj.toString()); |
} |
else if(service.equals("getStudiesPlanXml") && request.getParameter("code") != null) |
{ |
String code = request.getParameter("code"); |
String renew = request.getParameter("renew"); |
response.setContentType("application/xml"); |
response.setCharacterEncoding("UTF-8"); |
String xml = (String) sm.execute(RequestUtils.getRequester(request, response), "GetCourseStudiesPlanXml", new Object[]{code,renew}); |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
Unmarshaller unmarshaller = jc.createUnmarshaller(); |
Curso curso = (Curso) unmarshaller.unmarshal(new StringReader(xml)); |
Marshaller marshaller = jc.createMarshaller(); |
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); |
marshaller.marshal(curso, response.getOutputStream()); |
//SETTING XML in COURSE STUDIES PLAN |
} |
else if(service.equals("syncSystemPlans") && request.getParameter("systemUrl") != null && request.getParameter("setActive") != null) |
{ |
UserSession sess = UserSessionProxy.loadUserSessionFromRequest(request); |
response.setContentType("application/xml"); |
if(sess.getUser() != null && sess.getUser().isSuperuserOrAdmin()) |
{ |
String systemUrl = request.getParameter("systemUrl"); |
boolean setActive = Boolean.parseBoolean(request.getParameter("setActive")); |
response.setContentType("application/xml"); |
String log = (String) sm.execute(RequestUtils.getRequester(request, response), "SincronizeCoursesStudiesPlans", new Object[]{systemUrl,setActive}); |
response.getWriter().write("<response><status>OK</status><log>" + log + "</log></response>"); |
} |
else |
{ |
response.getWriter().write("<error>Permission Denied</error>"); |
} |
} |
else |
{ |
printServices(response.getWriter()); |
} |
} |
public void printServices(PrintWriter out) throws JSONException, IOException |
{ |
JSONObject obj = new JSONObject(); |
JSONArray availableServices = new JSONArray(); |
JSONObject service2 = new JSONObject(); |
service2.put("name","getCourse"); |
service2.put("parameterCode","code"); |
service2.put("parameterCodeType","integer"); |
service2.put("exampleCall1","/wsjson/api?service=getCourse&code=9119"); |
JSONObject service = new JSONObject(); |
service.put("name","listCourses"); |
service.put("parameterType","type"); |
service.put("parameterTypeEnumValues","Licenciaturas,Mestrados,PosGraduacoes,CET,CTeSP or none for all"); |
service.put("parameterSchool","school"); |
service.put("parameterSchoolEnumValues","ESTG,ESECS,ESS,ESAE or none for all"); |
service.put("exampleCall1","/wsjson/api?service=listCourses"); |
service.put("exampleCall2","/wsjson/api?service=listCourses&type=Licenciaturas&school=ESTG"); |
availableServices.put(service); |
availableServices.put(service2); |
JSONObject response = new JSONObject(); |
obj.put("response",response); |
response.put("status","invalid service"); |
response.put("availableServices",availableServices); |
out.write(obj.toString()); |
} |
} |
/branches/v3/impl/src/doc/estgweb.eap |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v3/impl/src/doc/BacoV32016/processos/QueriesQuestionarios.txt |
---|
New file |
0,0 → 1,0 |
select tr.nomeDocente,avg((r6+r7+r8+r9+r10+r11+r12)/7.0) as media,avg((timeTakenR6+timeTakenR7+timeTakenR8+timeTakenR9+timeTakenR10+timeTakenR11+timeTakenR12)/7.0) as tempo from questionario_resposta q join questionario_resposta_requisitada qr on qr.resposta = q.id join questionario_peda_aluno_requisitado ar on ar.respostaRequisitada = qr.id join questionario_peda_tipologia_requisitada tr on tr.id = ar.tipologia_requisitada group by tr.cdDocente order by media; |
/branches/v3/impl/src/doc/BacoV32016/processos/QuestionariosAccess/importMdb.sh |
---|
New file |
0,0 → 1,23 |
MDB_FILE=$1 |
QUESTDATA=$2 |
QUESTPERIODO=$3 |
TABLES="INQUERITO PROFESSOR CURSO DISCIPLINA PROFESSOR_DISCIPLINA R_DISCIPLINA R_DOCENTE" |
echo "Using file:$1 in year $2 semestre $3" |
echo "drop database inqueritos$QUESTDATA$QUESTPERIODO;" | mysql -uroot |
echo "create database inqueritos$QUESTDATA$QUESTPERIODO;" | mysql -uroot |
#mdb-schema inquerito_final.mdb | sed "s/Double/int/" | sed "s/Long Integer/int/" | sed "s/\[//" | sed "s/\]//" | sed "s/\Text (.*)/varchar(250)/" | sed "s/Boolean/BIT(1)/" | sed "s/Numeric (.*)/int/" | sed "s/Cópia de /copia_de_/" | mysql -uroot inqueritos_$QUESTDATA_$QUESTPERIODO |
#mdb-schema -S inquerito_final.mdb mysql | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO |
mdb-schema -S inquerito_final.mdb mysql | grep -i CREATE | cut -f 3 -d " " | sed "s/\`//" | sed "s/\`//" | grep -v mdb > tmp_tables |
echo $TABLES |
for i in $TABLES |
do |
echo "Exporting $i to mysql" |
mdb-schema -S -T $i inquerito_final.mdb mysql | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO |
mdb-export -I mysql -H inquerito_final.mdb $i | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO |
done |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/doc/BacoV32016/processos/QuestionariosAccess/scriptMdbToolsExportMdbMySql.rtf |
---|
New file |
0,0 → 1,18 |
{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 |
{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} |
{\colortbl;\red255\green255\blue255;} |
\paperw11900\paperh16840\margl1440\margr1440\vieww15780\viewh8400\viewkind0 |
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural |
\f0\fs22 \cf0 \CocoaLigature0 \ |
exportar MDB com mdbtools para linux\ |
\ |
mdb-schema inquerito_final.mdb | sed "s/Long Integer/int/" | sed "s/\\[//" | sed "s/\\]//" | sed "s/\\Text (.*)/varchar(250)/" | sed "s/Boolean/BIT(1)/" | sed "s/Numeric \\(.*\\)/int/"\ |
\ |
\ |
ESCOLHER APENAS AS TABELAS DESEJADAS\ |
\ |
\ |
mdb-export -I mysql inquerito_final.mdb INQUERITO | mysql -uroot inqueritos_201415_S2\ |
\ |
} |
/branches/v3/impl/src/doc/BacoV32016/linuxInstall/How To Set Up Master Slave Replication in MySQL _ DigitalOcean_files.zip |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/branches/v3/impl/src/doc/BacoV32016/linuxInstall/mysql/mysqlreplication.txt |
---|
New file |
0,0 → 1,108 |
#PARA MYSQL SLAVE JA EM FUNCIONAMENTO COM BASE EM UM MASTER E FUNCIONANDO COM FICHEIROS |
STOP SLAVE; |
SET GLOBAL master_info_repository = 'TABLE'; |
SET GLOBAL relay_log_info_repository = 'TABLE'; |
depois alterar no my.conf na parte do mysqld para isto |
[mysqld] |
master-info-repository=TABLE |
relay-log-info-repository=TABLE |
##################################### |
SERVER EXEMPLO: 172.20.100.141 |
SLAVE EXEMPLO: 172.20.100.20 |
NO MASTER QUE VAI SER REPLICADO |
sudo apt-get install mysql-server mysql-client |
sudo nano /etc/mysql/my.cnf |
#comentar a linha assim: |
#bind-address = 127.0.0.1 |
#procurar a linha server-id e colocar assim: |
server-id = 1 |
#definir o log file e a base de dados que poderá ser replicada: |
log_bin = /var/log/mysql/mysql-bin.log |
binlog_do_db = pae |
#Como temos trasaction ISOLATION READ_COMMITED |
#adicionat a linha |
binlog_format=row |
#reiniciar tomcat |
/etc/init.d/mysql restart |
#AGORA ENTRAMOS NO MYSQL |
mysql -u root |
#GARANTIR DIREITOS DE REPLICACAO AO SLAVE |
GRANT REPLICATION SLAVE ON *.* TO 'baco'@'172.20.100.20' IDENTIFIED BY 'baco1232008estg'; |
FLUSH PRIVILEGES; |
#FAZER DUMP DA BASE DE DADOS |
mysql> \u pae |
Reading table information for completion of table and column names |
You can turn off this feature to get a quicker startup with -A |
Database changed |
mysql> FLUSH TABLES WITH READ LOCK; |
Query OK, 0 rows affected (0.00 sec) |
mysql> SHOW MASTER STATUS; |
+------------------+----------+--------------+------------------+ |
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | |
+------------------+----------+--------------+------------------+ |
| mysql-bin.000001 | 107 | pae | | |
+------------------+----------+--------------+------------------+ |
1 row in set (0.00 sec) |
mysql> UNLOCK TABLES; |
ENTRAR EM NOVO TERMNAL SEM MECHER NESTE |
mysqldump -u root -p --opt pae > pae-para-slave.sql |
#NO MYSQL |
UNLOCK TABLES; |
QUIT; |
#COPIAR O FICHEIRO PARA O SLAVE 172.20.100.20 |
#SE FOR EM LINUX FAZER ASSIM EXEMPLO que copia para a pasta onde estamos que é o ".": |
scp jmachado@pae.ipportalegre.pt:/home/jmachado/pae-para-slave.sql . |
#entrar no mysql do salve |
create database pae; |
#sair |
quit |
#carregar base de dados |
mysql -uroot -pbaco1232008estg pae < pae-para-slave.sql |
elay-log = /var/log/mysql/mysql-relay-bin.log |
log_bin = /var/log/mysql/mysql-bin.log |
binlog_do_db = newdatabase |
sudo service mysql restart |
The next step is to enable the replication from within the MySQL shell. |
Open up the the MySQL shell once again and type in the following details, replacing the values to match your information: |
CHANGE MASTER TO MASTER_HOST='172.20.100.141',MASTER_USER='baco', MASTER_PASSWORD='baco1232008estg', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
START SLAVE; |
SHOW SLAVE STATUS |
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAE-EmVigor.docx |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAEv2.docx |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |