Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 613 → Rev 699

/impl/conf/language/MessageResourcesSurvey.properties
New file
0,0 → 1,106
################################################################################
#
# Survey MESSAGE RESOURCES - Duarte Santos
#
################################################################################
 
# SERVICE ZONE
surveys=Questionários
survey.create.survey=Criar Questionário
survey.list.surveys=Listar Questionários
survey.zero.placed=0 questionários criados
intranet.my.surveys=Os Meus Questionários
intranet.my.surveys.stats=As Estatísticas Que Posso Consultar
survey.stats.zero.placed=Não existem estatísticas que possa consultar
 
# SUBMIT SURVEY
survey.submit.form.title=Título
survey.submit.form.type=Tipo
survey.submit.form.target.roles=Pessoas a quem destina
survey.submit.form.target.pairs=Par a que se destina
survey.submit.form.stats.consult.roles=Quem pode consultar resultados
survey.submit.form.start.date=Data de inicio
survey.submit.form.end.date=Data de fim
survey.submit.form.questions=Perguntas
survey.submit.form.delete.question=Apagar pergunta
survey.submit.form.required.question=Obrigatória?
survey.submit.form.question=Pergunta
survey.submit.form.add.hoption=Adicionar opção horizontal
survey.submit.form.add.voption=Adicionar opção vertical
survey.submit.form.add.question=Adicionar pergunta
# SUBMIT SURVEY selects
surveys.type.general=Geral
surveys.type.pedagogic=Pedagógico
surveys.target.pair.student.courseunit=Estudante/Cadeira
surveys.target.pair.teacher.courseunit=Professor/Cadeira
surveys.stats.consult.owner=Criador
surveys.question.type.radio=Escolha múltipla radio
surveys.question.type.check=Escolha múltipla check
surveys.question.type.matrix=Escolha múltipla matriz
surveys.question.type.text=Pergunta de texto
#SUBMIT SURVEY errors
survey.submit.form.error.need.expire.date=A data em que o questionário acaba é obrigatória
survey.submit.form.error.need.questions=É necessário adicionar pelo menos uma pergunta
survey.submit.form.error.question.need.label=A {0}ª pergunta tem de ter texto
survey.submit.form.error.question.need.hoption=A {0}ª pergunta tem de ter pelo menos uma opção horizontal
survey.submit.form.error.question.need.voption=A {0}ª pergunta tem de ter pelo menos uma opção vertical
survey.submit.form.error.question.options.need.labels=Todas as opções da {0}ª pergunta devem estar preenchidas
survey.submit.form.error.question.need.hoption.first=Primeiro tem de adicionar uma opção horizontal
 
# ANSWER SURVEY
survey.answer.form.title=Título
survey.answer.form.type=Tipo
survey.answer.form.end.date=Data de Fim
survey.answer.form.related=Relativo a
survey.answer.form.required.question=Pergunta obrigatória
# ANSWER SURVEY errors
survey.answer.form.error.answer.question.required=A {0}ª pergunta é obrigatória!
 
# LIST SURVEY
survey.list.form.title=Título
survey.list.form.type=Tipo
survey.list.form.target=Destinatários
survey.list.form.year=Ano
survey.list.form.semester=Semestre
survey.list.form.start.date=Data de Início
survey.list.form.end.date=Data de Fim
survey.list.form.created.by=Criado por
survey.list.form.number.responses=Nº de Respostas
survey.list.form.status=Estado
survey.list.form.percentage.symbol=%
survey.list.form.empty=Não existem questionários
# LIST SURVEY options
survey.list.form.option.edit=Editar
survey.list.form.option.clone=Replicar
survey.list.form.option.consist=Consistir
survey.list.form.option.gen.stats=Gerar estatísticas
survey.list.form.option.view.stats=Ver estatísticas
survey.list.form.option.download.csv=Download CSV
# LIST SURVEY status
survey.list.form.status.create.survey=A criar o questionário, aguarde...
survey.list.form.status.consist.survey=A consistir o questionário, aguarde...
survey.list.form.status.generate.stats=A gerar estatísticas, aguarde...
 
# STATS
survey.stats.graph.axis.range.label=Nº de Respostas
survey.stats.graph.axis.domain.label=Itens
 
# General MESSAGES
survey.message.created.success=Questionário criado com sucesso
survey.message.edited.success=Questionário editado com sucesso
survey.message.answered.success=Questionário respondido com sucesso
survey.message.operation.started=Operação iniciada com sucesso
 
# TOPNAV
survey.topnav.create.survey=Criar Questionário
survey.topnav.list.surveys=Listar Questionários
survey.topnav.list.stats=Listar Estatísticas
survey.topnav.load.stats=a ver estatísticas
survey.topnav.response.survey=a responder questionário
survey.topnav.view.graphs=a ver gráficos
 
# TO.DO
module.Surveys=Questionários
survey.type.todo=Para responder
 
 
/impl/conf/language/MessageResourcesCourse.properties
74,7 → 74,17
course.validation.role=Comissão de Curso para validação de Programas
 
 
course.pagina.nao.disponivel=De momento a página à qual acedeu não se encontra disponivel, pedimos desculpa por qualquer incómodo que isto lhe possa causar, a administração foi informada deste facto e irá resolver o problema o mais depressa possivel.
courseunit.programfile.valid=programa <u>Aprovado</u> pela pela comissão de curso
 
course.courseunit.program.validate.todo={0} Unidades por aprovar (programa)
 
course.menu.home=Inicio
course.menu.studiesplan=Plano de Estudos
course.menu.internacionalicao=Internacionalização
course.menu.labs=Laboratorios
course.menu.actividades=Actividades
course.menu.casos=Casos de sucesso
course.menu.parceiros=Parceiros
course.menu.faq=FAQ
 
/impl/conf/language/MessageResources.properties
133,7 → 133,9
user.role.studentsID=Alunos de Informação e Documentação
user.role.studentsFSIR=Alunos de Fontes de Informação e Serviço de Referência
 
user.role.admin,teacher=Admin e Professor
 
 
#Filter Errors
fail.role=Lamentamos o incómodo, mas necessita de permissões especiais para aceder a esta área.
fail.owner=Lamentamos o incómodo, mas não tem permissões sobre o objecto ao qual tentou aceder.
/impl/conf/language/MessageResourcesCourseUnits.properties
7,6 → 7,8
course={0} &gt
courseunit={0}
 
course.nav.without.arrow={0}
 
courseunit.menu.unit.old.units=Anos anteriores
courseunit.menu.unit.other.units=Outros Anos
courseunit.menu.unit=Unidade
/impl/conf/WEB-INF/struts/struts-courses.xml
26,7 → 26,17
<action path="/coursesFromStudentPortal" forward="page.alunosInformacaoAcademicaPortalMenu.courses"/>
 
 
<action path="/startLoadCourse" forward="/courseController.do?dispatch=load"/>
<action path="/startLoadCourseSeparators" forward="/courseController.do?dispatch=loadSeparators"/>
<action path="/startLoadCourse" forward="/courseController.do?dispatch=loadSeparators"/>
 
<action path="/startLoadMenuCourse" forward="/courseController.do?dispatch=loadMenu"/>
 
<action path="/startLoadCourseStudiesPlan" forward="/courseController.do?dispatch=loadPlan"/>
<!--ESTE E O LINK DO PROGRAMA CURRICULAR-->
 
 
 
<action path="/courseController"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
35,6 → 45,10
validate="false"
input="page.welcome">
<forward name="load" path="page.load.course"/>
 
<forward name="loadPlan" path="page.load.course.plan"/>
<forward name="loadSeparators" path="page.load.course.separators"/>
<forward name="loadMenu" path="page.load.course.menu"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=loadCoursesPrograms&amp;fromDispatch=loadCoursesPrograms&amp;from=ServiceZone&amp;area="/>
/impl/conf/WEB-INF/struts/tiles-courses.xml
22,12 → 22,37
<definition name="page.load.course" extends="base.layout1">
<put name="title" value="Curso"/>
<put name="topnav" value="/public/courses/topnavCourse.jsp"/>
<put name="navigation" value="/public/courses/courses.jsp"/>
<!--<put name="navigation" value="/public/courses/courses.jsp"/>-->
<put name="navigation" value="/public/courses/courseMenu.jsp"/>
<put name="body" value="/public/courses/course.jsp"/>
</definition>
 
<definition name="page.load.course.plan" extends="base.layout1">
<put name="title" value="Curso"/>
<put name="topnav" value="/public/courses/topnavCourse.jsp"/>
<!--<put name="navigation" value="/public/courses/courses.jsp"/>-->
<put name="navigation" value="/public/courses/courseMenu.jsp"/>
<put name="body" value="/public/courses/studiesPlan.jsp"/>
</definition>
 
 
 
<definition name="page.load.course.separators" extends="base.layout1">
<put name="title" value="Curso"/>
<put name="topnav" value="/public/courses/topnavCourse.jsp"/>
<put name="navigation" value="/public/courses/courseMenu.jsp"/>
<put name="body" value="/public/courses/courseSeparators.jsp"/>
</definition>
 
<definition name="page.load.course.menu" extends="base.layout1">
<put name="title" value="Curso"/>
<put name="topnav" value="/public/courses/topnavCourse.jsp"/>
<put name="navigation" value="/public/courses/courseMenu.jsp"/>
<put name="body" value="/public/courses/courseMenuLoader.jsp"/>
</definition>
 
 
 
<definition name="page.select.course.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Selecção de Curso"/>
<put name="topnav" value="/user/serviceZone/topnavSelectCourse.jsp"/>
62,9 → 87,9
</definition>
 
 
 
 
 
 
 
</tiles-definitions>
/impl/conf/WEB-INF/struts/struts-default.xml
10,7 → 10,7
<form-beans>
<!-- Import -->
<!--<form-bean type="pt.estgp.estgweb.web.form.announcements.AnnouncementsForm" name="AnnouncementsForm"/>-->
<form-bean type="pt.estgp.estgweb.web.form.EmptyForm" name="EmptyForm"/>
<form-bean type="pt.estgp.estgweb.web.form.EmptyForm" name="EmptyForm"/>
<!--<form-bean type="com.innovkey.opt.imports.web.ImportForm" name="ImportForm"/>-->
</form-beans>
 
201,10 → 201,11
/WEB-INF/struts/tiles-intranet.xml,
/WEB-INF/struts/tiles-reminders.xml,
/WEB-INF/struts/tiles-managedidentifier.xml,
/WEB-INF/struts/tiles-srusource.xml"/>
/WEB-INF/struts/tiles-srusource.xml,
/WEB-INF/struts/tiles-survey.xml"/> <!-- Duarte Santos -->
</plug-in>
 
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/struts/validator-rules.xml,/WEB-INF/struts/validation.xml"/>
</plug-in>
</struts-config>
</struts-config>
/impl/conf/WEB-INF/struts/struts-survey.xml
New file
0,0 → 1,67
<?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.surveys.SurveysForm" name="SurveysForm"/>
</form-beans>
 
<global-exceptions>
 
</global-exceptions>
 
<global-forwards>
 
</global-forwards>
 
<action-mappings>
 
<action path="/user/submitSurveyFromServiceZone"
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController"
name="SurveysForm"
scope="request"
parameter="dispatch"
input="page.submit.survey.from.serviceZone"
validate="true">
<forward name="serviceZone" path="page.separators.serviceZone"/>
</action>
 
<action path="/user/startSurveyResponseFromHome" forward="/user/surveysControllerFromServiceZone.do?dispatch=loadResponse&amp;from=Home"/>
<action path="/user/submitSurveyResponseFromHome"
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController"
name="SurveysForm"
scope="request"
parameter="dispatch"
input="page.submit.survey.response.from.home"
validate="true">
<forward name="home" path="page.separators.home"/>
</action>
 
<action path="/user/startLoadSurveyNodeGraphs" forward="page.load.survey.node.graphs"/>
<action path="/user/startListSurveyStats" forward="/user/surveysControllerFromServiceZone.do?dispatch=listStats"/>
<action path="/user/startListSurveysFromServiceZone" forward="page.list.surveys.from.serviceZone"/>
<action path="/user/startGenerateSurveyStatsFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=generateStats&amp;from=ServiceZone"/>
<action path="/user/startConsistSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=consist&amp;from=ServiceZone"/>
<action path="/user/startCloneSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=clone&amp;from=ServiceZone"/>
<action path="/user/startEditSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=edit&amp;from=ServiceZone"/>
<action path="/user/startSubmitSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=start&amp;from=ServiceZone"/>
<action path="/user/surveysControllerFromServiceZone"
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController"
name="SurveysForm"
scope="request"
parameter="dispatch"
input="page.submit.survey.from.serviceZone"
validate="false">
<forward name="response" path="page.submit.survey.response.from.home"/>
<forward name="stats" path="page.list.survey.stats"/>
<forward name="serviceZone" path="page.separators.serviceZone"/>
<forward name="from.add.role" path="page.submit.survey.from.serviceZone"/>
</action>
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/struts/tiles-survey.xml
New file
0,0 → 1,39
<?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>
 
<definition name="page.submit.survey.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Questionário"/>
<put name="topnav" value="/user/serviceZone/topnavCreateSurvey.jsp"/>
<put name="body" value="/admin/surveys/submitSurvey.jsp"/>
</definition>
 
<definition name="page.list.surveys.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Questionário"/>
<put name="topnav" value="/user/serviceZone/topnavListSurvey.jsp"/>
<put name="body" value="/user/surveys/listSurveys.jsp"/>
</definition>
 
<definition name="page.list.survey.stats" extends="page.separators.serviceZone">
<put name="title" value="Questionário"/>
<put name="topnav" value="/user/serviceZone/topnavListSurveyStats.jsp"/>
<put name="body" value="/user/surveys/listSurveyStats.jsp"/>
</definition>
 
<definition name="page.load.survey.node.graphs" extends="page.separators.serviceZone">
<put name="title" value="Questionário"/>
<put name="topnav" value="/user/serviceZone/topnavLoadSurveyNodeGraphs.jsp"/>
<put name="body" value="/user/surveys/loadSurveyNodeGraphs.jsp"/>
</definition>
 
<definition name="page.submit.survey.response.from.home" extends="page.separators.home">
<put name="title" value="Questionário"/>
<put name="topnav" value="/user/home/topnavResponseSurvey.jsp"/>
<put name="body" value="/user/surveys/submitSurveyResponse.jsp"/>
</definition>
</tiles-definitions>
/impl/conf/WEB-INF/tlds/baco.tld
251,6 → 251,5
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
 
</tag>
</taglib>
/impl/conf/WEB-INF/web.xml
144,7 → 144,8
/WEB-INF/struts/struts-intranet.xml,
/WEB-INF/struts/struts-reminders.xml,
/WEB-INF/struts/struts-managedidentifier.xml,
/WEB-INF/struts/struts-srusource.xml
/WEB-INF/struts/struts-srusource.xml,
/WEB-INF/struts/struts-survey.xml <!-- Duarte Santos -->
</param-value>
</init-param>
<init-param>
/impl/conf/app.properties
1,4 → 1,4

 
#FICHEIRO DE CONFIGURACOES
 
tmp.dir=@tmp.dir@
67,7 → 67,10
module.profile=true
module.sms=false
module.quotasImpressao=true
#module.quotasImpressao=false
module.srusource=true
#Duarte Santos
module.surveys=true
##################################################
# SMS
#
85,7 → 88,7
##Proxy Servers
#If is an HTTP Server needs encoding config if FTP needs user pass config
#This server is the server for unit contents, must be named ionline, it is hardcoded
server.ionline=ftp://www.global.estgp.pt
server.ionline=ftp://w2.estgp.pt
server.ionline.start.path=
ionline.pass=baco
ionline.user=Baco_web
97,6 → 100,13
estgp.proxy.host=
estgp.proxy.port=
 
server.conteudos.start.path=
#server.conteudos=http://localhost:9090/conteudos
server.conteudos=http://deptal.estgp.pt:9090/conteudos
conteudos.encoding=UTF-8
conteudos.proxy.host=
conteudos.proxy.port=
 
proxy.extensions=html htm php asp aspx dhtml jsp py
 
################################################
258,7 → 268,38
 
blog.desc.summary.size=250
blog.type.courseunit=courseunit
 
#########################################################################
# Surveys - Duarte Santos
#
 
surveys.type.0=general
surveys.type.1=pedagogic
 
# Esta role tem de existir nas user.role senão tem de ser adicionada nas messages props
surveys.target.role.0=all
surveys.target.role.1=teacher
surveys.target.role.2=student
 
surveys.target.pair.0=student.courseunit
surveys.target.pair.1=teacher.courseunit
 
# Esta role tem de existir nas user.role senão tem de ser adicionada nas messages props
surveys.stats.consult.role.0=all
surveys.stats.consult.role.1=teacher
surveys.stats.consult.role.2=student
 
surveys.question.type.0=radio
surveys.question.type.1=check
surveys.question.type.2=matrix
surveys.question.type.3=text
 
# Stats
surveys.stats.graph.img.width=800
surveys.stats.graph.img.height=300
 
 
#########################################################################
# Link Analysis
#
url.stat.tmp.dir=/linkchart
379,6 → 420,7
#PopService
#
pop.container.use=true
#pop.container.use=false
pop.web.interface=http://mail.estgp.pt/exchange
pop.server=mail.estgp.pt
pop.use.default.server=true
/impl/conf/template/email/message_pt.txt
5,9 → 5,9
<title>{1}</title>
</head>
<body>
<h3>Caros {4}</h3>
<!--<h3>Caros {4}</h3>-->
 
<p>Um nova mensagem foi enviada por {0}:</p>
<!--<p>Um nova mensagem foi enviada por {0}:</p>-->
 
{1}
 
20,4 → 20,4
<p>Instituto Politécnico de Portalegre</p>
<p><a href="http://www.estgp.pt">http://www.estgp.pt</a></p>
</body>
</html>
</html>
/impl/conf/directories/futureStudent.xml
6,7 → 6,7
<group>2</group>
</groupsDeclaration>
<node label="A ESTG" id="ESTG" group="1">
<leaf absolute="false" url="/public/portal/estgMensagemDirector.html" proxy="estgp" id="estgDirector" label="Mensagem do Director"></leaf>
<leaf absolute="false" url="/pagina.php?nome_id=MensagemDirector" proxy="conteudos" id="estgDirector" label="Mensagem do Director"></leaf>
<leaf absolute="false" url="/public/portal/estgComoChegarEstg.html" proxy="estgp" id="estgChegar" label="Como Chegar à ESTG"></leaf>
<leaf absolute="false" url="/public/portal/estgPassado.html" proxy="estgp" id="estgPassado" label="O nosso Passado"></leaf>
<leaf absolute="false" url="/public/portal/estgPresente.html" proxy="estgp" id="estgPresente" label="O Presente"></leaf>
18,7 → 18,7
<leaf absolute="true" url="http://mail.estgp.pt/exchange/" proxy="estgp" id="servWebmail" label="Webmail"></leaf>
<leaf absolute="false" url="/public/portal/servicosEduroam.html" proxy="estgp" id="servEduroam" label="Eduroam"></leaf>
<leaf absolute="false" url="/public/portal/servicosSecretaria.html" proxy="estgp" id="servSecretaria" label="Secretaria"></leaf>
<leaf absolute="true" url="https://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="true" url="http://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="false" url="/public/portal/servicosGabineteComunicacao.html" proxy="estgp" id="servGabinetedeComunicacao" label="Gabinete de Comunicação"></leaf>
<leaf absolute="false" url="/public/portal/servicosRegie.html" proxy="estgp" id="servRegie" label="Régie"></leaf>
<leaf absolute="false" url="/public/portal/servicosCentroInformatico.html" proxy="estgp" id="servCentroInformatico" label="Centro Informático"></leaf>
/impl/conf/directories/utilsIntranet.xml
7,7 → 7,7
<leaf absolute="false" label="Legislação" layout="true" proxy="estgp" id="legislacao" url="/intranet/escola/secretaria/legislacao.html"/>
<leaf label="Folhas de Presenças" id="Folhas.Presencas" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/Folhas.Presencas"/>
<leaf label="Projectos-AA,CA,GE,MKT" id="Projectos.Finais" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/Projectos.Finais"/>
<leaf label="Actas" id="Actas" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Actas/Arquivo"/>
<leaf label="Actas" id="Actas" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Actas"/>
</leaf>
<leaf absolute="false" label="Horários" layout="true" proxy="estgp" id="horarios" url="/intranet/escola/horarios.html">
<leaf absolute="false" label="Horários de CET" layout="true" proxy="estgp" id="horariosCet" url="/intranet/escola/horarios_cets.html"/>
/impl/conf/directories/student.xml
8,7 → 8,7
<leaf absolute="true" url="http://baco.estgp.pt/layout/webmailRedirect.jsp" proxy="estgp" id="servWebmail" label="Webmail"></leaf>
<leaf absolute="false" url="/public/portal/servicosEduroam.html" proxy="estgp" id="servEduroam" label="Eduroam"></leaf>
<leaf absolute="false" url="/public/portal/servicosSecretaria.html" proxy="estgp" id="servSecretaria" label="Secretaria"></leaf>
<leaf absolute="true" url="https://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="true" url="http://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="false" url="/public/portal/servicosGabineteComunicacao.html" proxy="estgp" id="servGabinetedeComunicacao" label="Gabinete de Comunicação"></leaf>
<leaf absolute="false" url="/public/portal/servicosRegie.html" proxy="estgp" id="servRegie" label="Régie"></leaf>
<leaf absolute="false" url="/public/portal/servicosCentroInformatico.html" proxy="estgp" id="servCentroInformatico" label="Centro informático"></leaf>
/impl/conf/directories/teacher.xml
9,9 → 9,9
<leaf absolute="true" url="http://baco.estgp.pt/layout/webmailRedirect.jsp" proxy="estgp" id="servWebmail" label="Webmail"></leaf>
<leaf absolute="false" url="/public/portal/servicosEduroam.html" proxy="estgp" id="servEduroam" label="Eduroam"></leaf>
<leaf absolute="false" url="/public/portal/servicosSecretaria.html" proxy="estgp" id="servSecretaria" label="Secretaria"></leaf>
<leaf absolute="true" url="https://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="true" url="http://netpa.ipportalegre.pt/" proxy="estgp" id="servAcademicosOnline" label="Académicos online"></leaf>
<leaf absolute="false" url="/public/portal/servicosGabineteComunicacao.html" proxy="estgp" id="servGabinetedeComunicacao" label="Gabinete de Comunicação"></leaf>
<leaf absolute="true" url="http://193.137.229.153/mymillenium/" proxy="estgp" id="servPortalAssiduidade" label="Portal de Assiduidade"></leaf>
<leaf absolute="true" url="http://assiduidade.ipportalegre.pt/mymillenium/" proxy="estgp" id="servPortalAssiduidade" label="Portal de Assiduidade"></leaf>
<leaf absolute="true" url="http://sisgom.ipportalegre.pt/" proxy="estgp" id="servSisgom" label="Sisgom Ocorrências"></leaf>
<leaf absolute="true" url="https://www.siadap.gov.pt/" proxy="estgp" id="servSisgom" label="Siadap"></leaf>
</node>
/impl/conf/berserk/sd.xml
1475,14 → 1475,167
</filterChains>
</service>
 
<!-- Duarte Santos -->
<service>
<name>LoadSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass>
<description>Load survey view</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
<service>
<name>LoadEditSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass>
<description>Load survey view to edit</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="CanEditSurvey"/>
</filterChains>
</service>
<service>
<name>LoadCloneSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass>
<description>Load survey view to clone</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadSurvey"/>
</filterChains>
</service>
<service>
<name>LoadListStatsSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass>
<description>Load survey view to list stats</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="CanConsultSurveyStats"/>
</filterChains>
</service>
<service>
<name>LoadSurveys</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveysService</implementationClass>
<description>Load all survey views</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>LoadOwnedSurveys</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveysService</implementationClass>
<description>Load owned survey views</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadOwnedSurveys</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
<service>
<name>LoadSurveyResponse</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyResponseService</implementationClass>
<description>Load survey response view</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadResponse"/>
</filterChains>
</service>
<service>
<name>CreateEditSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.CreateEditSurveyService</implementationClass>
<description>Create or edit survey</description>
<isTransactional>true</isTransactional>
<defaultMethod>createEditSurveyService</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>ConsistSurvey</name>
<implementationClass>pt.estgp.estgweb.services.surveys.ConsistSurveyService</implementationClass>
<description>Apply survey responses to new users</description>
<isTransactional>true</isTransactional>
<defaultMethod>consistSurveyService</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadSurvey"/>
</filterChains>
</service>
<service>
<name>InsertSurveyAnswers</name>
<implementationClass>pt.estgp.estgweb.services.surveys.InsertSurveyAnswersService</implementationClass>
<description>Insert survey answers</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadResponse"/>
</filterChains>
</service>
<service>
<name>GenerateSurveyStats</name>
<implementationClass>pt.estgp.estgweb.services.surveys.GenerateSurveyStatsService</implementationClass>
<description>Generate all survey stats</description>
<isTransactional>true</isTransactional>
<defaultMethod>generateStatsService</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadSurvey"/>
</filterChains>
</service>
<service>
<name>GenerateSurveyStatsCsv</name>
<implementationClass>pt.estgp.estgweb.services.surveys.GenerateSurveyStatsCsvService</implementationClass>
<description>Generate all survey stats on a csv file</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnersLoadSurvey"/>
</filterChains>
</service>
<service>
<name>LoadSurveyNodeGraphs</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyNodeGraphsService</implementationClass>
<description>Load survey graphics of a node</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="CanConsultSurveyStats"/>
</filterChains>
</service>
<service>
<name>LoadConsultStatsSurveys</name>
<implementationClass>pt.estgp.estgweb.services.surveys.LoadConsultStatsSurveysService</implementationClass>
<description>Load surveys views which user can consult stats</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
<!-- Duarte Santos -->
 
 
DeleteSruSource
 
 
 
 
 
 
</serviceDefinitions>
/impl/conf/berserk/fd.xml
183,4 → 183,21
<description>Check if a resource can be loaded</description>
<isTransactional>false</isTransactional>
</filter>
 
 
<!-- Duarte Santos -->
<filter>
<name>CanConsultSurveyStatsClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.CanConsultSurveyStatsClass</implementationClass>
<description>Checks if the requester can consult stats of specified object</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>CanEditSurveyClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.CanEditSurveyClass</implementationClass>
<description>Checks if the requester can edit specified object</description>
<isTransactional>false</isTransactional>
</filter>
<!-- Duarte Santos -->
</filterDefinitions>
/impl/conf/berserk/fcd.xml
206,31 → 206,36
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
 
 
 
 
 
 
 
 
 
 
 
<!-- Duarte Santos -->
<filterChain>
<name>ContextStaticTimerExample</name>
<expression>ContextStaticTimer("2008-03-1 12:00:00","2008-03-2 19:56:00")</expression>
<description>Timer Control Chain</description>
<name>OwnersLoadSurvey</name>
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.ContextControlFilter</filterClass>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
 
<filterChain>
<name>ContextObjectTimer</name>
<expression>ContextObjectTimer("object.serializable","object.referenceClass")</expression>
<description>Timer Control Chain from Object Time</description>
<name>CanConsultSurveyStats</name>
<expression>CanConsultSurveyStatsClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.ContextControlFilter</filterClass>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>OwnersLoadResponse</name>
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.SurveyResponseImpl")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>CanEditSurvey</name>
<expression>CanEditSurveyClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<!-- Duarte Santos -->
 
 
 
/impl/src/java/jomm/dao/impl/AbstractDao.java
5,22 → 5,22
import jomm.dao.IDomainObjectDao;
import jomm.dao.utils.HibernateUtils;
import org.hibernate.*;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import static org.hibernate.criterion.Restrictions.eq;
import org.hibernate.proxy.HibernateProxy;
import pt.estgp.estgweb.domain.DomainObject;
import pt.estgp.estgweb.domain.DomainSerializableObject;
import pt.estgp.estgweb.domain.Teacher;
 
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Date;
 
import static org.hibernate.criterion.Restrictions.eq;
 
 
/**
* This class will not be overwritten once it has been created. This is the
* superclass of all DAOs.
235,10 → 235,12
}
}
 
public List<CLAZZ> getAll()
{
Session s = getCurrentSession();
Query q = s.createQuery("select * from i where i in class " + getReferenceClass().getName());
// Duarte Santos
Query q = s.createQuery("from " + getReferenceClass().getName());
return q.list();
}
 
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
1,15 → 1,13
package pt.estgp.estgweb.utils;
 
import jomm.utils.MyCalendar;
import pt.estgp.estgweb.Globals;
 
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
 
import jomm.utils.MyCalendar;
 
/**
* @author Jorge Machado
* @date 13/Jun/2008
32,7 → 30,7
int month = mc.getMonth();
MyCalendar firstYear;
MyCalendar secondYear;
if(month <= 8)
if(month <= 9)
{
firstYear = new MyCalendar(mc.getYear() - 1,1,1);
secondYear = new MyCalendar(mc.getYear(),1,1);
/impl/src/java/pt/estgp/estgweb/utils/AbstractCollectionDecorator.java
New file
0,0 → 1,145
/*
* Copyright 2003-2004 The Apache Software Foundation
*
* Licensed 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 pt.estgp.estgweb.utils;
 
import java.util.Collection;
import java.util.Iterator;
 
/**
* Decorates another <code>Collection</code> to provide additional behaviour.
* <p>
* Each method call made on this <code>Collection</code> is forwarded to the
* decorated <code>Collection</code>. This class is used as a framework on which
* to build to extensions such as synchronized and unmodifiable behaviour. The
* main advantage of decoration is that one decorator can wrap any implementation
* of <code>Collection</code>, whereas sub-classing requires a new class to be
* written for each implementation.
* <p>
* This implementation does not perform any special processing with
* {@link #iterator()}. Instead it simply returns the value from the
* wrapped collection. This may be undesirable, for example if you are trying
* to write an unmodifiable implementation it might provide a loophole.
*
* @since Commons Collections 3.0
* @version $Revision: 1.4 $ $Date: 2004/06/02 21:53:03 $
*
* @author Stephen Colebourne
* @author Paul Jack
*/
public abstract class AbstractCollectionDecorator implements Collection {
 
/** The collection being decorated */
protected Collection collection;
 
/**
* Constructor only used in deserialization, do not use otherwise.
* @since Commons Collections 3.1
*/
protected AbstractCollectionDecorator() {
super();
}
 
/**
* Constructor that wraps (not copies).
*
* @param coll the collection to decorate, must not be null
* @throws IllegalArgumentException if the collection is null
*/
protected AbstractCollectionDecorator(Collection coll) {
if (coll == null) {
throw new IllegalArgumentException("Collection must not be null");
}
this.collection = coll;
}
 
/**
* Gets the collection being decorated.
*
* @return the decorated collection
*/
protected Collection getCollection() {
return collection;
}
 
//-----------------------------------------------------------------------
public boolean add(Object object) {
return collection.add(object);
}
 
public boolean addAll(Collection coll) {
return collection.addAll(coll);
}
 
public void clear() {
collection.clear();
}
 
public boolean contains(Object object) {
return collection.contains(object);
}
 
public boolean isEmpty() {
return collection.isEmpty();
}
 
public Iterator iterator() {
return collection.iterator();
}
 
public boolean remove(Object object) {
return collection.remove(object);
}
 
public int size() {
return collection.size();
}
 
public Object[] toArray() {
return collection.toArray();
}
 
public Object[] toArray(Object[] object) {
return collection.toArray(object);
}
 
public boolean containsAll(Collection coll) {
return collection.containsAll(coll);
}
 
public boolean removeAll(Collection coll) {
return collection.removeAll(coll);
}
 
public boolean retainAll(Collection coll) {
return collection.retainAll(coll);
}
 
public boolean equals(Object object) {
if (object == this) {
return true;
}
return collection.equals(object);
}
 
public int hashCode() {
return collection.hashCode();
}
 
public String toString() {
return collection.toString();
}
 
}
/impl/src/java/pt/estgp/estgweb/utils/AbstractListDecorator.java
New file
0,0 → 1,102
/*
* Copyright 2003-2004 The Apache Software Foundation
*
* Licensed 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 pt.estgp.estgweb.utils;
 
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
 
/**
* Decorates another <code>List</code> to provide additional behaviour.
* <p>
* Methods are forwarded directly to the decorated list.
*
* @since Commons Collections 3.0
* @version $Revision: 1.4 $ $Date: 2004/06/02 21:53:02 $
*
* @author Stephen Colebourne
*/
public abstract class AbstractListDecorator extends AbstractCollectionDecorator implements List {
 
/**
* Constructor only used in deserialization, do not use otherwise.
* @since Commons Collections 3.1
*/
protected AbstractListDecorator() {
super();
}
 
/**
* Constructor that wraps (not copies).
*
* @param list the list to decorate, must not be null
* @throws IllegalArgumentException if list is null
*/
protected AbstractListDecorator(List list) {
super(list);
}
 
/**
* Gets the list being decorated.
*
* @return the decorated list
*/
protected List getList() {
return (List) getCollection();
}
 
//-----------------------------------------------------------------------
public void add(int index, Object object) {
getList().add(index, object);
}
 
public boolean addAll(int index, Collection coll) {
return getList().addAll(index, coll);
}
 
public Object get(int index) {
return getList().get(index);
}
 
public int indexOf(Object object) {
return getList().indexOf(object);
}
 
public int lastIndexOf(Object object) {
return getList().lastIndexOf(object);
}
 
public ListIterator listIterator() {
return getList().listIterator();
}
 
public ListIterator listIterator(int index) {
return getList().listIterator(index);
}
 
public Object remove(int index) {
return getList().remove(index);
}
 
public Object set(int index, Object object) {
return getList().set(index, object);
}
 
public List subList(int fromIndex, int toIndex) {
return getList().subList(fromIndex, toIndex);
}
 
}
/impl/src/java/pt/estgp/estgweb/utils/Email.java
72,6 → 72,11
return recipients;
}
 
public void setRecipients(List<String> recipients)
{
this.recipients = recipients;
}
 
public String getFrom()
{
return from;
/impl/src/java/pt/estgp/estgweb/utils/AbstractSerializableListDecorator.java
New file
0,0 → 1,69
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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 pt.estgp.estgweb.utils;
 
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
 
/**
* Serializable subclass of AbstractListDecorator.
*
* @author Stephen Colebourne
* @since Commons Collections 3.1
*/
public abstract class AbstractSerializableListDecorator
extends AbstractListDecorator
implements Serializable {
 
/** Serialization version */
private static final long serialVersionUID = 2684959196747496299L;
 
/**
* Constructor.
*/
protected AbstractSerializableListDecorator(List list) {
super(list);
}
 
//-----------------------------------------------------------------------
/**
* Write the list out using a custom routine.
*
* @param out the output stream
* @throws java.io.IOException
*/
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(collection);
}
 
/**
* Read the list in using a custom routine.
*
* @param in the input stream
* @throws java.io.IOException
* @throws ClassNotFoundException
*/
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
collection = (Collection) in.readObject();
}
 
}
/impl/src/java/pt/estgp/estgweb/utils/LazyList.java
New file
0,0 → 1,136
/*
* Copyright 2003-2004 The Apache Software Foundation
*
* Licensed 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 pt.estgp.estgweb.utils;
 
import java.util.List;
 
import org.apache.commons.collections.Factory;
 
/**
* Decorates another <code>List</code> to create objects in the list on demand.
* <p>
* When the {@link #get(int)} method is called with an index greater than
* the size of the list, the list will automatically grow in size and return
* a new object from the specified factory. The gaps will be filled by null.
* If a get method call encounters a null, it will be replaced with a new
* object from the factory. Thus this list is unsuitable for storing null
* objects.
* <p>
* For instance:
*
* <pre>
* Factory factory = new Factory() {
* public Object create() {
* return new Date();
* }
* }
* List lazy = LazyList.decorate(new ArrayList(), factory);
* Object obj = lazy.get(3);
* </pre>
*
* After the above code is executed, <code>obj</code> will contain
* a new <code>Date</code> instance. Furthermore, that <code>Date</code>
* instance is the fourth element in the list. The first, second,
* and third element are all set to <code>null</code>.
* <p>
* This class is Serializable from Commons Collections 3.1.
*
* @since Commons Collections 3.0
* @version $Revision: 1.6 $ $Date: 2004/06/03 22:02:13 $
*
* @author Stephen Colebourne
* @author Arron Bates
* @author Paul Jack
*/
public class LazyList extends AbstractSerializableListDecorator {
 
/** Serialization version */
private static final long serialVersionUID = -1708388017160694542L;
 
/** The factory to use to lazily instantiate the objects */
protected final Factory factory;
 
/**
* Factory method to create a lazily instantiating list.
*
* @param list the list to decorate, must not be null
* @param factory the factory to use for creation, must not be null
* @throws IllegalArgumentException if list or factory is null
*/
public static List decorate(List list, Factory factory) {
return new LazyList(list, factory);
}
//-----------------------------------------------------------------------
/**
* Constructor that wraps (not copies).
*
* @param list the list to decorate, must not be null
* @param factory the factory to use for creation, must not be null
* @throws IllegalArgumentException if list or factory is null
*/
protected LazyList(List list, Factory factory) {
super(list);
if (factory == null) {
throw new IllegalArgumentException("Factory must not be null");
}
this.factory = factory;
}
 
//-----------------------------------------------------------------------
/**
* Decorate the get method to perform the lazy behaviour.
* <p>
* If the requested index is greater than the current size, the list will
* grow to the new size and a new object will be returned from the factory.
* Indexes in-between the old size and the requested size are left with a
* placeholder that is replaced with a factory object when requested.
*
* @param index the index to retrieve
*/
public Object get(int index) {
int size = getList().size();
if (index < size) {
// within bounds, get the object
Object object = getList().get(index);
if (object == null) {
// item is a place holder, create new one, set and return
object = factory.create();
getList().set(index, object);
return object;
} else {
// good and ready to go
return object;
}
} else {
// we have to grow the list
for (int i = size; i < index; i++) {
getList().add(null);
}
// create our last object, set and return
Object object = factory.create();
getList().add(object);
return object;
}
}
 
 
public List subList(int fromIndex, int toIndex) {
List sub = getList().subList(fromIndex, toIndex);
return new LazyList(sub, factory);
}
 
}
/impl/src/java/pt/estgp/estgweb/Globals.java
233,8 → 233,18
public static final boolean MODULE_STATUS_PROFILE = ConfigProperties.getBooleanProperty("module.profile");
public static final boolean MODULE_STATUS_COURSEUNITS = ConfigProperties.getBooleanProperty("module.courseunits");
public static final boolean MODULE_STATUS_SMS = ConfigProperties.getBooleanProperty("module.sms");
// Duarte Santos
public static final boolean MODULE_STATUS_SURVEYS = ConfigProperties.getBooleanProperty("module.surveys");
// Duarte Santos
public static final String SURVEY_TYPE_GENERAL = ConfigProperties.getProperty("surveys.type.0");
public static final String SURVEY_TYPE_PEDAGOGIC = ConfigProperties.getProperty("surveys.type.1");
public static final String SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT = ConfigProperties.getProperty("surveys.target.pair.0");
public static final String SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT = ConfigProperties.getProperty("surveys.target.pair.1");
public static final String SURVEY_QUESTION_TYPE_RADIO = ConfigProperties.getProperty("surveys.question.type.0");
public static final String SURVEY_QUESTION_TYPE_CHECK = ConfigProperties.getProperty("surveys.question.type.1");
public static final String SURVEY_QUESTION_TYPE_MATRIX = ConfigProperties.getProperty("surveys.question.type.2");
public static final String SURVEY_QUESTION_TYPE_TEXT = ConfigProperties.getProperty("surveys.question.type.3");
 
 
public static final String TEMPLATE_COURSE_XSL_PATH = "/template/xsd/fragmentoCurso.xsl";
public static final String TEMPLATE_XSD_PATH = "/template/xsd";
public static final String TEMPLATE_EMAIL_PATH = "/template/email";
/impl/src/java/pt/estgp/estgweb/services/surveys/ConsistSurveyService.java
New file
0,0 → 1,215
package pt.estgp.estgweb.services.surveys;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.MessageResources;
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.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-08-2011
* @time: 12:58
* @email: a12564 [at] estgp [dot] pt
*/
 
public class ConsistSurveyService implements IService, Runnable
{
private static final Logger logger = Logger.getLogger(ConsistSurveyService.class);
private static final int MAX_COMMIT = 100;
 
private long surveyId;
private HttpServletRequest request;
 
public void consistSurveyService(long surveyId, HttpServletRequest request, UserSession userSession)
{
if(surveyId <= 0) return;
 
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
if(survey != null)
{
ConsistSurveyService s = new ConsistSurveyService();
s.request = request;
s.surveyId = surveyId;
 
// start a thread
Thread thread = new Thread(s);
thread.start();
logger.info("Starting thread with id: "+thread.getId());
}
}
 
private synchronized SurveyImpl consistPedagogic(SurveyImpl survey)
{
String semester = survey.getSemester();
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester);
String importYear = survey.getYear();
List<String> areas = DaoFactory.getCourseDaoImpl().loadAreas();
 
SurveyStructuralNode nodeYear = survey.getStructuralNode();
SurveyStructuralNode nodeSemester = ((SurveyStructuralNodeImpl)nodeYear).getChildNode(semesterMsg);
 
List<SurveyResponse> responses = new ArrayList<SurveyResponse>();
for(String area : areas)
{
String areaMsg = MessageResources.getMessage(request,"area."+area);
SurveyStructuralNode nodeArea = ((SurveyStructuralNodeImpl)nodeSemester).getChildNode(areaMsg);
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(importYear,area);
for(Course course : courses)
{
SurveyStructuralNode nodeCourse = ((SurveyStructuralNodeImpl)nodeArea).getChildNode(course.getName());
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(course.getId(),semester,importYear,false,false);
for(CourseUnit courseUnit : courseUnits)
{
SurveyStructuralNode nodeCourseUnit = ((SurveyStructuralNodeImpl)nodeCourse).getChildNode(courseUnit.getName());
List<User> users = new ArrayList<User>();
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT))
{
users = new ArrayList<User>(courseUnit.getStudents());
}
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT))
{
users = new ArrayList<User>(courseUnit.getTeachers());
}
 
for(User user: users)
{
if(!((UserImpl)user).haveResponse(survey,nodeCourseUnit))
{
SurveyResponse sr = DomainObjectFactory.createSurveyResponseImpl();
sr.setAnswered(false);
sr.setOwner(user);
sr.setStructuralNode(nodeCourseUnit);
responses.add(sr);
}
}
}
}
}
 
if(responses.size() == 0)
{
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
survey.setStatusPercentage(100);
return survey;
}
 
long i = 0;
int status;
for(SurveyResponse r : responses)
{
long userId = r.getOwner().getId();
long nodeId = r.getStructuralNode().getId();
if(i++ % MAX_COMMIT == 0)
{
status = (int)(((double)i/(double)responses.size())*100);
survey.setStatusPercentage(status);
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
}
r.setOwner(DaoFactory.getUserDaoImpl().load(userId));
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId));
DaoFactory.getSurveyResponseDaoImpl().save(r);
}
survey.setStatusPercentage(100);
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
return survey;
}
 
private synchronized SurveyImpl consistGeneral(SurveyImpl survey)
{
List<String> roles = RoleManager.getRolesFromSerial(survey.getTargetRoles());
List<User> users = new ArrayList<User>();
if(roles.size() == 1 && roles.get(0).equals("all"))
users.addAll(DaoFactory.getUserDaoImpl().getAll());
else
users.addAll(DaoFactory.getUserDaoImpl().loadRolesUsers(roles));
 
List<SurveyStructuralNode> childNodes = ((SurveyStructuralNodeImpl)survey.getStructuralNode()).getChildsStructuralNodes();
 
List<SurveyResponse> responses = new ArrayList<SurveyResponse>();
for(SurveyStructuralNode node : childNodes)
{
for(User user : users)
{
if(!((UserImpl)user).haveResponse(survey,node))
{
SurveyResponse sr = DomainObjectFactory.createSurveyResponseImpl();
sr.setAnswered(false);
sr.setOwner(user);
sr.setStructuralNode(node);
responses.add(sr);
}
}
}
 
if(responses.size() == 0)
{
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
survey.setStatusPercentage(100);
return survey;
}
 
long i = 0;
int status;
for(SurveyResponse r : responses)
{
long userId = r.getOwner().getId();
long nodeId = r.getStructuralNode().getId();
 
if(i++ % MAX_COMMIT == 0)
{
status = (int)(((double)i/(double)responses.size())*100);
survey.setStatusPercentage(status);
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
}
r.setOwner(DaoFactory.getUserDaoImpl().load(userId));
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId));
DaoFactory.getSurveyResponseDaoImpl().save(r);
}
survey.setStatusPercentage(100);
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
return survey;
}
 
public void run()
{
logger.info("Running thread...");
AbstractDao.getCurrentSession().beginTransaction();
 
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
survey.setStatusPercentage(0);
survey.setStatus(SurveyStatusEnum.STATUS_CONSIST_SURVEY.getStatus());
 
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
 
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
 
if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_GENERAL))
{
logger.info("Consisting general survey...");
survey = consistGeneral(survey);
}
else if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC))
{
logger.info("Consisting pedagogic survey...");
survey = consistPedagogic(survey);
}
 
AbstractDao.getCurrentSession().getTransaction().commit();
logger.info("End of thread...");
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveysService.java
New file
0,0 → 1,61
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 03-08-2011
* @time: 17:13
* @email: a12564 [at] estgp [dot] pt
*/
 
public class LoadSurveysService implements IService
{
private static final Logger logger = Logger.getLogger(LoadSurveysService.class);
 
public List<SurveyView> run(UserSession userSession)
{
List<Survey> surveys = DaoFactory.getSurveyDaoImpl().loadAllSurveys();
List<SurveyView> surveyViews = new ArrayList<SurveyView>();
 
for(Survey s : surveys)
{
long nrOfResponsesAnswered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true);
long nrTotalOfResponses = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null);
SurveyView surveyView = new SurveyView(s);
surveyView.setNumberOfResponses(nrOfResponsesAnswered);
surveyView.setNumberTotalOfResponses(nrTotalOfResponses);
surveyViews.add(surveyView);
}
 
return surveyViews;
}
 
public List<SurveyView> loadOwnedSurveys(UserSession userSession)
{
List<Survey> surveys = DaoFactory.getSurveyDaoImpl().loadOwnedSurveys(userSession.getUser().getId());
List<SurveyView> surveyViews = new ArrayList<SurveyView>();
 
for(Survey s : surveys)
{
long nrOfResponsesAnswered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true);
long nrTotalOfResponses = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null);
SurveyView surveyView = new SurveyView(s);
surveyView.setNumberOfResponses(nrOfResponsesAnswered);
surveyView.setNumberTotalOfResponses(nrTotalOfResponses);
surveyViews.add(surveyView);
}
 
return surveyViews;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsCsvService.java
New file
0,0 → 1,159
package pt.estgp.estgweb.services.surveys;
 
import jomm.utils.FilesUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyResponse;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
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.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 15-08-2011
* @time: 13:22
* @email: a12564 [at] estgp [dot] pt
*/
 
public class GenerateSurveyStatsCsvService implements IService
{
private static final Logger logger = Logger.getLogger(GenerateSurveyStatsCsvService.class);
private static RepositoryService repositoryService = new RepositoryService();
 
public String run(long surveyId, UserSession userSession)
{
if(surveyId <= 0) return null;
 
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
if(survey != null)
{
try
{
String filename = Globals.TMP_DIR + "/survey_"+survey.getId()+".csv";
File file = new File(filename);
FileOutputStream fout = new FileOutputStream(file);
fout.write(239);
fout.write(187);
fout.write(191);
OutputStreamWriter writer = new OutputStreamWriter(fout, "UTF-8");
 
String[] csvHeader = {"IDResposta","IDQuestionário","Título do Questionário","IDPergunta","Pergunta","IDItem","Item","IDCandidata","Candidata","Resposta de Texto","IDUtilizador","Utilizador","Nós"};
writeCsvHeader(writer,csvHeader);
 
List list = DaoFactory.getSurveyQuestionAnswerDaoImpl().loadForCsv(survey.getId());
Iterator iter = list.iterator();
while(iter.hasNext())
{
Object[] objs = (Object[]) iter.next();
String[] values = new String[objs.length+1];
 
int i;
for(i = 0; i < objs.length; i++)
{
if(objs[i] != null)
values[i] = objs[i].toString();
else
values[i] = "";
}
 
long responseId = Long.parseLong(values[0]);
if(responseId > 0)
{
SurveyResponse r = DaoFactory.getSurveyResponseDaoImpl().load(responseId);
if(r != null)
{
List<String> nodeNames = getAllBackwardNodes(r.getStructuralNode());
String normalizeNodesNames = normalizeNodesNames(nodeNames);
values[i] = normalizeNodesNames;
}
}
writeCsvData(writer,values);
}
writer.flush();
writer.close();
 
String extension = FilesUtils.getExtension(filename);
FileInputStream inputStream = new FileInputStream(file);
String identifier = survey.getIdentifier();
 
if(identifier == null)
identifier = repositoryService.storeRepositoryFile(inputStream,"text/comma-separated-values",extension,(int)file.length(),file.getName(),"CSV file of survey: "+survey.getId(), ResourceAccessControlEnum.surveyStatsDomain,userSession);
else
repositoryService.updateRepositoryFile(identifier,inputStream,"text/comma-separated-values",extension,(int)file.length(),file.getName(),"CSV file of survey: "+survey.getId(),ResourceAccessControlEnum.surveyStatsDomain);
 
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
survey.setIdentifier(identifier);
 
boolean deleted = file.delete();
if(!deleted)
logger.info("Error deleting file: "+filename);
}
catch (IOException e)
{
logger.info(e);
}
}
 
return null;
}
 
private void writeCsvHeader(OutputStreamWriter writer, String[] values) throws IOException
{
writeCsvData(writer,values);
}
 
private void writeCsvData(OutputStreamWriter writer, String[] values) throws IOException
{
for(int i = 0; i < values.length; i++)
{
if(i > 0)
writer.write(";");
 
if(values[i] != null)
writer.write(values[i]);
}
writer.write("\n");
}
 
private void getAllBackwardNodesRecursive(List<String> msgs, SurveyStructuralNode node)
{
if(node != null)
{
msgs.add(node.getMsg());
getAllBackwardNodesRecursive(msgs,node.getParentNode());
}
}
 
private List<String> getAllBackwardNodes(SurveyStructuralNode leaf)
{
if(leaf != null)
{
List<String> msgs = new ArrayList<String>();
getAllBackwardNodesRecursive(msgs, leaf);
return msgs;
}
return null;
}
 
private String normalizeNodesNames(List<String> names)
{
String normalizedName = "";
for(int i=names.size()-1; i>=0; i--)
{
if(i < names.size()-1 && i >= 0)
normalizedName = normalizedName + "/";
normalizedName = normalizedName + names.get(i);
}
return normalizedName;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/InsertSurveyAnswersService.java
New file
0,0 → 1,63
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.*;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.Date;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 05-08-2011
* @time: 17:06
* @email: a12564 [at] estgp [dot] pt
*/
 
public class InsertSurveyAnswersService implements IService
{
private static final Logger logger = Logger.getLogger(InsertSurveyAnswersService.class);
 
private LoadSurveyService loadSurveyService = new LoadSurveyService();
 
public SurveyView run(long responseId, SurveyView surveyView, UserSession userSession)
{
SurveyResponse response = DaoFactory.getSurveyResponseDaoImpl().load(responseId);
 
if(response.isAnswered()) return null;
 
for(SurveyQuestionView qView : surveyView.getQuestions())
{
for(SurveyQuestionItemView iView : qView.getItems())
{
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
for(SurveyQuestionAnswerView aView : cView.getAnswers())
{
if(aView.getId() <= 0)
{
SurveyQuestionAnswerImpl a = DomainObjectFactory.createSurveyQuestionAnswerImpl();
aView.persistViewInObject(a);
 
SurveyQuestionCandidateAnswerImpl c = (SurveyQuestionCandidateAnswerImpl) DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().load(cView.getId());
 
a.setCandidateAnswer(c);
a.setResponse(response);
 
DaoFactory.getSurveyQuestionAnswerDaoImpl().save(a);
}
}
}
}
}
 
response.setDate(new Date());
response.setAnswered(true);
 
logger.info("Answer inserted to survey with id: "+surveyView.getId());
 
return loadSurveyService.run(surveyView.getId(), userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/SurveyStatusEnum.java
New file
0,0 → 1,51
package pt.estgp.estgweb.services.surveys;
 
/**
* @author: Duarte Santos
* @date: 13-08-2011
* @time: 12:51
* @email: a12564 [at] estgp [dot] pt
*/
 
public enum SurveyStatusEnum
{
STATUS_STOPPED("","STATUS_STOPPED"),
STATUS_CREATE_SURVEY("survey.list.form.status.create.survey","STATUS_CREATE_SURVEY"),
STATUS_CONSIST_SURVEY("survey.list.form.status.consist.survey","STATUS_CONSIST_SURVEY"),
STATUS_GENERATE_STATS("survey.list.form.status.generate.stats","STATUS_GENERATE_STATS");
 
private String messageKey;
private String status;
 
private SurveyStatusEnum(String messageKey, String status)
{
this.messageKey = messageKey;
this.status = status;
}
 
public String getMessageKey() {
return messageKey;
}
 
public void setMessageKey(String messageKey) {
this.messageKey = messageKey;
}
 
public String getStatus() {
return status;
}
 
public void setStatus(String status) {
this.status = status;
}
 
public static SurveyStatusEnum parse(String status)
{
for(SurveyStatusEnum statusEnum: values())
{
if(statusEnum.getStatus().equals(status))
return statusEnum;
}
return null;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/CreateEditSurveyService.java
New file
0,0 → 1,366
package pt.estgp.estgweb.services.surveys;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.MessageResources;
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.views.SurveyQuestionCandidateAnswerView;
import pt.estgp.estgweb.domain.views.SurveyQuestionItemView;
import pt.estgp.estgweb.domain.views.SurveyQuestionView;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 28-05-2011
* @time: 13:37
* @email: a12564 [at] estgp [dot] pt
*/
 
public class CreateEditSurveyService implements IService, Runnable
{
private static final Logger logger = Logger.getLogger(CreateEditSurveyService.class);
private static final int MAX_COMMIT = 100;
 
private long surveyId;
private HttpServletRequest request;
 
public SurveyView createEditSurveyService(SurveyView surveyView, HttpServletRequest request, UserSession userSession)
{
// Survey
SurveyImpl s;
if(surveyView.getId() <= 0)
{
s = DomainObjectFactory.createSurveyImpl();
surveyView.persistViewInObject(s);
s.setOwner(userSession.getUser());
s.setSemester(DatesUtils.getSemestre());
s.setYear(DatesUtils.getImportYear());
if(s.getStartDate() == null)
s.setStartDate(new Date());
s.setSaveDate(new Date());
s.setStatusPercentage(0);
s.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
DaoFactory.getSurveyDaoImpl().save(s);
logger.info("Creating survey with id: "+s.getId());
}
else
{
// delete questions, items, candidates
processDeletedObjects(surveyView);
s = DaoFactory.getSurveyDaoImpl().load(surveyView.getId());
surveyView.persistViewInObject(s);
logger.info("Editing survey with id: "+s.getId());
}
 
// SurveyQuestions
for(SurveyQuestionView questionView: surveyView.getQuestions())
{
SurveyQuestion q;
if(questionView.getId() <= 0)
{
q = DomainObjectFactory.createSurveyQuestionImpl();
questionView.persistViewInObject(q);
q.setSurvey(s);
DaoFactory.getSurveyQuestionDaoImpl().save(q);
}
else
{
q = DaoFactory.getSurveyQuestionDaoImpl().load(questionView.getId());
questionView.persistViewInObject(q);
}
 
// SurveyQuestionItems
for(SurveyQuestionItemView itemView: questionView.getItems())
{
SurveyQuestionItem qi;
if(itemView.getId() <= 0)
{
qi = DomainObjectFactory.createSurveyQuestionItemImpl();
itemView.persistViewInObject(qi);
qi.setQuestion(q);
DaoFactory.getSurveyQuestionItemDaoImpl().save(qi);
}
else
{
qi = DaoFactory.getSurveyQuestionItemDaoImpl().load(itemView.getId());
itemView.persistViewInObject(qi);
}
 
// SurveyQuestionCandidateAnswers
for(SurveyQuestionCandidateAnswerView candidateAnswerView: itemView.getCandidates())
{
SurveyQuestionCandidateAnswer ca;
if(candidateAnswerView.getId() <= 0)
{
ca = DomainObjectFactory.createSurveyQuestionCandidateAnswerImpl();
candidateAnswerView.persistViewInObject(ca);
ca.setQuestionItem(qi);
DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().save(ca);
}
else
{
ca = DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().load(candidateAnswerView.getId());
candidateAnswerView.persistViewInObject(ca);
}
}
}
}
 
SurveyView view = new SurveyView(s);
 
AbstractDao.getCurrentSession().flush();
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
// start a thread
if(surveyView.getId() <= 0)
{
CreateEditSurveyService service = new CreateEditSurveyService();
service.request = request;
service.surveyId = s.getId();
 
Thread thread = new Thread(service);
thread.start();
logger.info("Starting thread with id: "+thread.getId());
}
 
return view;
}
 
private void processDeletedObjects(SurveyView surveyView)
{
 
String deletedCandidatesIdsStr = surveyView.getDeletedCandidates();
if(deletedCandidatesIdsStr != null)
{
String[] deletedCandidatesIds = deletedCandidatesIdsStr.split(",");
for(String deletedCandidateId : deletedCandidatesIds)
{
if(deletedCandidateId.length() <= 0) continue;
long id = Long.parseLong(deletedCandidateId);
SurveyQuestionCandidateAnswerImpl ca = (SurveyQuestionCandidateAnswerImpl) DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().load(id);
DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().delete(ca);
}
}
 
String deletedItemsIdsStr = surveyView.getDeletedItems();
if(deletedItemsIdsStr != null)
{
String[] deletedItemsIds = deletedItemsIdsStr.split(",");
for(String deletedItemId : deletedItemsIds)
{
if(deletedItemId.length() <= 0) continue;
long id = Long.parseLong(deletedItemId);
SurveyQuestionItemImpl qi = (SurveyQuestionItemImpl) DaoFactory.getSurveyQuestionItemDaoImpl().load(id);
DaoFactory.getSurveyQuestionItemDaoImpl().delete(qi);
}
}
 
String deletedQuestionsIdsStr = surveyView.getDeletedQuestions();
if(deletedQuestionsIdsStr != null)
{
String[] deletedQuestionsIds = deletedQuestionsIdsStr.split(",");
for(String deletedQuestionId : deletedQuestionsIds)
{
if(deletedQuestionId.length() <= 0) continue;
long id = Long.parseLong(deletedQuestionId);
SurveyQuestionImpl q = (SurveyQuestionImpl) DaoFactory.getSurveyQuestionDaoImpl().load(id);
DaoFactory.getSurveyQuestionDaoImpl().delete(q);
}
}
}
 
private synchronized SurveyImpl createPedagogicResponses(SurveyImpl survey)
{
String semester = survey.getSemester();
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester);
String importYear = survey.getYear();
List<String> areas = DaoFactory.getCourseDaoImpl().loadAreas();
 
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null);
survey.setStructuralNode(nodeYear);
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semesterMsg,nodeYear);
 
List<SurveyResponse> responses = new ArrayList<SurveyResponse>();
for(String area : areas)
{
String areaMsg = MessageResources.getMessage(request,"area."+area);
SurveyStructuralNodeImpl nodeArea = createSurveyStructuralNodeTree(survey,areaMsg,nodeSemester);
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(importYear,area);
for(Course course : courses)
{
SurveyStructuralNodeImpl nodeCourse = createSurveyStructuralNodeTree(survey,course.getName(),nodeArea);
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(course.getId(),semester,importYear,false,false);
for(CourseUnit courseUnit: courseUnits)
{
SurveyStructuralNodeImpl nodeCourseUnit = createSurveyStructuralNodeTree(survey,courseUnit.getName(),nodeCourse);
 
List<User> users = new ArrayList<User>();
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT))
{
users = new ArrayList<User>(courseUnit.getStudents());
}
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT))
{
users = new ArrayList<User>(courseUnit.getTeachers());
}
 
for(User user : users)
{
SurveyResponse sr = DomainObjectFactory.createSurveyResponseImpl();
sr.setAnswered(false);
sr.setOwner(user);
sr.setStructuralNode(nodeCourseUnit);
responses.add(sr);
}
}
}
}
 
if(responses.size() == 0)
{
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
survey.setStatusPercentage(100);
return survey;
}
 
long i = 0;
int status;
for(SurveyResponse r : responses)
{
long userId = r.getOwner().getId();
long nodeId = r.getStructuralNode().getId();
 
if (i++ % MAX_COMMIT == 0)
{
status = (int)(((double)i/(double)responses.size())*100);
survey.setStatusPercentage(status);
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
}
r.setOwner(DaoFactory.getUserDaoImpl().load(userId));
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId));
DaoFactory.getSurveyResponseDaoImpl().save(r);
}
survey.setStatusPercentage(100);
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
 
return survey;
}
 
private synchronized SurveyImpl createGeneralResponses(SurveyImpl survey)
{
String importYear = survey.getYear();
String semester = survey.getSemester();
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester);
List<String> roles = RoleManager.getRolesFromSerial(survey.getTargetRoles());
List<User> users = new ArrayList<User>();
 
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null);
survey.setStructuralNode(nodeYear);
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semesterMsg,nodeYear);
SurveyStructuralNodeImpl nodeGeneral = createSurveyStructuralNodeTree(survey,survey.getTitle(),nodeSemester);
 
if(roles.size() == 1 && roles.get(0).equals("all"))
users.addAll(DaoFactory.getUserDaoImpl().getAll());
else
users.addAll(DaoFactory.getUserDaoImpl().loadRolesUsers(roles));
 
List<SurveyResponse> responses = new ArrayList<SurveyResponse>();
for(User user : users)
{
SurveyResponse sr = DomainObjectFactory.createSurveyResponseImpl();
sr.setAnswered(false);
sr.setOwner(user);
sr.setStructuralNode(nodeGeneral);
responses.add(sr);
}
 
if(responses.size() == 0)
{
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
survey.setStatusPercentage(100);
return survey;
}
 
long i = 0;
int status;
for(SurveyResponse r : responses)
{
long userId = r.getOwner().getId();
long nodeId = r.getStructuralNode().getId();
 
if (i++ % MAX_COMMIT == 0)
{
status = (int)(((double)i/(double)responses.size())*100);
survey.setStatusPercentage(status);
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
}
r.setOwner(DaoFactory.getUserDaoImpl().load(userId));
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId));
DaoFactory.getSurveyResponseDaoImpl().save(r);
}
survey.setStatusPercentage(100);
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
 
return survey;
}
 
private synchronized SurveyStructuralNodeImpl createSurveyStructuralNodeTree(Survey survey, String msg, SurveyStructuralNodeImpl parent)
{
SurveyStructuralNodeImpl child = DomainObjectFactory.createSurveyStructuralNodeImpl();
if(parent != null)
{
parent = (SurveyStructuralNodeImpl) DaoFactory.getSurveyStructuralNodeDaoImpl().load(parent.getId());
parent.getNodes().add(child);
}
child.setMsg(msg);
child.setSurvey(survey);
child.setParentNode(parent);
DaoFactory.getSurveyStructuralNodeDaoImpl().save(child);
return child;
}
 
public void run()
{
logger.info("Running thread...");
AbstractDao.getCurrentSession().beginTransaction();
 
logger.info("Loading survey with id: "+surveyId);
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
 
survey.setStatusPercentage(0);
survey.setStatus(SurveyStatusEnum.STATUS_CREATE_SURVEY.getStatus());
 
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
 
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
 
if(survey.isTypeOf(Globals.SURVEY_TYPE_GENERAL))
{
logger.info("Creating general responses...");
survey = createGeneralResponses(survey);
}
else if(survey.isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC))
{
logger.info("Creating pedagogic responses...");
survey = createPedagogicResponses(survey);
}
 
AbstractDao.getCurrentSession().getTransaction().commit();
logger.info("End of thread...");
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsService.java
New file
0,0 → 1,259
package pt.estgp.estgweb.services.surveys;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.FilesUtils;
import jomm.utils.MessageResources;
import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.text.TextBlockAnchor;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.TextAnchor;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.utils.ConfigProperties;
 
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 10-08-2011
* @time: 17:38
* @email: a12564 [at] estgp [dot] pt
*/
 
public class GenerateSurveyStatsService implements IService, Runnable
{
private static final Logger logger = Logger.getLogger(GenerateSurveyStatsService.class);
private static final int MAX_COMMIT = 100;
private static RepositoryService repositoryService = new RepositoryService();
 
private long surveyId;
private HttpServletRequest request;
private UserSession userSession;
 
public void generateStatsService(long surveyId, HttpServletRequest request, UserSession userSession)
{
if(surveyId <= 0) return;
 
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
if(survey != null)
{
GenerateSurveyStatsService s = new GenerateSurveyStatsService();
s.request = request;
s.surveyId = surveyId;
s.userSession = userSession;
 
// start a thread
Thread thread = new Thread(s);
thread.start();
logger.info("Starting thread with id: "+thread.getId());
}
}
 
private synchronized JFreeChart buildChart(HttpServletRequest request, SurveyQuestion q, SurveyStructuralNode node, UserSession userSession, boolean withCategories)
{
// get counted values and labels
List<Integer> countedValues = new ArrayList<Integer>();
String itemLabels = "";
String candidateLabels = "";
for(SurveyQuestionItem qi : q.getQuestionItems())
{
for(SurveyQuestionCandidateAnswer ca : qi.getCandidadeAnswers())
{
int count = DaoFactory.getSurveyQuestionAnswerDaoImpl().countAnswers(ca.getId(), node.getId());
countedValues.add(count);
candidateLabels = candidateLabels + ca.getLabelpt() + ",";
}
itemLabels = itemLabels + qi.getLabelpt() + ",";
}
String[] categories = itemLabels.split(",");
String[] series = candidateLabels.split(",");
int[] values = new int[countedValues.size()];
for(int i=0; i<countedValues.size(); i++)
values[i] = countedValues.get(i);
 
// create chart
String domainAxisLabel = MessageResources.getMessage(request,"survey.stats.graph.axis.domain.label");
PlotOrientation orientation = PlotOrientation.HORIZONTAL;
if(!withCategories)
{
categories = null;
domainAxisLabel = "";
orientation = PlotOrientation.VERTICAL;
}
 
CategoryDataset dataset = buildCategoryDataset(categories,series,values);
JFreeChart chart = buildJFreeChart(q.getLabelpt(),domainAxisLabel,MessageResources.getMessage(request,"survey.stats.graph.axis.range.label"),dataset,orientation);
 
// chart configs
final CategoryPlot plot = chart.getCategoryPlot();
final ValueAxis valueAxis = plot.getRangeAxis();
final CategoryAxis categoryAxis = plot.getDomainAxis();
final CategoryLabelPositions positions = categoryAxis.getCategoryLabelPositions();
Font font = new Font("Tahoma",Font.PLAIN, 11);
categoryAxis.setMaximumCategoryLabelLines(3);
categoryAxis.setTickLabelFont(font);
CategoryLabelPosition right = new CategoryLabelPosition(RectangleAnchor.RIGHT, TextBlockAnchor.CENTER_RIGHT);
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.replaceRightPosition(positions, right));
 
return chart;
}
 
public synchronized String storeChartRepository(JFreeChart chart, String filename, String description, String identifier, UserSession userSession)
{
try
{
File file = new File(Globals.TMP_DIR + filename);
String extension = FilesUtils.getExtension(filename);
ChartUtilities.saveChartAsPNG(file, chart,
ConfigProperties.getIntProperty("surveys.stats.graph.img.width"),
ConfigProperties.getIntProperty("surveys.stats.graph.img.height"));
FileInputStream inputStream = new FileInputStream(file);
 
if(identifier == null)
identifier = repositoryService.storeRepositoryFile(inputStream,"image/png",extension,(int)file.length(),file.getName(),description,ResourceAccessControlEnum.surveyStatsDomain,userSession);
else
repositoryService.updateRepositoryFile(identifier,inputStream,"image/png",extension,(int)file.length(),file.getName(),description,ResourceAccessControlEnum.surveyStatsDomain);
 
boolean deleted = file.delete();
if(!deleted)
logger.info("Error deleting file: "+filename);
}
catch (IOException e)
{
logger.info(e);
}
return identifier;
}
 
public synchronized JFreeChart buildJFreeChart(String chartTitle,String domainAxisLabel,String rangeAxisLabel,CategoryDataset dataset,PlotOrientation orientation)
{
JFreeChart chart = ChartFactory.createBarChart(chartTitle,domainAxisLabel,rangeAxisLabel,dataset,orientation,true,true,false);
CategoryPlot plot = chart.getCategoryPlot();
plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return chart;
}
 
public synchronized CategoryDataset buildCategoryDataset(String[] categories, String[] series, int[] values)
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
int k = 0;
int serLen = series.length;
if(categories != null)
{
int j = 0;
int catLen = categories.length;
for(int i = 0; i < series.length; i++)
{
if(i != 0 && i%(serLen/catLen) == 0)
j++;
dataset.addValue(values[k++], series[i], categories[j]);
}
}
else
{
for(String serie : series)
dataset.addValue(values[k++], serie, "");
}
return dataset;
}
 
public void run()
{
logger.info("Running thread...");
AbstractDao.getCurrentSession().beginTransaction();
 
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
 
survey.setStatusPercentage(0);
survey.setStatus(SurveyStatusEnum.STATUS_GENERATE_STATS.getStatus());
 
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
 
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
 
GenerateSurveyStatsCsvService service = new GenerateSurveyStatsCsvService();
service.run(surveyId,userSession);
 
List<SurveyStructuralNode> childNodes = ((SurveyStructuralNodeImpl)survey.getStructuralNode()).getChildsStructuralNodes();
 
long total = childNodes.size() * survey.getQuestions().size();
long i = 0;
int status;
for(SurveyStructuralNode node : childNodes)
{
for(SurveyQuestion question : survey.getQuestions())
{
long nodeId = node.getId();
long questionId = question.getId();
 
if (i++ % MAX_COMMIT == 0)
{
status = (int)(((double)i/(double)total)*100);
survey.setStatusPercentage(status);
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
survey = DaoFactory.getSurveyDaoImpl().load(surveyId);
}
node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId);
question = DaoFactory.getSurveyQuestionDaoImpl().load(questionId);
 
JFreeChart chart = null;
if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
chart = buildChart(request, question, node, userSession, true);
else if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) || question.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO))
chart = buildChart(request, question, node, userSession, false);
 
if(chart != null)
{
node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId);
question = DaoFactory.getSurveyQuestionDaoImpl().load(questionId);
String identifier;
String filename = "/survey_"+surveyId+"_question_"+question.getId()+"_node_"+node.getId()+".png";
SurveyStatsGraphic graph = DaoFactory.getSurveyStatsGraphicDaoImpl().load(question.getId(),node.getId());
if(graph == null)
{
identifier = storeChartRepository(chart,filename,"descricao",null,userSession);
if(identifier != null)
{
graph = DomainObjectFactory.createSurveyStatsGraphicImpl();
graph.setQuestion(question);
graph.setStructuralNode(node);
graph.setIdentifier(identifier);
DaoFactory.getSurveyStatsGraphicDaoImpl().save(graph);
}
}
else
{
identifier = graph.getIdentifier();
storeChartRepository(chart,filename,"descricao",identifier,userSession);
}
}
}
}
 
survey.setStatusPercentage(100);
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus());
 
AbstractDao.getCurrentSession().getTransaction().commit();
logger.info("End of thread...");
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadConsultStatsSurveysService.java
New file
0,0 → 1,34
package pt.estgp.estgweb.services.surveys;
 
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.estgp.estgweb.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 17-08-2011
* @time: 0:53
* @email: a12564 [at] estgp [dot] pt
*/
 
public class LoadConsultStatsSurveysService implements IService
{
public List<SurveyView> run(UserSession userSession)
{
List<Survey> surveys = DaoFactory.getSurveyDaoImpl().loadAllSurveys();
List<SurveyView> surveyViews = new ArrayList<SurveyView>();
for(Survey s : surveys)
{
List<String> statsConsultRolesList = RoleManager.getRolesFromSerial(s.getStatsConsultRoles());
if(s.isOwnedBy(userSession.getUser()) || statsConsultRolesList.contains("all") || userSession.getUser().hasRole(statsConsultRolesList) || userSession.getUser().isSuperuserOrAdmin())
surveyViews.add(new SurveyView(s));
}
return surveyViews;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveyNodeGraphsService.java
New file
0,0 → 1,44
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyStatsGraphic;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyStatsGraphicView;
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 13-08-2011
* @time: 1:43
* @email: a12564 [at] estgp [dot] pt
*/
 
public class LoadSurveyNodeGraphsService implements IService
{
private static final Logger logger = Logger.getLogger(LoadSurveyNodeGraphsService.class);
 
public List<SurveyStatsGraphicView> run(long surveyId, long nodeId, UserSession userSession)
{
SurveyStructuralNode node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId);
 
if(node != null)
{
List<SurveyStatsGraphicView> surveyStatsGraphicViews = new ArrayList<SurveyStatsGraphicView>();
for(SurveyStatsGraphic g : node.getGraphics())
{
SurveyStructuralNodeView nodeView = new SurveyStructuralNodeView(g.getStructuralNode());
SurveyStatsGraphicView surveyStatsGraphicView = new SurveyStatsGraphicView(g);
surveyStatsGraphicView.setStructuralNodeView(nodeView);
surveyStatsGraphicViews.add(surveyStatsGraphicView);
}
return surveyStatsGraphicViews;
}
return null;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveyResponseService.java
New file
0,0 → 1,44
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyResponse;
import pt.estgp.estgweb.domain.SurveyResponseImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyResponseView;
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.Serializable;
 
/**
* @author: Duarte Santos
* @date: 04-08-2011
* @time: 15:08
* @email: a12564 [at] estgp [dot] pt
*/
 
public class LoadSurveyResponseService implements IService
{
private static final Logger logger = Logger.getLogger(LoadSurveyResponseService.class);
 
public SurveyResponseView run(Serializable id, UserSession userSession)
{
SurveyResponse r = DaoFactory.getSurveyResponseDaoImpl().load(id);
Survey s = DaoFactory.getSurveyDaoImpl().load(r.getStructuralNode().getSurvey().getId());
 
SurveyView surveyView = new SurveyView(s);
 
SurveyStructuralNodeView surveyStructuralNodeView = new SurveyStructuralNodeView(r.getStructuralNode());
surveyStructuralNodeView.setSurveyView(surveyView);
 
SurveyResponseView surveyResponseView = new SurveyResponseView(r);
surveyResponseView.setStructuralNodeView(surveyStructuralNodeView);
 
logger.info("Loading survey response view: " + surveyResponseView.getId());
return surveyResponseView;
}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/SurveysCommonServices.java
New file
0,0 → 1,74
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.DomainObject;
import pt.estgp.estgweb.domain.SurveyResponseImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.*;
import pt.estgp.estgweb.services.common.impl.DefaultToDo;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 04-08-2011
* @time: 0:23
* @email: a12564 [at] estgp [dot] pt
*/
public class SurveysCommonServices extends SingleSearchResults implements IService, IModuleCommonServices
{
private static final Logger logger = Logger.getLogger(SurveysCommonServices.class);
 
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession)
{
return 0;
}
 
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
return search(null,search,searchType,page,maxResults,userSession);
}
 
public ISearchResults search(String from, String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
return null;
}
 
public int countToDo(UserSession userSession)
{
return 0;
}
 
public IToDoCat getToDo(UserSession userSession)
{
return null;
}
 
public List<IToDo> getAllToDos(UserSession userSession)
{
 
 
List<IToDo> todos = new ArrayList<IToDo>();
if(Globals.MODULE_STATUS_SURVEYS){
List<SurveyResponseImpl> surveyResponses = DaoFactory.getSurveyResponseDaoImpl().loadByUserId(userSession.getUser().getId());
for(SurveyResponseImpl sr: surveyResponses)
{
String surveyOwner = sr.getStructuralNode().getSurvey().getOwner().getUsername();
DefaultToDo defaultToDo = new DefaultToDo(sr.getStructuralNode().getMsg(),null,surveyOwner,"survey.type.todo","/user/startSurveyResponseFromHome.do?resp="+sr.getId());
todos.add(defaultToDo);
}
}
 
return todos;
}
 
public void adviseNew(DomainObject object)
{}
 
public void adviseUpdate(DomainObject object)
{}
}
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveyService.java
New file
0,0 → 1,46
package pt.estgp.estgweb.services.surveys;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyImpl;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.SurveyStatsGraphicView;
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView;
import pt.estgp.estgweb.domain.views.SurveyView;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.Serializable;
 
/**
* @author: Duarte Santos
* @date: 07-06-2011
* @time: 11:04
* @email: a12564 [at] estgp [dot] pt
*/
 
public class LoadSurveyService implements IService
{
private static final Logger logger = Logger.getLogger(LoadSurveyService.class);
 
public SurveyView run(long surveyId, UserSession userSession)
{
Survey s = DaoFactory.getSurveyDaoImpl().get(surveyId);
 
if(s == null) return null;
 
long answered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true);
long total = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null);
 
SurveyStructuralNodeView surveyStructuralNodeView = new SurveyStructuralNodeView(s.getStructuralNode());
SurveyView surveyView = new SurveyView(s);
surveyView.setStructuralNodeView(surveyStructuralNodeView);
surveyView.setNumberOfResponses(answered);
surveyView.setNumberTotalOfResponses(total);
 
return surveyView;
}
}
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesCommonServices.java
1,18 → 1,21
package pt.estgp.estgweb.services.courses;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.DomainObject;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.*;
import pt.estgp.estgweb.services.common.impl.DefaultResult;
import pt.estgp.estgweb.services.common.impl.DefaultSearchResults;
import pt.estgp.estgweb.services.common.impl.DefaultResult;
import pt.estgp.estgweb.services.common.impl.DefaultToDo;
import pt.estgp.estgweb.services.courseunits.CourseUnitsCommonServices;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import org.apache.log4j.Logger;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.*;
import java.util.ArrayList;
import java.util.List;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
59,7 → 62,7
defaultResult.setTitle(course.getName());
defaultResult.setText(course.getDescription());
if (from == null)
defaultResult.setUrl("/startLoadCourse.do?courseView.id=" + course.getId());
defaultResult.setUrl("/startLoadCourseSeparators.do?courseView.id=" + course.getId());
else
defaultResult.setUrl("/user/startLoadCourseFrom" + from + ".do?courseView.id=" + course.getId());
searchResults.addResult(defaultResult);
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
204,7 → 204,7
public List<CourseView> loadCoursesImportYearByType(String type) throws ServiceException
{
String importYearIntranet = DatesUtils.getImportYear();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYearIntranet,null,type);
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByNameEvenWithoutCourseUnit(importYearIntranet,null,type);
List<CourseView> courseViews = new ArrayList<CourseView>();
for(Course c: courses)
{
/impl/src/java/pt/estgp/estgweb/services/email/EMAILJob.java
1,18 → 1,15
package pt.estgp.estgweb.services.email;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.jobs.JobHandler;
import pt.estgp.estgweb.services.sms.SMSJob;
import pt.estgp.estgweb.services.sms.SmsService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.utils.Email;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.apache.log4j.Logger;
import jomm.utils.TemplateUtils;
 
/**
* @author Jorge Machado
* @date 11/Jul/2008
38,7 → 35,36
{
try
{
new SendEmailService().sendEmail(email);
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>();
 
int contador = 0;
Iterator<String> iter = recipients.iterator();
while(iter.hasNext() && contador < 20)
{
recipientsToSend.add(iter.next());
iter.remove();
contador++;
}
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)
{
/impl/src/java/pt/estgp/estgweb/services/common/ModuleEnum.java
10,6 → 10,7
import pt.estgp.estgweb.services.courses.CoursesCommonServices;
import pt.estgp.estgweb.services.profile.ProfileCommonServices;
import pt.estgp.estgweb.services.srusources.SruSourcesCommonServices;
import pt.estgp.estgweb.services.surveys.SurveysCommonServices;
 
/**
* @author Jorge Machado
31,7 → 32,9
Courses("module.Courses", new CoursesCommonServices()),
Profile("module.Profile", new ProfileCommonServices()),
// Questionarios("module.Qustionarios", new QuestionariosCommonServices());
SruSource("module.SruSource", new SruSourcesCommonServices());
SruSource("module.SruSource", new SruSourcesCommonServices()),
// Duarte Santos
Surveys("module.Surveys", new SurveysCommonServices());
 
// Events("module.Events",null),
// Blogs("module.Blogs",null),
/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java
33,6 → 33,7
JobRunner jobRunner = new JobRunner((JobHandler) j.getJobHandler());
jobRunner.run();
j.setExecuted(true);
Thread.sleep(2000);
}
AbstractDao.getCurrentSession().getTransaction().commit();
Thread.sleep(Globals.JOB_DEAMON_SLEEP_SECONDS*1000);
/impl/src/java/pt/estgp/estgweb/services/urlstat/UrlStatService.java
67,52 → 67,59
UrlStatYearId urlStatYearId = new UrlStatYearId();
urlStatYearId.setUrlStat(urlStat);
urlStatYearId.setYear(year);
UrlStatYearImpl urlStatYear = (UrlStatYearImpl) DaoFactory.getUrlStatYearDaoImpl().loadOrNullLockUpgrade(urlStatYearId);
if (urlStatYear == null)
{
logger.info("url:" + urlStat.getName() + " first year call does not exist... creating");
urlStatYear = DomainObjectFactory.createUrlStatYearImpl();
urlStatYear.setId(urlStatYearId);
urlStat.addYear(urlStatYear);
DaoFactory.getUrlStatYearDaoImpl().save(urlStatYear);
DaoFactory.getUrlStatDaoImpl().reattach(urlStat);
}
try{
UrlStatYearImpl urlStatYear = (UrlStatYearImpl) DaoFactory.getUrlStatYearDaoImpl().loadOrNullLockUpgrade(urlStatYearId);
if (urlStatYear == null)
{
logger.info("url:" + urlStat.getName() + " first year call does not exist... creating");
urlStatYear = DomainObjectFactory.createUrlStatYearImpl();
urlStatYear.setId(urlStatYearId);
urlStat.addYear(urlStatYear);
DaoFactory.getUrlStatYearDaoImpl().save(urlStatYear);
DaoFactory.getUrlStatDaoImpl().reattach(urlStat);
}
 
UrlStatMonthId urlStatMonthId = new UrlStatMonthId();
urlStatMonthId.setMonth(month);
urlStatMonthId.setUrlStatYear(urlStatYear);
UrlStatMonthImpl urlStatMonth = (UrlStatMonthImpl) DaoFactory.getUrlStatMonthDaoImpl().loadOrNullLockUpgrade(urlStatMonthId);
if (urlStatMonth == null)
{
logger.info("url:" + urlStat.getName() + " first month call does not exist... creating");
urlStatMonth = DomainObjectFactory.createUrlStatMonthImpl();
urlStatMonth.setId(urlStatMonthId);
urlStatMonth.setDate(new MyCalendar(year, month, 1).getTime());
urlStatYear.addMonth(urlStatMonth);
DaoFactory.getUrlStatMonthDaoImpl().save(urlStatMonth);
DaoFactory.getUrlStatYearDaoImpl().reattach(urlStatYear);
UrlStatMonthId urlStatMonthId = new UrlStatMonthId();
urlStatMonthId.setMonth(month);
urlStatMonthId.setUrlStatYear(urlStatYear);
UrlStatMonthImpl urlStatMonth = (UrlStatMonthImpl) DaoFactory.getUrlStatMonthDaoImpl().loadOrNullLockUpgrade(urlStatMonthId);
if (urlStatMonth == null)
{
logger.info("url:" + urlStat.getName() + " first month call does not exist... creating");
urlStatMonth = DomainObjectFactory.createUrlStatMonthImpl();
urlStatMonth.setId(urlStatMonthId);
urlStatMonth.setDate(new MyCalendar(year, month, 1).getTime());
urlStatYear.addMonth(urlStatMonth);
DaoFactory.getUrlStatMonthDaoImpl().save(urlStatMonth);
DaoFactory.getUrlStatYearDaoImpl().reattach(urlStatYear);
}
UrlStatDayId urlStatDayId = new UrlStatDayId();
urlStatDayId.setDay(day);
urlStatDayId.setUrlStatMonth(urlStatMonth);
UrlStatDayImpl urlStatDay = (UrlStatDayImpl) DaoFactory.getUrlStatDayDaoImpl().loadOrNullLockUpgrade(urlStatDayId);
if (urlStatDay == null)
{
logger.info("url:" + urlStat.getName() + " first day call does not exist... creating");
urlStatDay = DomainObjectFactory.createUrlStatDayImpl();
UrlStatDayId urlStatDayId2 = new UrlStatDayId();
urlStatDayId2.setDay(day);
urlStatDayId2.setUrlStatMonth(urlStatMonth);
urlStatDay.setId(urlStatDayId2);
urlStatDay.setDate(new MyCalendar(year, month, day).getTime());
urlStatMonth.addDay(urlStatDay);
DaoFactory.getUrlStatDayDaoImpl().save(urlStatDay);
}
 
urlStat.setTotalClicks(urlStat.getTotalClicks() + ic.getCount());
urlStatDay.setTotalClicks(urlStatDay.getTotalClicks() + ic.getCount());
urlStatMonth.setTotalClicks(urlStatMonth.getTotalClicks() + ic.getCount());
urlStatYear.setTotalClicks(urlStatYear.getTotalClicks() + ic.getCount());
}
UrlStatDayId urlStatDayId = new UrlStatDayId();
urlStatDayId.setDay(day);
urlStatDayId.setUrlStatMonth(urlStatMonth);
UrlStatDayImpl urlStatDay = (UrlStatDayImpl) DaoFactory.getUrlStatDayDaoImpl().loadOrNullLockUpgrade(urlStatDayId);
if (urlStatDay == null)
catch(Throwable e)
{
logger.info("url:" + urlStat.getName() + " first day call does not exist... creating");
urlStatDay = DomainObjectFactory.createUrlStatDayImpl();
UrlStatDayId urlStatDayId2 = new UrlStatDayId();
urlStatDayId2.setDay(day);
urlStatDayId2.setUrlStatMonth(urlStatMonth);
urlStatDay.setId(urlStatDayId2);
urlStatDay.setDate(new MyCalendar(year, month, day).getTime());
urlStatMonth.addDay(urlStatDay);
DaoFactory.getUrlStatDayDaoImpl().save(urlStatDay);
logger.error("Found error loading URLStat, ignoring error");
logger.error(e,e);
}
 
urlStat.setTotalClicks(urlStat.getTotalClicks() + ic.getCount());
urlStatDay.setTotalClicks(urlStatDay.getTotalClicks() + ic.getCount());
urlStatMonth.setTotalClicks(urlStatMonth.getTotalClicks() + ic.getCount());
urlStatYear.setTotalClicks(urlStatYear.getTotalClicks() + ic.getCount());
}
}
 
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java
1,29 → 1,27
package pt.estgp.estgweb.services.announcements;
 
import org.apache.log4j.Logger;
import org.apache.struts.util.MessageResources;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.sms.SMSJob;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.data.ImageManager;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.services.data.ImageManager;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.sms.SMSJob;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.RoleManager;
import pt.estgp.estgweb.utils.Email;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
 
/**
* @author Fabio Velez
90,18 → 88,32
public List<UserView> sendMessage(HttpServletRequest request, String from, String year, String department, long courseId, long courseUnitId, String semestre, MessageTarget target, String text,String subject, UserSession userSession)
{
List<User> users = DaoFactory.getAnnouncementDaoImpl().findUsers(year,department,courseId,courseUnitId,semestre,target);
 
Email e = sendEmailService.getMessageEmail(
jomm.utils.MessageResources.getMessage(request,"user.role." + from),
subject,
text,
LangEnum.PORTUGUESE,
jomm.utils.MessageResources.getMessage(request,"submit.todo.message." + target.getTarget()),
users,
userSession.getUser());
e.setHtml(true);
EMAILJob emailJob = new EMAILJob(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email from " + userSession.getUsername() + " as " + from + ": year:" + year + " - department:" + department + " - courseId:" + courseId + " - courseUnitId:" + courseUnitId + " - semestre:" + semestre + " - target:" + target + " - subject:" + subject ,userSession);
List<User> usersToConsume = new ArrayList<User>();
for(User u: users)
usersToConsume.add(u);
while(usersToConsume.size() > 0)
{
Iterator<User> iter = usersToConsume.iterator();
List<User> usersToJob = new ArrayList<User>();
int contador = 0;
while(iter.hasNext() && contador < 20)
{
usersToJob.add(iter.next());
iter.remove();
contador++;
}
Email e = sendEmailService.getMessageEmail(
jomm.utils.MessageResources.getMessage(request,"user.role." + from),
subject,
text,
LangEnum.PORTUGUESE,
jomm.utils.MessageResources.getMessage(request,"submit.todo.message." + target.getTarget()),
usersToJob,
userSession.getUser());
e.setHtml(true);
EMAILJob emailJob = new EMAILJob(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email from " + userSession.getUsername() + " as " + from + ": year:" + year + " - department:" + department + " - courseId:" + courseId + " - courseUnitId:" + courseUnitId + " - semestre:" + semestre + " - target:" + target + " - subject:" + subject ,userSession);
}
List<UserView> userViews = UserView.getViews(users);
return userViews;
}
/impl/src/java/pt/estgp/estgweb/services/authenticate/AuthenticateService.java
43,6 → 43,8
if(userSession.getUser() != null)
throw new AuthenticateException(AuthenticateException.ALREADY_AUTHENTICATED);
 
if(username == null || username.trim().length() == 0 || password == null || password.trim().length() == 0)
throw new AuthenticateException(AuthenticateException.FAIL_AUTHENTICATION);
boolean go = false;
if(USE_LDAP)
go = ldapManager.login(username,password);
/impl/src/java/pt/estgp/estgweb/domain/SurveyImpl.java
New file
0,0 → 1,102
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:10
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyImpl extends Survey implements IOwned, IConsultSurveyStats, IEdit
{
private static final Logger logger = Logger.getLogger(SurveyImpl.class);
 
@Override
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u,false);
}
 
@Override
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u.getId() == getOwner().getId();
}
 
@Override
public GenericUser getOwner()
{
return super.getOwner();
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
 
public boolean isTypeOf(String type)
{
return (getType().equals(type));
}
 
public boolean canConsultSurveyStats(GenericUserImpl u)
{
return canConsultStats(u,false);
}
 
public boolean canConsultSurveyStats(GenericUserImpl u, boolean transaction)
{
return canConsultStats(u,transaction);
}
 
public boolean canConsultStats(GenericUserImpl user, boolean transaction)
{
return RoleManager.hasRole(getStatsConsultRolesList(), Globals.ALL_ROLE) || (user != null && (user.hasRole(getStatsConsultRoles()) || user.isSuperuserOrAdmin())) || isOwnedBy(user,transaction);
}
 
public List<String> getStatsConsultRolesList()
{
return RoleManager.getRolesFromSerial(getStatsConsultRoles());
}
 
public boolean canEdit(GenericUserImpl u)
{
return canEditSurvey(u,false);
}
 
public boolean canEdit(GenericUserImpl u,boolean transaction)
{
return canEditSurvey(u,true);
}
 
private boolean canEditSurvey(GenericUserImpl user, boolean transaction)
{
List<SurveyStructuralNode> childNodes = ((SurveyStructuralNodeImpl)getStructuralNode()).getChildsStructuralNodes();
for(SurveyStructuralNode node : childNodes)
{
for(SurveyResponse response : node.getResponses())
{
return response.getAnswers().size() > 0 && user != null && (user.isSuperuserOrAdmin() || isOwnedBy(user,transaction));
}
}
return false;
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyQuestionCandidateAnswerImpl.java
New file
0,0 → 1,39
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:41
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionCandidateAnswerImpl extends SurveyQuestionCandidateAnswer
{
private static final Logger logger = Logger.getLogger(SurveyQuestionCandidateAnswerImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/domain/IConsultSurveyStats.java
New file
0,0 → 1,14
package pt.estgp.estgweb.domain;
 
/**
* @author: Duarte Santos
* @date: 16-08-2011
* @time: 20:19
* @email: a12564 [at] estgp [dot] pt
*/
 
public interface IConsultSurveyStats
{
public boolean canConsultSurveyStats(GenericUserImpl u);
public boolean canConsultSurveyStats(GenericUserImpl u, boolean transaction);
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyResponseImpl.java
New file
0,0 → 1,55
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:40
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyResponseImpl extends SurveyResponse implements IOwned
{
private static final Logger logger = Logger.getLogger(SurveyResponseImpl.class);
 
 
@Override
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u,false);
}
 
@Override
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u.getId() == getOwner().getId();
}
 
@Override
public GenericUser getOwner()
{
return super.getOwner();
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyQuestionItemView.java
New file
0,0 → 1,133
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 03-06-2011
* @time: 11:45
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionItemView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyQuestionItemView.class);
 
private long id;
private String labelpt;
private String labelen;
private SurveyQuestionView question;
private List<SurveyQuestionCandidateAnswerView> candidates = new ArrayList<SurveyQuestionCandidateAnswerView>();
 
private String radioValue;
private String textareaValue;
 
public SurveyQuestionItemView()
{}
 
public SurveyQuestionItemView(SurveyQuestionItem questionItem)
{
super(questionItem);
init(questionItem);
}
 
public SurveyQuestionItemView(SurveyQuestionItem questionItem, SurveyQuestionView q)
{
super(questionItem);
if(q != null)
this.question = q;
init(questionItem);
}
 
private void init(SurveyQuestionItem questionItem)
{
this.id = questionItem.getId();
this.labelpt = questionItem.getLabelpt();
this.labelen = questionItem.getLabelen();
 
if(questionItem.getCandidadeAnswers() != null)
{
for(SurveyQuestionCandidateAnswer candidate: questionItem.getCandidadeAnswers())
{
SurveyQuestionCandidateAnswerView candidateAnswerView = new SurveyQuestionCandidateAnswerView(candidate,this);
this.candidates.add(candidateAnswerView);
}
}
}
 
public void persistViewInObject(SurveyQuestionItem questionItem)
{
questionItem.setLabelpt(labelpt);
questionItem.setLabelen(labelen);
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getLabelpt() {
return labelpt;
}
 
public void setLabelpt(String labelpt) {
this.labelpt = labelpt;
}
 
public String getLabelen() {
return labelen;
}
 
public void setLabelen(String labelen) {
this.labelen = labelen;
}
 
public SurveyQuestionView getQuestion() {
return question;
}
 
public void setQuestion(SurveyQuestionView question) {
this.question = question;
}
 
public List<SurveyQuestionCandidateAnswerView> getCandidates() {
return candidates;
}
 
public void setCandidates(List<SurveyQuestionCandidateAnswerView> candidates) {
this.candidates = candidates;
}
 
public String getRadioValue() {
return radioValue;
}
 
public void setRadioValue(String radioValue) {
this.radioValue = radioValue;
}
 
public String getTextareaValue() {
return textareaValue;
}
 
public void setTextareaValue(String textareaValue) {
this.textareaValue = textareaValue;
}
 
public Class getReferenceClass() {
return SurveyQuestionItemImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyQuestionAnswerView.java
New file
0,0 → 1,101
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyQuestionAnswer;
import pt.estgp.estgweb.domain.SurveyQuestionAnswerImpl;
import pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswer;
import pt.estgp.estgweb.domain.SurveyResponse;
 
import java.io.Serializable;
 
/**
* @author: Duarte Santos
* @date: 03-06-2011
* @time: 12:01
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionAnswerView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyQuestionAnswerView.class);
 
private long id;
private String textAnswer;
private SurveyQuestionCandidateAnswerView candidateAnswer;
private SurveyResponseView response;
 
public SurveyQuestionAnswerView()
{}
 
public SurveyQuestionAnswerView(SurveyQuestionAnswer questionAnswer)
{
super(questionAnswer);
init(questionAnswer);
}
 
public SurveyQuestionAnswerView(SurveyQuestionAnswer questionAnswer, SurveyResponseView r)
{
super(questionAnswer);
this.response = r;
init(questionAnswer);
}
 
public SurveyQuestionAnswerView(SurveyQuestionAnswer questionAnswer, SurveyQuestionCandidateAnswerView c)
{
super(questionAnswer);
if(c != null)
this.candidateAnswer = c;
init(questionAnswer);
}
 
private void init(SurveyQuestionAnswer questionAnswer)
{
this.id = questionAnswer.getId();
this.textAnswer = questionAnswer.getTextAnswer();
}
 
public void persistViewInObject(SurveyQuestionAnswer questionAnswer)
{
questionAnswer.setTextAnswer(textAnswer);
}
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getTextAnswer() {
return textAnswer;
}
 
public void setTextAnswer(String textAnswer) {
this.textAnswer = textAnswer;
}
 
public SurveyQuestionCandidateAnswerView getCandidateAnswer() {
return candidateAnswer;
}
 
public void setCandidateAnswer(SurveyQuestionCandidateAnswerView candidateAnswer) {
this.candidateAnswer = candidateAnswer;
}
 
public SurveyResponseView getResponse() {
return response;
}
 
public void setResponse(SurveyResponseView response) {
this.response = response;
}
 
public Class getReferenceClass() {
return SurveyQuestionAnswerImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStatsGraphicView.java
New file
0,0 → 1,72
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyStatsGraphic;
import pt.estgp.estgweb.domain.SurveyStatsGraphicImpl;
 
import java.io.Serializable;
 
/**
* @author: Duarte Santos
* @date: 12-08-2011
* @time: 23:26
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStatsGraphicView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyStatsGraphicView.class);
 
private long id;
private String identifier;
private SurveyStructuralNodeView structuralNodeView;
 
public SurveyStatsGraphicView()
{}
 
public SurveyStatsGraphicView(SurveyStatsGraphic g)
{
super(g);
init(g);
}
 
private void init(SurveyStatsGraphic g)
{
this.id = g.getId();
this.identifier = g.getIdentifier();
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getIdentifier() {
return identifier;
}
 
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
 
public SurveyStructuralNodeView getStructuralNodeView() {
return structuralNodeView;
}
 
public void setStructuralNodeView(SurveyStructuralNodeView structuralNodeView) {
this.structuralNodeView = structuralNodeView;
}
 
@Override
public Class getReferenceClass() {
return SurveyStatsGraphicImpl.class;
}
 
@Override
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyResponseView.java
New file
0,0 → 1,115
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 31-07-2011
* @time: 16:36
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyResponseView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyResponseView.class);
 
private long id;
private Date date;
private boolean answered;
private SurveyStructuralNodeView structuralNodeView = new SurveyStructuralNodeView();
private UserView owner = new UserView();
 
private List<SurveyQuestionAnswerView> answers = new ArrayList<SurveyQuestionAnswerView>();
 
public SurveyResponseView()
{}
 
public SurveyResponseView(SurveyResponse surveyResponse)
{
super(surveyResponse);
init(surveyResponse);
}
 
private void init(SurveyResponse surveyResponse)
{
this.id = surveyResponse.getId();
this.date = surveyResponse.getDate();
this.answered = surveyResponse.isAnswered();
this.owner = new UserView((User) surveyResponse.getOwner());
 
if(surveyResponse.getAnswers() != null)
{
for(SurveyQuestionAnswer questionAnswer : surveyResponse.getAnswers())
{
SurveyQuestionAnswerView questionAnswerView = new SurveyQuestionAnswerView(questionAnswer);
this.answers.add(questionAnswerView);
}
}
}
 
public void persistViewInObject(SurveyResponse response)
{
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public Date getDate() {
return date;
}
 
public void setDate(Date date) {
this.date = date;
}
 
public boolean isAnswered() {
return answered;
}
 
public void setAnswered(boolean answered) {
this.answered = answered;
}
 
public SurveyStructuralNodeView getStructuralNodeView() {
return structuralNodeView;
}
 
public void setStructuralNodeView(SurveyStructuralNodeView structuralNode) {
this.structuralNodeView = structuralNode;
}
 
public UserView getOwner() {
return owner;
}
 
public void setOwner(UserView owner) {
this.owner = owner;
}
 
public List<SurveyQuestionAnswerView> getAnswers() {
return answers;
}
 
public void setAnswers(List<SurveyQuestionAnswerView> answers) {
this.answers = answers;
}
 
public Class getReferenceClass() {
return SurveyResponseImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyQuestionView.java
New file
0,0 → 1,165
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.utils.ConfigProperties;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 27-05-2011
* @time: 14:49
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyQuestionView.class);
 
private long id;
private String labelpt;
private String labelen;
private boolean required;
private String type;
private SurveyView survey;
private List<SurveyQuestionItemView> items = new ArrayList<SurveyQuestionItemView>();
 
private List<SurveyQuestionCandidateAnswerView> candidatesLabels = new ArrayList<SurveyQuestionCandidateAnswerView>();
private List<SurveyQuestionItemView> itemOptions = new ArrayList<SurveyQuestionItemView>(); //todo tirar
private List<SurveyQuestionCandidateAnswerView> candidateOptions = new ArrayList<SurveyQuestionCandidateAnswerView>(); //todo tirar
 
public SurveyQuestionView()
{}
 
public SurveyQuestionView(SurveyQuestion surveyQuestion)
{
super(surveyQuestion);
init(surveyQuestion);
}
 
public SurveyQuestionView(SurveyQuestion surveyQuestion, SurveyView s)
{
super(surveyQuestion);
if(s != null)
this.survey = s;
init(surveyQuestion);
}
 
private void init(SurveyQuestion surveyQuestion)
{
this.id = surveyQuestion.getId();
this.labelpt = surveyQuestion.getLabelpt();
this.labelen = surveyQuestion.getLabelen();
this.required = surveyQuestion.isRequired();
this.type = surveyQuestion.getType();
 
if(surveyQuestion.getQuestionItems() != null)
{
for(SurveyQuestionItem item: surveyQuestion.getQuestionItems())
{
SurveyQuestionItemView questionItemView = new SurveyQuestionItemView(item,this);
this.items.add(questionItemView);
}
}
}
 
public void persistViewInObject(SurveyQuestion surveyQuestion)
{
surveyQuestion.setLabelpt(labelpt);
surveyQuestion.setLabelen(labelen);
surveyQuestion.setRequired(required);
surveyQuestion.setType(type);
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getLabelpt() {
return labelpt;
}
 
public void setLabelpt(String labelpt) {
this.labelpt = labelpt;
}
 
public String getLabelen() {
return labelen;
}
 
public void setLabelen(String labelen) {
this.labelen = labelen;
}
 
public boolean isRequired() {
return required;
}
 
public void setRequired(boolean required) {
this.required = required;
}
 
public String getType() {
return type;
}
 
public void setType(String type) {
this.type = type;
}
public SurveyView getSurvey() {
return survey;
}
 
public void setSurvey(SurveyView survey) {
this.survey = survey;
}
 
public List<SurveyQuestionItemView> getItems() {
return items;
}
 
public void setItems(List<SurveyQuestionItemView> items) {
this.items = items;
}
 
public List<SurveyQuestionCandidateAnswerView> getCandidatesLabels() {
return candidatesLabels;
}
 
public void setCandidatesLabels(List<SurveyQuestionCandidateAnswerView> candidatesLabels) {
this.candidatesLabels = candidatesLabels;
}
 
public List<SurveyQuestionItemView> getItemOptions() {
return itemOptions;
}
 
public void setItemOptions(List<SurveyQuestionItemView> itemOptions) {
this.itemOptions = itemOptions;
}
 
public List<SurveyQuestionCandidateAnswerView> getCandidateOptions() {
return candidateOptions;
}
 
public void setCandidateOptions(List<SurveyQuestionCandidateAnswerView> candidateOptions) {
this.candidateOptions = candidateOptions;
}
 
public Class getReferenceClass() {
return SurveyQuestionImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStructuralNodeView.java
New file
0,0 → 1,205
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyResponse;
import pt.estgp.estgweb.domain.SurveyStatsGraphic;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.SurveyStructuralNodeImpl;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 31-07-2011
* @time: 16:40
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStructuralNodeView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyStructuralNodeView.class);
 
private long id;
private String msg;
private String msgKey;
private String myKey;
private SurveyView surveyView;
private SurveyStructuralNodeView parentNode;
private List<SurveyStatsGraphicView> statsGraphicView = new ArrayList<SurveyStatsGraphicView>();
private List<SurveyStructuralNodeView> nodes = new ArrayList<SurveyStructuralNodeView>();
private List<SurveyResponseView> responses = new ArrayList<SurveyResponseView>();
 
public SurveyStructuralNodeView()
{}
 
public SurveyStructuralNodeView(SurveyStructuralNode node)
{
super(node);
init(node,null);
}
 
public SurveyStructuralNodeView(SurveyStructuralNode node, SurveyStructuralNodeView parentView)
{
super(node);
init(node,parentView);
}
private void init(SurveyStructuralNode node, SurveyStructuralNodeView parentView)
{
this.id = node.getId();
this.msg = node.getMsg();
this.msgKey = node.getMsgKey();
this.myKey = node.getMyKey();
 
if(parentView != null)
this.parentNode = parentView;
 
if(node.getNodes() != null)
{
for(SurveyStructuralNode n: node.getNodes())
{
SurveyStructuralNodeView nodeView = new SurveyStructuralNodeView(n,this);
this.nodes.add(nodeView);
}
}
 
if(node.getGraphics() != null)
{
for(SurveyStatsGraphic g: node.getGraphics())
{
SurveyStatsGraphicView graphicView = new SurveyStatsGraphicView(g);
this.statsGraphicView.add(graphicView);
}
}
//
// if(node.getResponses() != null)
// {
// for(SurveyResponse response: node.getResponses())
// {
// SurveyResponseView respondeView = new SurveyResponseView(response);
// this.responses.add(respondeView);
// }
// }
}
 
public void persistViewInObject(SurveyStructuralNode node)
{
node.setMsg(msg);
node.setMsgKey(msgKey);
node.setMyKey(myKey);
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getMsg() {
return msg;
}
 
public void setMsg(String msg) {
this.msg = msg;
}
 
public String getMsgKey() {
return msgKey;
}
 
public void setMsgKey(String msgKey) {
this.msgKey = msgKey;
}
 
public String getMyKey() {
return myKey;
}
 
public void setMyKey(String myKey) {
this.myKey = myKey;
}
 
public SurveyView getSurveyView() {
return surveyView;
}
 
public void setSurveyView(SurveyView surveyView) {
this.surveyView = surveyView;
}
 
public SurveyStructuralNodeView getParentNode() {
return parentNode;
}
 
public void setParentNode(SurveyStructuralNodeView parentNode) {
this.parentNode = parentNode;
}
 
public List<SurveyStatsGraphicView> getStatsGraphicView() {
return statsGraphicView;
}
 
public void setStatsGraphicView(List<SurveyStatsGraphicView> statsGraphicView) {
this.statsGraphicView = statsGraphicView;
}
 
public List<SurveyStructuralNodeView> getNodes() {
return nodes;
}
 
public void setNodes(List<SurveyStructuralNodeView> nodes) {
this.nodes = nodes;
}
 
public List<SurveyResponseView> getResponses() {
return responses;
}
 
public void setResponses(List<SurveyResponseView> responses) {
this.responses = responses;
}
 
public Class getReferenceClass() {
return SurveyStructuralNodeImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
 
private void getChildsStructuralNodesViewRecursive(List<SurveyStructuralNodeView> nodes, SurveyStructuralNodeView node)
{
if(node.getNodes().size() == 0)
nodes.add(node);
for(SurveyStructuralNodeView n : node.getNodes())
getChildsStructuralNodesViewRecursive(nodes, n);
}
 
public List<SurveyStructuralNodeView> getChildsStructuralNodesView()
{
List<SurveyStructuralNodeView> nodesList = new ArrayList<SurveyStructuralNodeView>();
getChildsStructuralNodesViewRecursive(nodesList, this);
return nodesList;
}
 
private boolean isRelativeParentOfRecursive(SurveyStructuralNodeView node, long nodeId)
{
if(node.getId() == nodeId)
return true;
for(SurveyStructuralNodeView n : node.getNodes())
{
if(isRelativeParentOfRecursive(n,nodeId))
return true;
}
return false;
}
 
public boolean isRelativeParentOf(long nodeId)
{
return isRelativeParentOfRecursive(this,nodeId);
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyView.java
New file
0,0 → 1,338
package pt.estgp.estgweb.domain.views;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.services.surveys.SurveyStatusEnum;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.RoleManager;
import pt.estgp.estgweb.web.utils.DatesUtils;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 27-05-2011
* @time: 15:46
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyView.class);
private static final long EXPIRE_TIME = 600000;
 
private long id;
private String title;
private Date saveDate;
private Date updateDate;
private Date startDate;
private Date endDate;
private String type;
private String targetRoles;
private String statsConsultRoles;
private String year;
private String semester;
private int statusPercentage;
private SurveyStatusEnum status;
private UserView owner;
private String identifier;
private SurveyStructuralNodeView structuralNodeView;
private List<SurveyQuestionView> questions = new ArrayList<SurveyQuestionView>();
private long numberOfResponses;
private long numberTotalOfResponses;
private String deletedQuestions;
private String deletedItems;
private String deletedCandidates;
 
public SurveyView()
{}
 
public SurveyView(Survey survey)
{
super(survey);
init(survey);
}
 
private void init(Survey survey)
{
this.id = survey.getId();
this.title = survey.getTitle();
this.saveDate = survey.getSaveDate();
this.updateDate = survey.getUpdateDate();
this.startDate = survey.getStartDate();
this.endDate = survey.getEndDate();
this.type = survey.getType();
this.targetRoles = survey.getTargetRoles();
this.statsConsultRoles = survey.getStatsConsultRoles();
this.year = survey.getYear();
this.semester = survey.getSemester();
this.statusPercentage = survey.getStatusPercentage();
this.status = SurveyStatusEnum.parse(survey.getStatus());
this.owner = new UserView((User) survey.getOwner());
this.identifier = survey.getIdentifier();
 
if(survey.getQuestions() != null)
{
for(SurveyQuestion question: survey.getQuestions())
{
SurveyQuestionView questionView = new SurveyQuestionView(question,this);
this.questions.add(questionView);
}
}
}
 
public void persistViewInObject(Survey survey)
{
survey.setTitle(title);
survey.setStartDate(startDate);
survey.setEndDate(endDate);
survey.setType(type);
survey.setTargetRoles(targetRoles);
survey.setStatsConsultRoles(statsConsultRoles);
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getTitle() {
return title;
}
 
public void setTitle(String title) {
this.title = title;
}
 
public Date getSaveDate() {
return saveDate;
}
 
public void setSaveDate(Date saveDate) {
this.saveDate = saveDate;
}
 
public Date getUpdateDate() {
return updateDate;
}
 
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
 
public Date getStartDate() {
return startDate;
}
 
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
 
public Date getEndDate() {
return endDate;
}
 
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
 
public String getType() {
return type;
}
 
public void setType(String type) {
this.type = type;
}
 
public String getTargetRoles() {
return targetRoles;
}
 
public void setTargetRoles(String targetRoles) {
this.targetRoles = targetRoles;
}
 
public String getStatsConsultRoles() {
return statsConsultRoles;
}
 
public void setStatsConsultRoles(String statsConsultRoles) {
this.statsConsultRoles = statsConsultRoles;
}
 
public String getYear() {
return year;
}
 
public void setYear(String year) {
this.year = year;
}
 
public String getSemester() {
return semester;
}
 
public void setSemester(String semester) {
this.semester = semester;
}
 
public int getStatusPercentage() {
return statusPercentage;
}
 
public void setStatusPercentage(int statusPercentage) {
this.statusPercentage = statusPercentage;
}
 
public SurveyStatusEnum getStatus() {
return status;
}
 
public void setStatus(SurveyStatusEnum status) {
this.status = status;
}
 
public UserView getOwner() {
return owner;
}
 
public void setOwner(UserView owner) {
this.owner = owner;
}
 
public String getIdentifier() {
return identifier;
}
 
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
 
public SurveyStructuralNodeView getStructuralNodeView() {
return structuralNodeView;
}
 
public void setStructuralNodeView(SurveyStructuralNodeView structuralNodeView) {
this.structuralNodeView = structuralNodeView;
}
 
public List<SurveyQuestionView> getQuestions() {
return questions;
}
 
public void setQuestions(List<SurveyQuestionView> questions) {
this.questions = questions;
}
 
public long getNumberOfResponses() {
return numberOfResponses;
}
 
public void setNumberOfResponses(long numberOfResponses) {
this.numberOfResponses = numberOfResponses;
}
 
public long getNumberTotalOfResponses() {
return numberTotalOfResponses;
}
 
public void setNumberTotalOfResponses(long numberTotalOfResponses) {
this.numberTotalOfResponses = numberTotalOfResponses;
}
 
public String getDeletedQuestions() {
return deletedQuestions;
}
 
public void setDeletedQuestions(String deletedQuestions) {
this.deletedQuestions = deletedQuestions;
}
 
public String getDeletedItems() {
return deletedItems;
}
 
public void setDeletedItems(String deletedItems) {
this.deletedItems = deletedItems;
}
 
public String getDeletedCandidates() {
return deletedCandidates;
}
 
public void setDeletedCandidates(String deletedCandidates) {
this.deletedCandidates = deletedCandidates;
}
 
public String getFormatedSaveDate()
{
return DatesUtils.getStringFromDate(saveDate);
}
 
public String getFormatedUpdateDate()
{
return DatesUtils.getStringFromDate(updateDate);
}
 
public String getFormatedStartDate()
{
return DatesUtils.getStringFromDate(startDate);
}
 
public void setFormatedEndDate(String date)
{
this.endDate = DatesUtils.getDateFromString(date);
}
 
public String getFormatedEndDate()
{
return DatesUtils.getStringFromDate(endDate);
}
 
public boolean isExpired()
{
AbstractDao.getCurrentSession().beginTransaction();
List list = AbstractDao.getCurrentSession().createSQLQuery("select now()").list();
AbstractDao.getCurrentSession().getTransaction().commit();
Date now = (Date) list.get(0);
return (now.getTime() - this.updateDate.getTime() > EXPIRE_TIME);
}
 
public boolean isPedagogic()
{
return (this.getType().equals(Globals.SURVEY_TYPE_PEDAGOGIC));
}
 
public List<String> getOwnerRoles()
{
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole()
{
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public Class getReferenceClass()
{
return SurveyImpl.class;
}
 
public Serializable getSerializable()
{
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
1,16 → 1,14
package pt.estgp.estgweb.domain.views;
 
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.LoadCourseUnitAnnouncements;
import pt.estgp.estgweb.services.expceptions.ServiceException;
 
import java.io.Serializable;
import java.util.*;
 
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
411,6 → 409,11
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
//return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction);
 
//ALTERACOES REUNIAO BACO CODIGO 01062011
//TESTE A COMISSAO DE CURSO NAS CADEIRAS
 
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction);
}
 
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyQuestionCandidateAnswerView.java
New file
0,0 → 1,133
package pt.estgp.estgweb.domain.views;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 03-06-2011
* @time: 11:49
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionCandidateAnswerView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(SurveyQuestionCandidateAnswerView.class);
 
private long id;
private String labelpt;
private String labelen;
private String type;
private SurveyQuestionItemView questionItem;
private List<SurveyQuestionAnswerView> answers = new ArrayList<SurveyQuestionAnswerView>();
 
private boolean checkbox;
 
public SurveyQuestionCandidateAnswerView()
{}
 
public SurveyQuestionCandidateAnswerView(SurveyQuestionCandidateAnswer candidateAnswer) {
super(candidateAnswer);
init(candidateAnswer);
}
 
public SurveyQuestionCandidateAnswerView(SurveyQuestionCandidateAnswer candidateAnswer, SurveyQuestionItemView i) {
super(candidateAnswer);
if(i != null)
this.questionItem = i;
init(candidateAnswer);
}
 
private void init(SurveyQuestionCandidateAnswer candidateAnswer)
{
this.id = candidateAnswer.getId();
this.labelpt = candidateAnswer.getLabelpt();
this.labelen = candidateAnswer.getLabelen();
this.type = candidateAnswer.getType();
 
if(candidateAnswer.getAnswers() != null)
{
for(SurveyQuestionAnswer answer: candidateAnswer.getAnswers())
{
SurveyQuestionAnswerView answerView = new SurveyQuestionAnswerView(answer,this);
this.answers.add(answerView);
}
}
}
 
public void persistViewInObject(SurveyQuestionCandidateAnswer candidateAnswer)
{
candidateAnswer.setLabelpt(labelpt);
candidateAnswer.setLabelen(labelen);
candidateAnswer.setType(type);
}
 
public long getId() {
return id;
}
 
public void setId(long id) {
this.id = id;
}
 
public String getLabelpt() {
return labelpt;
}
 
public void setLabelpt(String labelpt) {
this.labelpt = labelpt;
}
 
public String getLabelen() {
return labelen;
}
 
public void setLabelen(String labelen) {
this.labelen = labelen;
}
 
public String getType() {
return type;
}
 
public void setType(String type) {
this.type = type;
}
 
public SurveyQuestionItemView getQuestionItem() {
return questionItem;
}
 
public void setQuestionItem(SurveyQuestionItemView questionItem) {
this.questionItem = questionItem;
}
 
public List<SurveyQuestionAnswerView> getAnswers() {
return answers;
}
 
public void setAnswers(List<SurveyQuestionAnswerView> answers) {
this.answers = answers;
}
 
public boolean isCheckbox() {
return checkbox;
}
 
public void setCheckbox(boolean checkbox) {
this.checkbox = checkbox;
}
 
public Class getReferenceClass() {
return SurveyQuestionCandidateAnswerImpl.class;
}
 
public Serializable getSerializable() {
return id;
}
}
/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java
208,4 → 208,45
public static SruSourceCollectionImpl createSruSourceCollectionImpl() {
return new SruSourceCollectionImpl();
}
 
// Duarte Santos
public static SurveyImpl createSurveyImpl()
{
return new SurveyImpl();
}
 
public static SurveyQuestionAnswerImpl createSurveyQuestionAnswerImpl()
{
return new SurveyQuestionAnswerImpl();
}
 
public static SurveyQuestionCandidateAnswerImpl createSurveyQuestionCandidateAnswerImpl()
{
return new SurveyQuestionCandidateAnswerImpl();
}
 
public static SurveyQuestionImpl createSurveyQuestionImpl()
{
return new SurveyQuestionImpl();
}
 
public static SurveyQuestionItemImpl createSurveyQuestionItemImpl()
{
return new SurveyQuestionItemImpl();
}
 
public static SurveyResponseImpl createSurveyResponseImpl()
{
return new SurveyResponseImpl();
}
 
public static SurveyStructuralNodeImpl createSurveyStructuralNodeImpl()
{
return new SurveyStructuralNodeImpl();
}
 
public static SurveyStatsGraphicImpl createSurveyStatsGraphicImpl()
{
return new SurveyStatsGraphicImpl();
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyQuestionItemImpl.java
New file
0,0 → 1,39
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:40
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionItemImpl extends SurveyQuestionItem
{
private static final Logger logger = Logger.getLogger(SurveyQuestionItemImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/domain/IEdit.java
New file
0,0 → 1,14
package pt.estgp.estgweb.domain;
 
/**
* @author: Duarte Santos
* @date: 16-08-2011
* @time: 22:50
* @email: a12564 [at] estgp [dot] pt
*/
 
public interface IEdit
{
public boolean canEdit(GenericUserImpl u);
public boolean canEdit(GenericUserImpl u, boolean transaction);
}
/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java
101,7 → 101,14
return false;
}
 
 
 
 
// Duarte Santos
public boolean haveResponse(Survey s, SurveyStructuralNode node)
{
for(SurveyResponse r : getMySurveyResponses())
{
if(r.getStructuralNode().getSurvey() == s && r.getStructuralNode() == node)
return true;
}
return false;
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyQuestionImpl.java
New file
0,0 → 1,39
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:40
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionImpl extends SurveyQuestion
{
private static final Logger logger = Logger.getLogger(SurveyQuestionImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyStructuralNodeDaoImpl.java
New file
0,0 → 1,49
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import static org.hibernate.criterion.Restrictions.*;
 
import org.hibernate.Query;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
 
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:44
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStructuralNodeDaoImpl extends SurveyStructuralNodeDao
{
private static final Logger logger = Logger.getLogger(SurveyStructuralNodeDaoImpl.class);
 
public static SurveyStructuralNodeDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyStructuralNodeDaoImpl();
return (SurveyStructuralNodeDaoImpl) myInstance;
}
 
public SurveyStructuralNode loadByRepositoryId(String identifier)
{
return (SurveyStructuralNode) createCriteria()
.createAlias("graphics","g")
.add(eq("g.identifier",identifier))
.uniqueResult();
}
 
public SurveyStructuralNode findBySurvey(long surveyId)
{
return (SurveyStructuralNode) createCriteria().add(eq("survey.id",surveyId)).add(isNull("parentNode")).uniqueResult();
}
 
public SurveyStructuralNode findByMsg(String msg, long surveyId)
{
return (SurveyStructuralNode) createCriteria().add(eq("msg",msg)).add(eq("survey.id",surveyId)).uniqueResult();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyDaoImpl.java
New file
0,0 → 1,55
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyImpl;
 
import static org.hibernate.criterion.Restrictions.*;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:44
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyDaoImpl extends AbstractDao<SurveyImpl>
{
private static final Logger logger = Logger.getLogger(SurveyDaoImpl.class);
 
protected static SurveyDaoImpl myInstance = null;
 
public static SurveyDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyDaoImpl();
return myInstance;
}
 
public List<Survey> loadAllSurveys()
{
return createCriteria().addOrder(Order.desc("id")).list();
}
 
public List<Survey> loadOwnedSurveys(long id)
{
return createCriteria().add(eq("owner.id",id)).addOrder(Order.desc("id")).list();
}
 
public Survey loadByRepositoryId(String identifier)
{
return (Survey) createCriteria()
.add(eq("identifier",identifier))
.uniqueResult();
}
 
@Override
protected Class getReferenceClass() {
return SurveyImpl.class;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
1,19 → 1,22
package pt.estgp.estgweb.domain.dao.impl;
 
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Criterion;
import org.hibernate.Criteria;
import org.hibernate.Query;
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;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
87,14 → 90,17
public List<Course> findAllOrderByName(String importYear)
{
return createCriteria()
.add(eq("importYear", importYear))
.add(eq("cu.importYear", importYear))
.addOrder(Order.asc("name"))
.list();
}
 
public List<Course> findAllOrderByName(String importYear, String area, String type)
public List<Course> findAllOrderByNameEvenWithoutCourseUnit(String importYear, String area, String type)
{
Criteria c = createCriteria();
 
/* c.setProjection(Projections.projectionList()
.add(Projections.distinct(Projections.id())));*/
if (importYear != null && importYear.length() > 0)
c.add(eq("importYear", importYear));
if (area != null && area.length() > 0)
105,11 → 111,29
.list();
}
 
public List<Course> findAllOrderByName(String importYear, String area, String type)
{
Criteria c = createCriteria();
 
/* c.setProjection(Projections.projectionList()
.add(Projections.distinct(Projections.id())));*/
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
c.createAlias("courseUnits","cu");
if (importYear != null && importYear.length() > 0)
c.add(eq("cu.importYear", importYear));
if (area != null && area.length() > 0)
c.add(eq("area", area));
if (type != null && type.length() > 0)
c.add(eq("degree", type));
return c.addOrder(Order.asc("name"))
.list();
}
 
 
 
public List<String> loadImportYears()
{
Query q = createQuery("select distinct c.importYear from c in class " + Course.class.getName() + " order by c.importYear desc");
Query q = createQuery("select distinct c.importYear from c in class " + CourseUnit.class.getName() + " order by c.importYear desc");
return q.list();
}
 
145,5 → 169,15
.list();
}
 
 
// Duarte Santos
public List<String> loadAreas()
{
return
createCriteria()
.setProjection(Projections
.distinct(Projections.projectionList()
.add(Projections.property("area"))))
.add(Expression.isNotNull("area"))
.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionItemDaoImpl.java
New file
0,0 → 1,49
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.SurveyQuestionItem;
 
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.isNotNull;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:45
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionItemDaoImpl extends SurveyQuestionItemDao
{
private static final Logger logger = Logger.getLogger(SurveyQuestionItemDaoImpl.class);
 
public static SurveyQuestionItemDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyQuestionItemDaoImpl();
return (SurveyQuestionItemDaoImpl) myInstance;
}
 
public SurveyQuestionItem loadById(long id)
{
return (SurveyQuestionItem)
createCriteria()
.add(eq("id", id))
.uniqueResult();
}
 
public List<String> findItemsLabels(long questionId)
{
return createCriteria()
.add(eq("question.id",questionId))
.setProjection(Projections.projectionList()
.add(Projections.property("labelpt"))
)
.add(isNotNull("labelpt"))
.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionAnswerDaoImpl.java
New file
0,0 → 1,68
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.*;
import java.util.List;
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:46
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionAnswerDaoImpl extends SurveyQuestionAnswerDao
{
private static final Logger logger = Logger.getLogger(SurveyQuestionAnswerDaoImpl.class);
 
public static SurveyQuestionAnswerDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyQuestionAnswerDaoImpl();
return (SurveyQuestionAnswerDaoImpl) myInstance;
}
 
public int countAnswers(long candidateId, long nodeId)
{
Criteria c = createCriteria()
.createAlias("candidateAnswer","qca")
.createAlias("response","r")
.add(eq("qca.id",candidateId))
.add(eq("r.structuralNode.id",nodeId));
return c.list().size();
}
 
public List loadForCsv(long surveyId)
{
Criteria c = createCriteria()
.createAlias("response","r")
.createAlias("r.owner","u")
.createAlias("candidateAnswer","qca")
.createAlias("qca.questionItem","qi")
.createAlias("qi.question","q")
.createAlias("q.survey","s")
.add(eq("s.id",surveyId))
.setProjection(Projections.projectionList()
.add(Projections.property("r.id"))
.add(Projections.property("s.id"))
.add(Projections.property("s.title"))
.add(Projections.property("q.id"))
.add(Projections.property("q.labelpt"))
.add(Projections.property("qi.id"))
.add(Projections.property("qi.labelpt"))
.add(Projections.property("qca.id"))
.add(Projections.property("qca.labelpt"))
.add(Projections.property("textAnswer"))
.add(Projections.property("u.id"))
.add(Projections.property("u.username"))
)
.addOrder(Order.asc("u.id"))
.addOrder(Order.asc("qca.id"))
.addOrder(Order.asc("qi.id"))
.addOrder(Order.asc("q.id"))
.addOrder(Order.asc("s.id"));
return c.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyStatsGraphicDaoImpl.java
New file
0,0 → 1,32
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyStatsGraphic;
 
import static org.hibernate.criterion.Restrictions.*;
 
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 12-08-2011
* @time: 15:27
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStatsGraphicDaoImpl extends SurveyStatsGraphicDao
{
private static final Logger logger = Logger.getLogger(SurveyDaoImpl.class);
 
public static SurveyStatsGraphicDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyStatsGraphicDaoImpl();
return (SurveyStatsGraphicDaoImpl) myInstance;
}
 
public SurveyStatsGraphic load(long questionId, long nodeId)
{
return (SurveyStatsGraphic) createCriteria().add(eq("question.id",questionId)).add(eq("structuralNode.id",nodeId)).uniqueResult();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/TeacherDaoImpl.java
70,4 → 70,25
{
return createCriteria().add(or(or(or(eq("email",email),eq("outEmail",email)),eq("gmail",email)),eq("msn",email))).addOrder(Order.asc("name")).list();
}
 
// Duarte Santos
public List<Teacher> loadByCourseUnit(long courseUnitId)
{
return createCriteria()
.createAlias("teachedUnits", "tu")
.add(eq("tu.id", courseUnitId))
.list();
}
 
public long countTotalFromSubscribedUnits(String importYear, String semester)
{
Criteria c = createCriteria()
.createAlias("teachedUnits","tu")
.add(eq("tu.importYear",importYear))
.add(eq("tu.semestre",semester))
.setProjection(Projections.projectionList()
.add(Projections.rowCount())
);
return ((Integer) c.uniqueResult()).longValue();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java
7,7 → 7,6
import org.hibernate.HibernateException;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import static org.hibernate.criterion.Restrictions.*;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
16,6 → 15,8
import java.util.Date;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
215,4 → 216,21
{
return (User) createCriteria().add(or(eq("sigesCode",sigesCode),eq("username","a" + sigesCode))).uniqueResult();
}
// Duarte Santos
public List<User> loadRolesUsers(List<String> roles)
{
Criteria criteria = createCriteria();
Criterion co = null;
for (String role : roles)
{
Criterion cor = like("roles", "%" + role + "%");
if (co == null)
co = cor;
else
co = or(co, cor);
}
criteria.add(co);
return criteria.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/StudentDaoImpl.java
1,9 → 1,14
package pt.estgp.estgweb.domain.dao.impl;
 
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.Student;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.User;
 
import static org.hibernate.criterion.Restrictions.*;
 
import java.util.List;
import java.util.Set;
 
/**
28,10 → 33,29
return (Student) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
}
 
 
public Student loadBySigesCode(String sigesCode)
{
return (Student) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
}
 
// Duarte Santos
public List<Student> loadByCourseUnit(long courseUnitId)
{
return createCriteria()
.createAlias("subscribedUnits", "su")
.add(eq("su.id", courseUnitId))
.list();
}
 
public long countTotalFromSubscribedUnits(String importYear, String semester)
{
Criteria c = createCriteria()
.createAlias("subscribedUnits","su")
.add(eq("su.importYear",importYear))
.add(eq("su.semestre",semester))
.setProjection(Projections.projectionList()
.add(Projections.rowCount())
);
return ((Integer) c.uniqueResult()).longValue();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
1,9 → 1,8
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.TeacherImpl;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.DatesUtils;
17,6 → 16,7
import org.hibernate.sql.JoinFragment;
import org.apache.log4j.Logger;
 
import java.util.Collection;
import java.util.List;
import java.util.Set;
 
185,8 → 185,6
.list();
}
 
 
 
public List<CourseUnit> loadCourseUnits(long courseId, String semestre, String year, boolean withTeacher, boolean withNoTeacher)
{
Criteria c = createCriteria();
347,6 → 345,4
{
return loadMissingProgramValidateGivenCourse(courseId).size();
}
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionCandidateAnswerDaoImpl.java
New file
0,0 → 1,51
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswer;
 
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.isNotNull;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:45
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionCandidateAnswerDaoImpl extends SurveyQuestionCandidateAnswerDao
{
private static final Logger logger = Logger.getLogger(SurveyQuestionCandidateAnswerDaoImpl.class);
 
public static SurveyQuestionCandidateAnswerDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyQuestionCandidateAnswerDaoImpl();
return (SurveyQuestionCandidateAnswerDaoImpl) myInstance;
}
 
public SurveyQuestionCandidateAnswer loadById(long id)
{
return (SurveyQuestionCandidateAnswer)
createCriteria()
.add(eq("id", id))
.uniqueResult();
}
 
public List<String> findCandidatesLabels(long questionId)
{
return createCriteria()
.createAlias("questionItem", "qi")
.add(eq("qi.question.id", questionId))
.setProjection(Projections.projectionList()
.add(Projections.distinct(Projections.property("labelpt")))
)
.add(isNotNull("labelpt"))
.list();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyResponseDaoImpl.java
New file
0,0 → 1,66
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.SurveyResponse;
import pt.estgp.estgweb.domain.SurveyResponseImpl;
 
import java.util.Date;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:45
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyResponseDaoImpl extends SurveyResponseDao
{
private static final Logger logger = Logger.getLogger(SurveyResponseDaoImpl.class);
 
public static SurveyResponseDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyResponseDaoImpl();
return (SurveyResponseDaoImpl) myInstance;
}
 
public List<SurveyResponseImpl> loadByUserId(long userId)
{
Criteria c = createCriteria()
.createAlias("structuralNode","sn")
.createAlias("sn.survey","s")
.add(eq("owner.id",userId))
.add(eq("answered", false))
.add(and(lt("s.startDate", new Date()),gt("s.endDate", new Date())));
return c.list();
}
 
public List<SurveyResponse> loadResponsesByParentStructuralNodeId(long parentNodeId)
{
List list = createCriteria().add(eq("structuralNode.id", parentNodeId)).list();
 
if(list.size() == 0)
return null;
else
return list;
}
 
public long countResponses(long surveyId, Boolean answered)
{
Criteria c = createCriteria();
c.createAlias("structuralNode","sn");
c.createAlias("sn.survey","s");
c.add(eq("s.id",surveyId));
if(answered != null)
c.add(eq("answered",answered));
c.setProjection(Projections.projectionList()
.add(Projections.rowCount())
);
return ((Integer) c.uniqueResult()).longValue();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionDaoImpl.java
New file
0,0 → 1,33
package pt.estgp.estgweb.domain.dao.impl;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.SurveyQuestion;
 
import static org.hibernate.criterion.Restrictions.eq;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:45
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionDaoImpl extends SurveyQuestionDao
{
private static final Logger logger = Logger.getLogger(SurveyQuestionDaoImpl.class);
 
public static SurveyQuestionDaoImpl getInstance()
{
if(myInstance == null)
myInstance = new SurveyQuestionDaoImpl();
return (SurveyQuestionDaoImpl) myInstance;
}
 
public SurveyQuestion loadById(long id)
{
return (SurveyQuestion)
createCriteria()
.add(eq("id", id))
.uniqueResult();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
1,5 → 1,6
package pt.estgp.estgweb.domain.dao;
 
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.dao.impl.*;
 
/**
197,4 → 198,45
{
return SruSourceCollectionDaoImpl.getInstance();
}
 
// Duarte Santos
public static SurveyDaoImpl getSurveyDaoImpl()
{
return SurveyDaoImpl.getInstance();
}
 
public static SurveyQuestionAnswerDaoImpl getSurveyQuestionAnswerDaoImpl()
{
return SurveyQuestionAnswerDaoImpl.getInstance();
}
 
public static SurveyQuestionCandidateAnswerDaoImpl getSurveyQuestionCandidateAnswerDaoImpl()
{
return SurveyQuestionCandidateAnswerDaoImpl.getInstance();
}
 
public static SurveyQuestionDaoImpl getSurveyQuestionDaoImpl()
{
return SurveyQuestionDaoImpl.getInstance();
}
 
public static SurveyQuestionItemDaoImpl getSurveyQuestionItemDaoImpl()
{
return SurveyQuestionItemDaoImpl.getInstance();
}
 
public static SurveyResponseDaoImpl getSurveyResponseDaoImpl()
{
return SurveyResponseDaoImpl.getInstance();
}
 
public static SurveyStructuralNodeDaoImpl getSurveyStructuralNodeDaoImpl()
{
return SurveyStructuralNodeDaoImpl.getInstance();
}
 
public static SurveyStatsGraphicDaoImpl getSurveyStatsGraphicDaoImpl()
{
return SurveyStatsGraphicDaoImpl.getInstance();
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyQuestionAnswerImpl.java
New file
0,0 → 1,39
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:41
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyQuestionAnswerImpl extends SurveyQuestionAnswer
{
private static final Logger logger = Logger.getLogger(SurveyQuestionAnswerImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyStructuralNodeImpl.java
New file
0,0 → 1,65
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:40
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStructuralNodeImpl extends SurveyStructuralNode
{
private static final Logger logger = Logger.getLogger(SurveyStructuralNodeImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
 
private void getChildsStructuralNodesRecursive(List<SurveyStructuralNode> nodes, SurveyStructuralNode node)
{
if(node.getNodes().size() == 0)
nodes.add(node);
for(SurveyStructuralNode n : node.getNodes())
getChildsStructuralNodesRecursive(nodes, n);
}
 
public List<SurveyStructuralNode> getChildsStructuralNodes()
{
List<SurveyStructuralNode> nodesList = new ArrayList<SurveyStructuralNode>();
getChildsStructuralNodesRecursive(nodesList, this);
return nodesList;
}
 
public SurveyStructuralNode getChildNode(String msg)
{
for(SurveyStructuralNode n : getNodes())
{
if(n.getMsg().equals(msg))
return n;
}
return null;
}
}
/impl/src/java/pt/estgp/estgweb/domain/Main.java
New file
0,0 → 1,387
package pt.estgp.estgweb.domain;
 
import jomm.dao.impl.AbstractDao;
import org.jboss.util.Objects;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.*;
 
import java.io.File;
import java.io.IOException;
import java.util.*;
 
/**
* @author: Duarte Santos
* @date: 09-05-2011
* @time: 23:53
* @email: a12564 [at] estgp [dot] pt
*/
 
public class Main
{
public static Survey createSurvey(User user)
{
Survey survey = DomainObjectFactory.createSurveyImpl();
survey.setStartDate(new Date());
survey.setSemester("S2");
survey.setYear("2010");
survey.setOwner(user);
SurveyDao.getInstance().save(survey);
return survey;
}
 
public static List<SurveyStructuralNode> createStructuralNodes(Survey survey)
{
List<SurveyStructuralNode> nodes = new ArrayList<SurveyStructuralNode>();
List<String> nodeTexts = new ArrayList<String>();
 
nodeTexts.add("201011");
nodeTexts.add("Engenharia Informática");
nodeTexts.add("Semestre1");
nodeTexts.add("Semestre2");
nodeTexts.add("Teoria da Computação");
nodeTexts.add("Redes de computadores I");
nodeTexts.add("Introdução à Programação");
nodeTexts.add("Análise de Matemática I");
 
int numNodes = nodeTexts.size();
int i = 0;
while(numNodes > 0)
{
nodes.add(DomainObjectFactory.createSurveyStructuralNodeImpl());
nodes.get(i).setSurvey(survey);
nodes.get(i).setNodes(new HashSet<SurveyStructuralNode>(0));
i++;
numNodes--;
}
 
nodes.get(0).setMsg(nodeTexts.get(0));
nodes.get(1).setMsg(nodeTexts.get(1));
nodes.get(2).setMsg(nodeTexts.get(2));
nodes.get(3).setMsg(nodeTexts.get(3));
nodes.get(4).setMsg(nodeTexts.get(4));
nodes.get(5).setMsg(nodeTexts.get(5));
nodes.get(6).setMsg(nodeTexts.get(6));
nodes.get(7).setMsg(nodeTexts.get(7));
 
nodes.get(0).getNodes().add(nodes.get(1));
nodes.get(1).getNodes().add(nodes.get(2));
nodes.get(1).getNodes().add(nodes.get(3));
nodes.get(2).getNodes().add(nodes.get(4));
nodes.get(3).getNodes().add(nodes.get(5));
nodes.get(3).getNodes().add(nodes.get(6));
nodes.get(3).getNodes().add(nodes.get(7));
 
SurveyStructuralNodeDao.getInstance().save(nodes.get(0));
SurveyStructuralNodeDao.getInstance().save(nodes.get(1));
SurveyStructuralNodeDao.getInstance().save(nodes.get(2));
SurveyStructuralNodeDao.getInstance().save(nodes.get(3));
SurveyStructuralNodeDao.getInstance().save(nodes.get(4));
SurveyStructuralNodeDao.getInstance().save(nodes.get(5));
SurveyStructuralNodeDao.getInstance().save(nodes.get(6));
SurveyStructuralNodeDao.getInstance().save(nodes.get(7));
 
return nodes;
}
 
public static SurveyResponse createSurveyResponses(User user, SurveyStructuralNode node)
{
SurveyResponse response = DomainObjectFactory.createSurveyResponseImpl();
response.setStructuralNode(node);
response.setAnswered(true);
response.setOwner(user);
SurveyResponseDao.getInstance().save(response);
 
return response;
}
 
public static List<SurveyQuestion> createSurveyQuestions(Survey survey)
{
List<SurveyQuestion> questions = new ArrayList<SurveyQuestion>();
List<String> questionTexts = new ArrayList<String>();
 
questionTexts.add("Pergunta numero 1");
questionTexts.add("Pergunta numero 2");
questionTexts.add("Pergunta numero 3");
 
int numQuestions = questionTexts.size();
int i = 0;
while(numQuestions > 0)
{
questions.add(DomainObjectFactory.createSurveyQuestionImpl());
questions.get(i).setSurvey(survey);
questions.get(i).setLabelpt(questionTexts.get(i));
SurveyQuestionDao.getInstance().save(questions.get(i));
i++;
numQuestions--;
}
 
return questions;
}
 
public static List<SurveyQuestionItem> createSurveyQuestionItems(List<SurveyQuestion> questions)
{
List<SurveyQuestionItem> items = new ArrayList<SurveyQuestionItem>();
List<String> itemsText = new ArrayList<String>();
 
itemsText.add("Item numero 1-1");
itemsText.add("Item numero 1-2");
itemsText.add("Item numero 1-3");
itemsText.add("");
itemsText.add("");
 
int numItems = itemsText.size();
int i = 0;
while(numItems > 0)
{
items.add(DomainObjectFactory.createSurveyQuestionItemImpl());
items.get(i).setLabelpt(itemsText.get(i));
i++;
numItems--;
}
 
items.get(0).setQuestion(questions.get(0));
items.get(1).setQuestion(questions.get(0));
items.get(2).setQuestion(questions.get(0));
items.get(3).setQuestion(questions.get(1));
items.get(4).setQuestion(questions.get(2));
 
SurveyQuestionItemDao.getInstance().save(items.get(0));
SurveyQuestionItemDao.getInstance().save(items.get(1));
SurveyQuestionItemDao.getInstance().save(items.get(2));
SurveyQuestionItemDao.getInstance().save(items.get(3));
SurveyQuestionItemDao.getInstance().save(items.get(4));
 
return items;
}
 
public static List<SurveyQuestionCandidateAnswer> createSurveyQuestionCandidateAnswers(List<SurveyQuestionItem> items)
{
List<SurveyQuestionCandidateAnswer> candidates = new ArrayList<SurveyQuestionCandidateAnswer>();
List<String> candidatesText = new ArrayList<String>();
 
candidatesText.add("Candidate numero 1-1");
candidatesText.add("Candidate numero 1-2");
candidatesText.add("Candidate numero 1-3");
candidatesText.add("Candidate numero 2-1");
candidatesText.add("Candidate numero 2-2");
candidatesText.add("Candidate numero 2-3");
candidatesText.add("Candidate numero 3-1");
candidatesText.add("Candidate numero 3-2");
candidatesText.add("Candidate numero 3-3");
 
int numCandidates = candidatesText.size();
int i = 0;
while(numCandidates > 0)
{
candidates.add(DomainObjectFactory.createSurveyQuestionCandidateAnswerImpl());
candidates.get(i).setLabelpt(candidatesText.get(i));
i++;
numCandidates--;
}
 
candidates.get(0).setQuestionItem(items.get(0));
candidates.get(0).setQuestionItem(items.get(1));
candidates.get(0).setQuestionItem(items.get(2));
candidates.get(0).setType("radio");
candidates.get(1).setQuestionItem(items.get(0));
candidates.get(1).setQuestionItem(items.get(1));
candidates.get(1).setQuestionItem(items.get(2));
candidates.get(1).setType("radio");
candidates.get(2).setQuestionItem(items.get(0));
candidates.get(2).setQuestionItem(items.get(1));
candidates.get(2).setQuestionItem(items.get(2));
candidates.get(2).setType("radio");
candidates.get(3).setQuestionItem(items.get(3));
candidates.get(3).setType("radio");
candidates.get(4).setQuestionItem(items.get(3));
candidates.get(4).setType("radio");
candidates.get(5).setQuestionItem(items.get(3));
candidates.get(5).setType("radio");
candidates.get(6).setQuestionItem(items.get(4));
candidates.get(6).setType("checkbox");
candidates.get(7).setQuestionItem(items.get(4));
candidates.get(7).setType("checkbox");
candidates.get(8).setQuestionItem(items.get(4));
candidates.get(8).setType("checkbox");
 
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(0));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(1));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(2));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(3));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(4));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(5));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(6));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(7));
SurveyQuestionCandidateAnswerDao.getInstance().save(candidates.get(8));
 
return candidates;
}
 
public static List<SurveyQuestionAnswer> createSurveyQuestionAnswers(SurveyResponse response, List<SurveyQuestionCandidateAnswer> candidates)
{
List<SurveyQuestionAnswer> answers = new ArrayList<SurveyQuestionAnswer>();
 
int numAnswers = 6;
int i = 0;
while(numAnswers > 0)
{
answers.add(DomainObjectFactory.createSurveyQuestionAnswerImpl());
answers.get(i).setResponse(response);
i++;
numAnswers--;
}
 
answers.get(0).setCandidateAnswer(candidates.get(0));
answers.get(1).setCandidateAnswer(candidates.get(1));
answers.get(2).setCandidateAnswer(candidates.get(1));
answers.get(3).setCandidateAnswer(candidates.get(4));
answers.get(4).setCandidateAnswer(candidates.get(7));
answers.get(5).setCandidateAnswer(candidates.get(8));
 
SurveyQuestionAnswerDao.getInstance().save(answers.get(0));
SurveyQuestionAnswerDao.getInstance().save(answers.get(1));
SurveyQuestionAnswerDao.getInstance().save(answers.get(2));
SurveyQuestionAnswerDao.getInstance().save(answers.get(3));
SurveyQuestionAnswerDao.getInstance().save(answers.get(4));
SurveyQuestionAnswerDao.getInstance().save(answers.get(5));
 
return answers;
}
 
public static void main(String[] args)
{
AbstractDao.getCurrentSession().beginTransaction();
 
User user = DaoFactory.getUserDaoImpl().loadByUsername("super");
 
List<Survey> surveys = DaoFactory.getSurveyDaoImpl().loadAllSurveys();
 
List<SurveyResponse> responses = DaoFactory.getSurveyResponseDaoImpl()
.loadResponsesByParentStructuralNodeId(surveys.get(0).getStructuralNode().getId());
 
if(responses.size() > 0)
{
System.out.println("--->"+responses.get(0).getAnswers().size());
}
 
// List ll = DaoFactory.getSurveyQuestionAnswerDaoImpl().teste();
 
List ll = new ArrayList();
 
String[] strs = new String[ll.size()];
int[] ints = new int[ll.size()];
String question = "";
 
Iterator iter = ll.iterator();
 
int i = 0;
while (iter.hasNext())
{
Object[] objs = (Object[]) iter.next();
 
if(question == "")
{
SurveyQuestion quest = DaoFactory.getSurveyQuestionDaoImpl().loadById(Long.parseLong(objs[0].toString()));
question = quest.getLabelpt();
}
 
SurveyQuestionCandidateAnswer cand = DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().loadById(Long.parseLong(objs[2].toString()));
strs[i] = cand.getLabelpt();
ints[i] = Integer.parseInt(objs[3].toString());
i++;
}
 
createBarChart(question, "", "Número de Respostas", strs, ints);
 
// // ----------------- POPULAR
// Survey survey = createSurvey(user);
// List<SurveyStructuralNode> nodes = createStructuralNodes(survey);
// SurveyResponse responses = createSurveyResponses(user, nodes.get(0));
// List<SurveyQuestion> questions = createSurveyQuestions(survey);
// List<SurveyQuestionItem> items = createSurveyQuestionItems(questions);
// List<SurveyQuestionCandidateAnswer> candidates = createSurveyQuestionCandidateAnswers(items);
// List<SurveyQuestionAnswer> answers = createSurveyQuestionAnswers(responses, candidates);
 
AbstractDao.getCurrentSession().getTransaction().commit();
}
 
public static void printSurveyStructuralNodesOrganized(SurveyStructuralNode node)
{
if(node == null) return;
for(SurveyStructuralNode n : node.getNodes())
{
System.out.println(+n.getId()+" - "+n.getMsg());
printSurveyStructuralNodesOrganized(n);
}
}
 
public static void createBarChart(String mText, String hText, String vText, String[] series, int[] numbers)
{
File img = new File(Globals.TMP_DIR + "/teste.png");
 
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 
if(series.length == numbers.length)
{
for(int i=0; i<series.length; i++)
{
dataset.addValue(numbers[i], series[i], "");
}
}
 
CategoryDataset datasett = dataset;
 
JFreeChart chart = ChartFactory.createBarChart(mText,hText,vText,datasett,PlotOrientation.VERTICAL,true,true,false);
 
try {
ChartUtilities.saveChartAsPNG(img, chart, 400, 300);
} catch (IOException e) {
e.printStackTrace();
}
}
 
public static void displayObjectList(List list)
{
Iterator iter = list.iterator();
if (!iter.hasNext())
{
System.out.println("No objects to display.");
return;
}
while (iter.hasNext())
{
Object obj = iter.next();
 
System.out.println(obj);
}
}
 
public static void displayObjectListArray(List list)
{
Iterator iter = list.iterator();
if (!iter.hasNext())
{
System.out.println("No objects to display.");
return;
}
while (iter.hasNext())
{
Object[] objs = (Object[]) iter.next();
 
System.out.print(objs[0]);
System.out.print(" ");
System.out.print(objs[1]);
System.out.print(" ");
System.out.println(objs[2]);
}
}
}
/impl/src/java/pt/estgp/estgweb/domain/SurveyStatsGraphicImpl.java
New file
0,0 → 1,39
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 12-08-2011
* @time: 15:23
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveyStatsGraphicImpl extends SurveyStatsGraphic
{
private static final Logger logger = Logger.getLogger(SurveyStatsGraphicImpl.class);
 
@Override
public GenericUser getOwner() {
return null;
}
 
@Override
public List<String> getOwnerRoles() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
public String getChoosedOwnerRole() {
logger.warn("Invoke not implemented method in class:" + getClass().getName());
return null;
}
 
@Override
public Serializable getSerializable() {
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlEnum.java
15,7 → 15,9
adminDomain("resource.access.adminDomain",new ResourceAccessControlAdminDomainFilter()),
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter()),
courseunitDeliverableDomain("resource.access.courseunitDeliverableDomain",new ResourceAccessControlCourseUnitDeliverableFilter()),
courseunitDomain("resource.access.courseunitDomain",new ResourceAccessControlCourseUnitFilter());
courseunitDomain("resource.access.courseunitDomain",new ResourceAccessControlCourseUnitFilter()),
// Duarte Santos
surveyStatsDomain("resource.access.survey", new ResourceAccessControlSurvey());
 
private String key;
private ResourceAccessControlFilter filter;
/impl/src/java/pt/estgp/estgweb/filters/filters/CanConsultSurveyStatsClass.java
New file
0,0 → 1,49
package pt.estgp.estgweb.filters.filters;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.IAddContents;
import pt.estgp.estgweb.domain.IConsultSurveyStats;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.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;
 
/**
* @author: Duarte Santos
* @date: 16-08-2011
* @time: 20:35
* @email: a12564 [at] estgp [dot] pt
*/
 
public class CanConsultSurveyStatsClass extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(CanConsultSurveyStatsClass.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
IConsultSurveyStats iConsultSurveyStats = (IConsultSurveyStats) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1), filterParameters, request.getServiceParameters());
 
if(!iConsultSurveyStats.canConsultSurveyStats(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/CanEditSurveyClass.java
New file
0,0 → 1,49
package pt.estgp.estgweb.filters.filters;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.IConsultSurveyStats;
import pt.estgp.estgweb.domain.IEdit;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.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;
 
/**
* @author: Duarte Santos
* @date: 16-08-2011
* @time: 22:55
* @email: a12564 [at] estgp [dot] pt
*/
 
public class CanEditSurveyClass extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(CanEditSurveyClass.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
IEdit iEdit = (IEdit) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1), filterParameters, request.getServiceParameters());
 
if(!iEdit.canEdit(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlSurvey.java
New file
0,0 → 1,33
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.SurveyStructuralNode;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlFilter;
 
/**
* @author: Duarte Santos
* @date: 11-08-2011
* @time: 21:07
* @email: a12564 [at] estgp [dot] pt
*/
 
public class ResourceAccessControlSurvey extends ResourceAccessControlFilter
{
@Override
public boolean canAccessResource(UserSession userSession, String identifier)
{
Survey s;
s = DaoFactory.getSurveyDaoImpl().loadByRepositoryId(identifier);
if(s == null)
{
SurveyStructuralNode node = DaoFactory.getSurveyStructuralNodeDaoImpl().loadByRepositoryId(identifier);
if(node == null)
return false;
else
s = node.getSurvey();
}
return (userSession.getUser().hasRole(s.getStatsConsultRoles()) || userSession.getUser().isAdmin());
}
}
/impl/src/java/pt/estgp/estgweb/web/DirWebProxy.java
29,6 → 29,7
import jomm.web.ftp.FileType;
import jomm.web.ftp.impl.FtpFile;
import jomm.web.utils.NavPlace;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
 
/**
* @author Jorge Machado
120,9 → 121,13
 
if (!server.startsWith("ftp://"))
{
if(path.equals(startPath))
if(path.equals(startPath) )
path += leafUrl;
String finalURL = server + URIUtil.encodePath(path, "ISO-8859-1");
String finalURL;
if(leafUrl.indexOf("?")>0)
finalURL = server + leafUrl;
else
finalURL = server + URIUtil.encodePath(path, "ISO-8859-1");
URL url = new URL(finalURL);
 
if (useOutputStream != null && useOutputStream.equals("true"))
169,6 → 174,13
styleDirectory(request, response);
}
}
catch (NotAuthorizedException e)
{
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
String username = userSession != null ? userSession.getUsername() : "UNKNOWN";
logger.warn(username + ": cant access this area server:" + server + " and path:" + path);
response.sendError(401);
}
catch (FileNotFoundException e)
{
logger.warn("url not found for server:" + server + " and path:" + path);
176,6 → 188,7
}
catch (Exception e)
{
logger.error(e,e);
throw new IOException(e.toString());
}
}
217,7 → 230,10
request.setAttribute(FTP_ACTUAL_PATH_KEY,startPath);
if (path.equals(startPath))
{
client.changeWorkingDirectory(path);
if(!client.changeWorkingDirectory(path))
{
throw new NotAuthorizedException();
}
FTPFile[] files = client.listFiles();
List<IFile> iFiles = FtpFile.init(files, server, path);
//root
350,6 → 366,8
}
catch (Throwable e)
{
if(e instanceof NotAuthorizedException)
throw (NotAuthorizedException)e;
logger.error(e, e);
}
}
425,12 → 443,21
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
 
parameters.put("contextPath", request.getContextPath());
if (userSession.getUsername() != null)
parameters.put("username", userSession.getUsername());
if (userSession.getName() != null)
parameters.put("name", userSession.getName());
if (userSession.getUser() != null)
parameters.put("roles", userSession.getUser().getRoles());
String username = "descolnhecido";
String roles = "";
String name = username;
 
if (userSession != null && userSession.getUsername() != null)
username = userSession.getUsername();
if (userSession != null && userSession.getName() != null)
name = userSession.getName();
if (userSession != null && userSession.getUser() != null)
roles = userSession.getUser().getRoles();
 
parameters.put("username", username);
parameters.put("name", name);
parameters.put("roles", roles);
 
parameters.put("ACTUAL", actualNodeId);
parameters.put("ACTUAL_REMOTE_CHILD", actualRemoteNodeId);
 
/impl/src/java/pt/estgp/estgweb/web/WebProxy.java
1,5 → 1,6
package pt.estgp.estgweb.web;
 
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.utils.ConfigProperties;
189,8 → 190,14
return in;
}
 
public static void main(String[] args) throws URIException {
String path = "pagina.php?id=asdasd&jj=kk";
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);
}
public static void processHttpRequestService(JspWriter out, String server, String path) throws IOException, ServletException
{
 
String serverUrl = ConfigProperties.getProperty("server." + server);
String serverEncoding = ConfigProperties.getProperty(server + ".encoding");
String confStartPath = ConfigProperties.getProperty("server." + server + ".start.path");
200,7 → 207,11
 
try
{
URL url = new URL(serverUrl + URIUtil.encodePath(path, "ISO-8859-1"));
 
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);
 
URLConnection con = url.openConnection();
InputStream stream = con.getInputStream();
 
/impl/src/java/pt/estgp/estgweb/web/utils/RequestUtils.java
1,17 → 1,12
package pt.estgp.estgweb.web.utils;
 
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
import jomm.utils.BytesUtils;
 
/**
* @author Jorge Machado
* @date 29/Fev/2008
22,52 → 17,56
{
public static String getRequester(HttpServletRequest request, HttpServletResponse response) throws NoCookiesException
{
if(request == null)
return "unknown";
if (request.getCookies() == null || request.getCookies().length == 0)
{
Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, request.getSession().getId());
response.addCookie(cookie);
return cookie.getValue();
}
else if (request.getCookies() != null && request.getCookies().length > 0)
{
for (Cookie cookie : request.getCookies())
{
if (cookie.getName().equals(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE))
{
return cookie.getValue();
}
}
Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, request.getSession().getId());
response.addCookie(cookie);
return cookie.getValue();
}
throw new NoCookiesException();
// if(request == null)
// return "unknown";
// if (request.getCookies() == null || request.getCookies().length == 0)
// {
// Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, request.getSession().getId());
// response.addCookie(cookie);
// return cookie.getValue();
// }
// else if (request.getCookies() != null && request.getCookies().length > 0)
// {
// for (Cookie cookie : request.getCookies())
// {
// if (cookie.getName().equals(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE))
// {
// return cookie.getValue();
// }
// }
// Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, request.getSession().getId());
// response.addCookie(cookie);
// return cookie.getValue();
// }
// throw new NoCookiesException();
if(request.getSession() != null)
return request.getSession().getId();
return "unkown";
}
 
public static boolean existRequester(HttpServletRequest request, HttpServletResponse response) throws NoCookiesException
{
if (request.getCookies() == null || request.getCookies().length == 0)
{
Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, BytesUtils.generateHexKey());
response.addCookie(cookie);
return false;
}
else if (request.getCookies() != null && request.getCookies().length > 0)
{
for (Cookie cookie : request.getCookies())
{
if (cookie.getName().equals(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE))
{
return true;
}
}
Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, BytesUtils.generateHexKey());
response.addCookie(cookie);
return false;
}
throw new NoCookiesException();
// if (request.getCookies() == null || request.getCookies().length == 0)
// {
// Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, BytesUtils.generateHexKey());
// response.addCookie(cookie);
// return false;
// }
// else if (request.getCookies() != null && request.getCookies().length > 0)
// {
// for (Cookie cookie : request.getCookies())
// {
// if (cookie.getName().equals(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE))
// {
// return true;
// }
// }
// Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, BytesUtils.generateHexKey());
// response.addCookie(cookie);
// return false;
// }
// throw new NoCookiesException();
return true;
}
 
private static final String EMPTY_STRING = "";
/impl/src/java/pt/estgp/estgweb/web/DirLayoutController.java
252,6 → 252,7
 
private void putProxyAttributes(HttpServletRequest request, String proxy, String externalFile, String xml, String url)
{
 
String server = ConfigProperties.getProperty("server." + proxy);
String proxyHost = ConfigProperties.getProperty(proxy + ".proxy.host");
String proxyPort = ConfigProperties.getProperty(proxy + ".proxy.port");
/impl/src/java/pt/estgp/estgweb/web/LayoutController.java
10,8 → 10,10
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
106,6 → 108,8
}
catch (Throwable e)
{
if(e instanceof NotAuthorizedException)
throw (NotAuthorizedException)e;
logger.error(e, e);
throw new IOException(e.toString());
}
123,6 → 127,9
//Check if user wants to create folders or upload files
FtpManager.checkOperations(this,request,response);
 
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
String username = userSession != null ? userSession.getUsername() : "UNKNOWN";
 
String user = ConfigProperties.getProperty(serverStr + ".user");
String pass = ConfigProperties.getProperty(serverStr + ".pass");
 
131,7 → 138,11
 
FtpServer ftpServer = FtpServer.getServer(server, user, pass);
FTPClient client = ftpServer.getClient();
client.changeWorkingDirectory(path);
if(!client.changeWorkingDirectory(path))
{
logger.warn(username + ": cant access this area server:" + server + " and path:" + path);
throw new NotAuthorizedException("nao pode aceder a esta area");
}
FTPFile[] files = client.listFiles();
List<IFile> iFiles = new ArrayList<IFile>();
for (FTPFile ftpFile : files)
155,6 → 166,8
}
catch (Throwable e)
{
if(e instanceof NotAuthorizedException)
throw (NotAuthorizedException)e;
logger.error(e, e);
}
}
/impl/src/java/pt/estgp/estgweb/web/form/surveys/SurveysForm.java
New file
0,0 → 1,300
package pt.estgp.estgweb.web.form.surveys;
 
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Survey;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.web.form.AddRolesForm;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author: Duarte Santos
* @date: 27-05-2011
* @time: 15:31
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveysForm extends AddRolesForm
{
private static final Logger logger = Logger.getLogger(SurveysForm.class);
 
private static List<String> surveyTypes = ConfigProperties.getListValues("surveys.type");
private static List<String> surveyTargetRoles = ConfigProperties.getListValues("surveys.target.role");
private static List<String> surveyTargetPairs = ConfigProperties.getListValues("surveys.target.pair");
private static List<String> surveyStatsConsultRoles = ConfigProperties.getListValues("surveys.stats.consult.role");
private static List<String> surveyQuestionTypes = ConfigProperties.getListValues("surveys.question.type");
private SurveyView surveyView = new SurveyView();
private SurveyResponseView surveyResponseView = new SurveyResponseView();
private String startDate;
private String endDate;
private String questionType;
private long counter = -1;
 
public SurveysForm()
{
if(surveyTypes.size() > 0)
surveyView.setType(surveyTypes.get(0));
}
 
public SurveyView getSurveyView()
{
return surveyView;
}
 
public void setSurveyView(SurveyView surveyView)
{
this.surveyView = surveyView;
}
 
public SurveyResponseView getSurveyResponseView() {
return surveyResponseView;
}
 
public void setSurveyResponseView(SurveyResponseView surveyResponseView) {
this.surveyResponseView = surveyResponseView;
}
 
public List<String> getSurveyTypes() {
return surveyTypes;
}
 
public void setSurveyTypes(List<String> surveyTypes) {
SurveysForm.surveyTypes = surveyTypes;
}
 
public List<String> getSurveyTargetRoles() {
return surveyTargetRoles;
}
 
public void setSurveyTargetRoles(List<String> surveyTargetRoles) {
SurveysForm.surveyTargetRoles = surveyTargetRoles;
}
 
public List<String> getSurveyStatsConsultRoles() {
return surveyStatsConsultRoles;
}
 
public void setSurveyStatsConsultRoles(List<String> surveyStatsConsultRoles) {
SurveysForm.surveyStatsConsultRoles = surveyStatsConsultRoles;
}
 
public List<String> getSurveyTargetPairs() {
return surveyTargetPairs;
}
 
public void setSurveyTargetPairs(List<String> surveyTargetPairs) {
SurveysForm.surveyTargetPairs = surveyTargetPairs;
}
 
public List<String> getSurveyQuestionTypes() {
return surveyQuestionTypes;
}
 
public void setSurveyQuestionTypes(List<String> surveyQuestionTypes) {
SurveysForm.surveyQuestionTypes = surveyQuestionTypes;
}
 
public String getStartDate() {
return startDate;
}
 
public void setStartDate(String startDate) {
this.startDate = startDate;
}
 
public String getEndDate() {
return endDate;
}
 
public void setEndDate(String endDate) {
this.endDate = endDate;
}
 
public String getQuestionType() {
return questionType;
}
 
public void setQuestionType(String questionType) {
this.questionType = questionType;
}
 
public long getCounter() {
return counter;
}
 
public void setCounter(long counter) {
this.counter = counter;
}
 
public long getCounterAndDec()
{
return this.counter--;
}
 
public void reset(ActionMapping actionMapping, HttpServletRequest request)
{
String parameter0 = request.getParameter("questionsListSize");
if(parameter0 != null)
{
int questionsSize = Integer.parseInt(parameter0);
surveyView.setQuestions(new ArrayList<SurveyQuestionView>());
for(int i=0;i<questionsSize;i++)
{
surveyView.getQuestions().add(new SurveyQuestionView());
String parameter1 = request.getParameter("itemsListSize"+i);
if(parameter1 != null)
{
int itemsSize = Integer.parseInt(parameter1);
surveyView.getQuestions().get(i).setItems(new ArrayList<SurveyQuestionItemView>());
for(int j=0;j<itemsSize;j++)
{
surveyView.getQuestions().get(i).getItems().add(new SurveyQuestionItemView());
String parameter2 = request.getParameter("candidatesListSize"+i+j);
int candidatesSize = 0;
if(parameter2 != null)
{
candidatesSize = Integer.parseInt(parameter2);
surveyView.getQuestions().get(i).getItems().get(j).setCandidates(new ArrayList<SurveyQuestionCandidateAnswerView>());
for(int k=0;k<candidatesSize;k++)
{
surveyView.getQuestions().get(i).getItems().get(j).getCandidates().add(new SurveyQuestionCandidateAnswerView());
}
}
}
}
 
String parameter3 = request.getParameter("candidatesLabelsSize"+i);
if(parameter3 != null)
{
int candidatesLabelsSize = Integer.parseInt(parameter3);
surveyView.getQuestions().get(i).setCandidatesLabels(new ArrayList<SurveyQuestionCandidateAnswerView>());
for(int m=0;m<candidatesLabelsSize;m++)
{
surveyView.getQuestions().get(i).getCandidatesLabels().add(new SurveyQuestionCandidateAnswerView());
}
}
}
}
}
 
public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest)
{
ActionErrors errors = new ActionErrors();
if(httpServletRequest.getParameter("dispatch").equals("save"))
{
if(surveyView.getTitle() == null || surveyView.getTitle().trim().length() == 0)
addMessageWithKeys(errors,httpServletRequest,"errors.required","survey.submit.form.title");
 
if(endDate == null || endDate.length() == 0)
addMessage(errors,httpServletRequest,"survey.submit.form.error.need.expire.date");
 
if(surveyView.getQuestions().size() == 0)
addMessage(errors,httpServletRequest,"survey.submit.form.error.need.questions");
else
{
int i = 1;
for(SurveyQuestionView qView : surveyView.getQuestions())
{
if(qView.getLabelpt() == null || qView.getLabelpt().trim().length() == 0)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.need.label", Integer.toString(i));
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO) || qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK))
{
SurveyQuestionItemView iView = qView.getItems().get(0);
 
if(iView.getCandidates().size() == 0)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.need.hoption", Integer.toString(i));
else
{
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
if(cView.getLabelpt() == null || cView.getLabelpt().trim().length() == 0)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.options.need.labels",Integer.toString(i));
}
}
}
else if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
boolean flag = false;
 
if(qView.getItems().size() == 0)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.need.hoption", Integer.toString(i));
else
{
for(SurveyQuestionItemView iView : qView.getItems())
{
if(iView.getLabelpt() == null || iView.getLabelpt().trim().length() == 0)
flag = true;
}
}
 
if(qView.getCandidatesLabels().size() == 0)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.need.voption", Integer.toString(i));
else
{
for(SurveyQuestionCandidateAnswerView cView : qView.getCandidatesLabels())
{
if(cView.getLabelpt() == null || cView.getLabelpt().trim().length() == 0)
flag = true;
}
}
 
if(flag)
addMessage(errors, httpServletRequest, "survey.submit.form.error.question.options.need.labels",Integer.toString(i));
 
}
i++;
}
}
}
else if(httpServletRequest.getParameter("dispatch").equals("answer"))
{
int i = 1;
for(SurveyQuestionView qView : surveyView.getQuestions())
{
boolean flagM = false;
for(SurveyQuestionItemView iView : qView.getItems())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_TEXT) && qView.isRequired() && (iView.getTextareaValue() == null || iView.getTextareaValue().length() == 0))
addMessage(errors, httpServletRequest, "survey.answer.form.error.answer.question.required",Integer.toString(i));
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO) && qView.isRequired() && iView.getRadioValue() == null)
addMessage(errors, httpServletRequest, "survey.answer.form.error.answer.question.required",Integer.toString(i));
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) && qView.isRequired())
{
boolean flagC = false;
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
if(cView.isCheckbox())
flagC = true;
}
 
if(!flagC)
addMessage(errors, httpServletRequest, "survey.answer.form.error.answer.question.required",Integer.toString(i));
}
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX) && qView.isRequired() && iView.getRadioValue() == null)
{
flagM = true;
}
}
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX) && flagM)
addMessage(errors, httpServletRequest, "survey.answer.form.error.answer.question.required",Integer.toString(i));
 
i++;
}
}
 
return errors;
}
}
/impl/src/java/pt/estgp/estgweb/web/Globals.java
2,8 → 2,6
 
import pt.estgp.estgweb.utils.ConfigProperties;
 
import javax.servlet.http.HttpServletRequest;
 
/**
* @author Fabio
* @date 31/Mar/2008
15,7 → 13,7
 
public static final String SITE_URL = ConfigProperties.getProperty("site.url");
 
public static final String BACO_SESSION_COOKIE = "BACOSESSIONID";
public static final String BACO_SESSION_COOKIE = "JSESSIONID";
private static final String PORTAL_MENU_START_LINK_START = "/proxy/";
private static final String PORTAL_MENU_START_LINK_END = "/estgp/public/portal";
private static final String PUBLIC_MENU_START_LINK_END = "/estgp/public";
/impl/src/java/pt/estgp/estgweb/web/controllers/surveys/SurveysController.java
New file
0,0 → 1,687
package pt.estgp.estgweb.web.controllers.surveys;
 
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.Globals;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.controllers.AddRolesController;
import pt.estgp.estgweb.web.form.surveys.SurveysForm;
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.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
* @author: Duarte Santos
* @date: 27-05-2011
* @time: 15:31
* @email: a12564 [at] estgp [dot] pt
*/
 
public class SurveysController extends AddRolesController
{
private static final Logger logger = Logger.getLogger(SurveysController.class);
 
@Override
protected ActionForward unspecified(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
return mapping.getInputForward();
}
 
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
SurveysForm surveyForm = (SurveysForm) form;
 
SurveyView view = surveyForm.getSurveyView();
view.setStartDate(DatesUtils.getDateFromString(surveyForm.getStartDate()));
view.setEndDate(DatesUtils.getDateFromString(surveyForm.getEndDate()));
 
for(SurveyQuestionView qView : view.getQuestions())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
for(SurveyQuestionItemView iView : qView.getItems())
{
int index = 0;
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
cView.setLabelpt(qView.getCandidatesLabels().get(index).getLabelpt());
index++;
}
}
}
}
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {view,request};
boolean newSurvey = true;
if(view.getId() > 0)
newSurvey = false;
 
SurveyView surveyView;
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"CreateEditSurvey",args,names);
 
surveyForm.setSurveyView(surveyView);
 
if(surveyView != null)
{
if(newSurvey)
addMessage(request, "survey.message.created.success");
else
addMessage(request, "survey.message.edited.success");
}
return mapping.findForward("serviceZone");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward changeSurveyType(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
// This action dont really do anything, its only to update the form
 
return mapping.getInputForward();
}
 
public ActionForward addQuestion(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
long id1 = surveyForm.getCounterAndDec();
 
SurveyQuestionView qView = new SurveyQuestionView();
qView.setId(id1);
qView.setRequired(false);
qView.setType(surveyForm.getQuestionType());
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_TEXT))
{
SurveyQuestionItemView iView = new SurveyQuestionItemView();
iView.setId(surveyForm.getCounterAndDec());
SurveyQuestionCandidateAnswerView cView = new SurveyQuestionCandidateAnswerView();
cView.setId(surveyForm.getCounterAndDec());
cView.setType(qView.getType());
iView.getCandidates().add(cView);
qView.getItems().add(iView);
}
else if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) || qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO))
{
SurveyQuestionItemView iView = new SurveyQuestionItemView();
iView.setId(surveyForm.getCounterAndDec());
qView.getItems().add(iView);
}
 
surveyView.getQuestions().add(qView);
 
return mapping.getInputForward();
}
 
public ActionForward removeQuestion(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
 
if(request.getParameter("questionId") != null)
{
int questionIndex = Integer.parseInt(request.getParameter("questionId"));
 
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex);
 
String questionsToDelete = surveyView.getDeletedQuestions()+qView.getId()+",";
String itemsToDelete = surveyView.getDeletedItems();
String candidatesToDelete = surveyView.getDeletedCandidates();
 
for(SurveyQuestionItemView iView : qView.getItems())
{
itemsToDelete = itemsToDelete+iView.getId()+",";
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
candidatesToDelete = candidatesToDelete+cView.getId()+",";
}
}
 
surveyView.setDeletedQuestions(questionsToDelete);
surveyView.setDeletedItems(itemsToDelete);
surveyView.setDeletedCandidates(candidatesToDelete);
 
surveyView.getQuestions().remove(questionIndex);
}
 
return mapping.getInputForward();
}
 
public ActionForward addItemOption(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
long id = surveyForm.getCounterAndDec();
 
if(request.getParameter("questionId") != null)
{
int questionIndex = Integer.parseInt(request.getParameter("questionId"));
 
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex);
SurveyQuestionItemView iView = new SurveyQuestionItemView();
iView.setId(id);
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
for(SurveyQuestionCandidateAnswerView candidateLabel : qView.getCandidatesLabels())
{
SurveyQuestionCandidateAnswerView cView = new SurveyQuestionCandidateAnswerView();
cView.setId(surveyForm.getCounterAndDec());
iView.getCandidates().add(cView);
}
}
 
qView.getItems().add(iView);
}
 
return mapping.getInputForward();
}
 
public ActionForward removeItemOption(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
 
if(request.getParameter("questionId") != null && request.getParameter("itemId") != null)
{
int questionIndex = Integer.parseInt(request.getParameter("questionId"));
int itemIndex = Integer.parseInt(request.getParameter("itemId"));
 
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex);
SurveyQuestionItemView iView = qView.getItems().get(itemIndex);
 
String itemsToDelete = ""+iView.getId()+",";
String candidatesToDelete = "";
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
candidatesToDelete = candidatesToDelete+cView.getId()+",";
}
 
surveyView.setDeletedItems(surveyView.getDeletedItems().concat(itemsToDelete));
surveyView.setDeletedCandidates(surveyView.getDeletedCandidates().concat(candidatesToDelete));
 
qView.getItems().remove(itemIndex);
}
 
return mapping.getInputForward();
}
 
public ActionForward addCandidateOption(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
 
if(request.getParameter("questionId") != null)
{
int questionIndex = Integer.parseInt(request.getParameter("questionId"));
 
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex);
 
if(!qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_TEXT) && qView.getItems().size() == 0)
{
addError(request,"survey.submit.form.error.question.need.hoption.first");
return mapping.getInputForward();
}
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
qView.getCandidatesLabels().add(new SurveyQuestionCandidateAnswerView());
 
for(SurveyQuestionItemView iView : qView.getItems())
{
long id = surveyForm.getCounterAndDec();
SurveyQuestionCandidateAnswerView cView = new SurveyQuestionCandidateAnswerView();
cView.setId(id);
cView.setType(qView.getType());
iView.getCandidates().add(cView);
}
}
 
return mapping.getInputForward();
}
 
public ActionForward removeCandidateOption(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveyForm = (SurveysForm) form;
SurveyView surveyView = surveyForm.getSurveyView();
 
if(request.getParameter("questionId") != null && request.getParameter("candidateId") != null)
{
int questionIndex = Integer.parseInt(request.getParameter("questionId"));
int candidateIndex = Integer.parseInt(request.getParameter("candidateId"));
 
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex);
 
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
qView.getCandidatesLabels().remove(candidateIndex);
 
String candidatesToDelete = "";
for(SurveyQuestionItemView iView : qView.getItems())
{
SurveyQuestionCandidateAnswerView cView = iView.getCandidates().get(candidateIndex);
iView.getCandidates().remove(candidateIndex);
candidatesToDelete = candidatesToDelete+cView.getId()+",";
}
 
surveyView.setDeletedCandidates(surveyView.getDeletedCandidates().concat(candidatesToDelete));
}
 
return mapping.getInputForward();
}
 
public ActionForward edit(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try {
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {new Long(request.getParameter("id"))};
 
SurveyView view;
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadEditSurvey",args,names);
 
if(view != null)
{
SurveysForm surveysForm = (SurveysForm) form;
surveysForm.setStartDate(DatesUtils.getStringFromDate(view.getStartDate()));
surveysForm.setEndDate(DatesUtils.getStringFromDate(view.getEndDate()));
 
for(SurveyQuestionView qView : view.getQuestions())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
SurveyQuestionItemView iView = qView.getItems().get(0);
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
SurveyQuestionCandidateAnswerView cViewAux = new SurveyQuestionCandidateAnswerView();
cViewAux.setLabelpt(cView.getLabelpt());
qView.getCandidatesLabels().add(cViewAux);
}
}
}
 
surveysForm.setSurveyView(view);
 
return mapping.getInputForward();
}
return mapping.findForward("serviceZone");
}
catch(FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward clone(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try {
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {new Long(request.getParameter("id"))};
 
SurveyView surveyView;
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadCloneSurvey",args,names);
 
if(surveyView != null)
{
SurveysForm surveysForm = (SurveysForm) form;
surveysForm.setStartDate(null);
surveysForm.setEndDate(null);
 
surveyView.setId(surveysForm.getCounterAndDec());
surveyView.setTitle(null);
 
for(SurveyQuestionView qView : surveyView.getQuestions())
{
qView.setId(surveysForm.getCounterAndDec());
for(SurveyQuestionItemView iView : qView.getItems())
{
iView.setId(surveysForm.getCounterAndDec());
for(SurveyQuestionCandidateAnswerView aView : iView.getCandidates())
{
aView.setId(surveysForm.getCounterAndDec());
}
}
}
 
for(SurveyQuestionView qView : surveyView.getQuestions())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
SurveyQuestionItemView iView = qView.getItems().get(0);
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
SurveyQuestionCandidateAnswerView cViewAux = new SurveyQuestionCandidateAnswerView();
cViewAux.setLabelpt(cView.getLabelpt());
qView.getCandidatesLabels().add(cViewAux);
}
}
}
 
surveysForm.setSurveyView(surveyView);
 
return mapping.getInputForward();
}
return mapping.findForward("serviceZone");
}
catch(FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward consist(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try {
IServiceManager sm = ServiceManager.getInstance();
 
String[] names = {"serializable"};
Object[] args = {new Long(request.getParameter("id")),request};
 
sm.execute(RequestUtils.getRequester(request,response),"ConsistSurvey",args,names);
 
addMessage(request,"survey.message.operation.started");
 
return mapping.findForward("serviceZone");
}
catch(FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
 
}
 
public ActionForward generateStats(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {new Long(request.getParameter("id")),request};
sm.execute(RequestUtils.getRequester(request,response),"GenerateSurveyStats",args,names);
 
addMessage(request,"survey.message.operation.started");
 
return mapping.findForward("serviceZone");
}
catch(FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward listStats(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {new Long(request.getParameter("id"))};
 
SurveyView view;
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadListStatsSurvey",args,names);
 
if(view != null)
{
request.setAttribute("SurveyView",view);
return mapping.findForward("stats");
}
return mapping.findForward("serviceZone");
}
catch(FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward loadResponse(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveysForm = (SurveysForm) form;
 
try
{
long resp = Long.parseLong(request.getParameter("resp"));
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {resp};
 
SurveyResponseView surveyResponseView;
surveyResponseView = (SurveyResponseView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurveyResponse",args,names);
 
if(surveyResponseView != null)
{
surveysForm.setSurveyResponseView(surveyResponseView);
 
String[] names2 = {"serializable"};
Object[] args2 = {surveyResponseView.getStructuralNodeView().getSurveyView().getId()};
 
SurveyView surveyView;
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args2,names2);
 
if(surveyView != null)
{
for(SurveyQuestionView qView : surveyView.getQuestions())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
SurveyQuestionItemView iView = qView.getItems().get(0);
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
SurveyQuestionCandidateAnswerView cViewAux = new SurveyQuestionCandidateAnswerView();
cViewAux.setLabelpt(cView.getLabelpt());
qView.getCandidatesLabels().add(cViewAux);
}
}
}
 
surveysForm.setSurveyView(surveyView);
 
return mapping.findForward("response");
}
}
return mapping.findForward("serviceZone");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward answer(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
SurveysForm surveysForm = (SurveysForm) form;
 
SurveyView sView = surveysForm.getSurveyView();
SurveyResponseView rView = surveysForm.getSurveyResponseView();
 
for(SurveyQuestionView qView : sView.getQuestions())
{
for(SurveyQuestionItemView iView : qView.getItems())
{
SurveyQuestionAnswerView aView = new SurveyQuestionAnswerView();
aView.setId(-1);
 
for(SurveyQuestionCandidateAnswerView cView : iView.getCandidates())
{
if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_TEXT))
{
String textValue = iView.getTextareaValue();
if(textValue != null && textValue.length() > 0)
{
aView.setTextAnswer(textValue);
aView.setCandidateAnswer(cView);
cView.getAnswers().add(aView);
}
}
else if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO) || qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX))
{
String radioValue = iView.getRadioValue();
if(radioValue != null)
{
long cId = Long.parseLong(iView.getRadioValue());
if(cView.getId() == cId)
{
aView.setCandidateAnswer(cView);
cView.getAnswers().add(aView);
}
}
}
else if(qView.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK))
{
if(cView.isCheckbox())
{
SurveyQuestionAnswerView aView2 = new SurveyQuestionAnswerView();
aView2.setId(-1);
aView2.setCandidateAnswer(cView);
cView.getAnswers().add(aView2);
}
}
}
}
}
 
try
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"serializable"};
Object[] args = {rView.getId(),sView};
 
SurveyView surveyView;
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"InsertSurveyAnswers",args,names);
 
if(surveyView != null)
{
addMessage(request, "survey.message.answered.success");
}
return mapping.findForward("home");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java
5,7 → 5,6
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService;
14,8 → 13,6
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.courses.CourseForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.utils.AreasBelongUtils;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException;
80,6 → 77,32
cF.setCourseView(cV);
}
 
public ActionForward loadPlan(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
load((CourseForm) form,request,response);
return mapping.findForward("loadPlan");
}
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 load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
106,6 → 129,61
}
}
 
 
public ActionForward loadSeparators(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
load((CourseForm) form,request,response);
return mapping.findForward("loadSeparators");
}
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 loadMenu(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
load((CourseForm) form,request,response);
return mapping.findForward("loadMenu");
}
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 edit(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
/impl/src/java/pt/estgp/estgweb/web/filters/CookieFilter.java
73,7 → 73,10
}
else
{
//ALTERACOES REUNIAO BACO CODIGO 01062011
//System.out.println("AQUIIIII>>>"+((HttpServletRequest)request).getContextPath() + ((HttpServletRequest) request).getServletPath() + "?" +((HttpServletRequest) request).getQueryString());
((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath() + "/Welcome.do");
//((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath() + ((HttpServletRequest) request).getServletPath() + "?" +((HttpServletRequest) request).getQueryString());
}
}
 
/impl/src/java/pt/estgp/estgweb/web/filters/UserFilter.java
1,19 → 1,14
package pt.estgp.estgweb.web.filters;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Locale;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.estgp.estgweb.Globals;
 
/**
*
* @author Jorge Machado
49,8 → 44,13
chain.doFilter(request,response);
 
UserSessionImpl userSession = (UserSessionImpl) request.getAttribute(Globals.USER_SESSION_KEY);
if(userSession.getUser() != null)
 
if(userSession != null && userSession.getUser() != null)
chain.doFilter(request,response);
else if(userSession == null)
{
logger.info("User lost Session");
}
else
{
((HttpServletResponse)response).sendError(401);
/impl/src/java/pt/estgp/estgweb/web/filters/UserSessionFilter.java
3,21 → 3,17
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.*;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.List;
 
/**
*
92,7 → 88,11
}
 
if(((HttpServletRequest)request).getServletPath().indexOf("errorNoCookies.do")>=0 || !hrequest.isRequestedSessionIdFromCookie())
{
chain.doFilter(request,response);
logger.info("COOKIE lost");
return;
}
try
{
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(hrequest,((HttpServletResponse) response));
/impl/src/updates/db/update10Surveys.sql
New file
0,0 → 1,167
 
DROP TABLE IF EXISTS `surveystructuralnode`;
CREATE TABLE `surveystructuralnode` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`msg` varchar(255) default NULL,
`msgKey` varchar(255) default NULL,
`myKey` varchar(255) default NULL,
`parentNode` bigint(20) default NULL,
`survey` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `msgKeyIndex` (`msgKey`),
KEY `myKeyIndex` (`myKey`),
KEY `msgIndex` (`msg`),
KEY `FK9A3D3A3991D39EEB` (`parentNode`),
KEY `FK9A3D3A39383CD3FA` (`survey`),
CONSTRAINT `FK_surveystructuralnode_1` FOREIGN KEY (`parentNode`) REFERENCES `surveystructuralnode` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
DROP TABLE IF EXISTS `survey`;
CREATE TABLE `survey` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`updateDate` datetime NOT NULL,
`title` varchar(255) default NULL,
`saveDate` datetime default NULL,
`startDate` datetime default NULL,
`endDate` datetime default NULL,
`type` varchar(255) default NULL,
`targetRoles` varchar(255) default NULL,
`statsConsultRoles` varchar(255) default NULL,
`year` varchar(255) default NULL,
`semester` varchar(255) default NULL,
`status` varchar(255) default NULL,
`owner` bigint(20) default NULL,
`structuralNode` bigint(20) default NULL,
`identifier` varchar(255) default NULL,
`statusPercentage` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `FKCAE3A75AFF83C59E` (`structuralNode`),
KEY `FKCAE3A75A410CFD44` (`owner`),
KEY `FKCAE3A75A52876F6F` (`owner`),
CONSTRAINT `FKCAE3A75A410CFD44` FOREIGN KEY (`owner`) REFERENCES `user` (`id`),
CONSTRAINT `FKCAE3A75A52876F6F` FOREIGN KEY (`owner`) REFERENCES `user` (`id`),
CONSTRAINT `FKCAE3A75AFF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
 
--
-- Table structure for table `surveyresponse`
--
 
DROP TABLE IF EXISTS `surveyresponse`;
CREATE TABLE `surveyresponse` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`date` datetime default NULL,
`answered` bit(1) default NULL,
`structuralNode` bigint(20) default NULL,
`owner` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FKE812C19BFF83C59E` (`structuralNode`),
KEY `FKE812C19B410CFD44` (`owner`),
KEY `FKE812C19B52876F6F` (`owner`),
CONSTRAINT `FKE812C19B410CFD44` FOREIGN KEY (`owner`) REFERENCES `user` (`id`),
CONSTRAINT `FKE812C19B52876F6F` FOREIGN KEY (`owner`) REFERENCES `user` (`id`),
CONSTRAINT `FKE812C19BFF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
 
--
-- Table structure for table `surveyquestion`
--
 
DROP TABLE IF EXISTS `surveyquestion`;
CREATE TABLE `surveyquestion` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`labelpt` varchar(255) default NULL,
`labelen` varchar(255) default NULL,
`required` bit(1) default NULL,
`type` varchar(255) default NULL,
`survey` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FKB6DDE940383CD3FA` (`survey`),
CONSTRAINT `FKB6DDE940383CD3FA` FOREIGN KEY (`survey`) REFERENCES `survey` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
 
 
DROP TABLE IF EXISTS `surveyquestionitem`;
CREATE TABLE `surveyquestionitem` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`labelpt` varchar(255) default NULL,
`labelen` varchar(255) default NULL,
`question` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FKD778C453EB11688C` (`question`),
CONSTRAINT `FKD778C453EB11688C` FOREIGN KEY (`question`) REFERENCES `surveyquestion` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
 
--
-- Table structure for table `surveyquestionanswer`
--
 
DROP TABLE IF EXISTS `surveyquestioncandidateanswer`;
CREATE TABLE `surveyquestioncandidateanswer` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`labelpt` varchar(255) default NULL,
`labelen` varchar(255) default NULL,
`type` varchar(255) default NULL,
`questionItem` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FK5692D5C1BC26ACD2` (`questionItem`),
CONSTRAINT `FK5692D5C1BC26ACD2` FOREIGN KEY (`questionItem`) REFERENCES `surveyquestionitem` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
DROP TABLE IF EXISTS `surveyquestionanswer`;
CREATE TABLE `surveyquestionanswer` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`textAnswer` varchar(255) default NULL,
`candidateAnswer` bigint(20) default NULL,
`response` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FKCE6438FE4D7B1942` (`response`),
KEY `FKCE6438FEDB91A49C` (`candidateAnswer`),
CONSTRAINT `FKCE6438FE4D7B1942` FOREIGN KEY (`response`) REFERENCES `surveyresponse` (`id`),
CONSTRAINT `FKCE6438FEDB91A49C` FOREIGN KEY (`candidateAnswer`) REFERENCES `surveyquestioncandidateanswer` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
--
-- Table structure for table `surveyquestioncandidateanswer`
--
 
 
--
-- Table structure for table `surveyquestionitem`
--
 
 
--
-- Table structure for table `surveystatsgraphic`
--
 
DROP TABLE IF EXISTS `surveystatsgraphic`;
CREATE TABLE `surveystatsgraphic` (
`id` bigint(20) NOT NULL auto_increment,
`discriminator` varchar(255) NOT NULL,
`identifier` varchar(255) default NULL,
`question` bigint(20) default NULL,
`structuralNode` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `FK47D2BDC3EB11688C` (`question`),
KEY `FK47D2BDC3FF83C59E` (`structuralNode`),
CONSTRAINT `FK47D2BDC3EB11688C` FOREIGN KEY (`question`) REFERENCES `surveyquestion` (`id`),
CONSTRAINT `FK47D2BDC3FF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`)
) ENGINE=Innodb DEFAULT CHARSET=latin1;
 
--
-- Table structure for table `surveystructuralnode`
--
 
 
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="superuser" type="boolean"/>
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/>
72,6 → 72,14
<key column="owner"/>
<one-to-many class="pt.estgp.estgweb.domain.ManagedIdentifierCollection"/>
</set>
<set name="mySurveys" lazy="true" order-by="id asc">
<key column="owner"/>
<one-to-many class="pt.estgp.estgweb.domain.Survey"/>
</set>
<set name="mySurveyResponses" lazy="true" order-by="id asc">
<key column="owner"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyResponse"/>
</set>
<subclass name="pt.estgp.estgweb.domain.UserImpl" discriminator-value="UserImpl">
<subclass name="pt.estgp.estgweb.domain.UserManagedRoleImpl">
<subclass name="pt.estgp.estgweb.domain.SigesUser">
/impl/src/hbm/pt/estgp/estgweb/domain/Record.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="title" type="string" index="titleIndex"/>
<property name="type" type="string" index="typeIndex"/>
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatYear.hbm.xml
13,7 → 13,7
<key-many-to-one name="urlStat" class="pt.estgp.estgweb.domain.UrlStat" column="relativePath"/>
</composite-id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="totalClicks" type="integer"/>
<set name="months" order-by="month asc" lazy="true" cascade="all" inverse="true">
/impl/src/hbm/pt/estgp/estgweb/domain/RepositoryFile.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" outer-join="true" lazy="proxy"/>
<many-to-one name="lastVersion" class="pt.estgp.estgweb.domain.RepositoryFileVersion" outer-join="true" lazy="false"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Image.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string"/>
<property name="contentType" type="string"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Blog.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string" unique="true" index="nameIndex"/>
<property name="title" type="string"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Teste.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string"/>
<property name="morada" type="string"/>
/impl/src/hbm/pt/estgp/estgweb/domain/BlogPost.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="month" type="int"/>
<property name="year" type="int"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Announcement.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="startDate" type="timestamp"/>
<property name="expireDate" type="timestamp"/>
/impl/src/hbm/pt/estgp/estgweb/domain/SruSource.hbm.xml
12,7 → 12,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string"/>
<property name="collectionField" column="collection_field" type="string"/>
34,7 → 34,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="collection" type="string"/>
<property name="admitedRoles" type="string" column="admited_roles"/>
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatDay.hbm.xml
17,7 → 17,7
</key-many-to-one>
</composite-id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="date" type="date"/>
<property name="totalClicks" type="integer"/>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUserAssociation.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="role" type="string"/>
<many-to-one name="user" class="pt.estgp.estgweb.domain.User" outer-join="true" column="user_id"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Survey.hbm.xml
New file
0,0 → 1,164
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
<class name="pt.estgp.estgweb.domain.Survey" table="survey" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="title" type="string"/>
<property name="saveDate" type="timestamp"/>
<property name="startDate" type="timestamp"/>
<property name="endDate" type="timestamp"/>
<property name="type" type="string"/>
<property name="targetRoles" type="string"/>
<property name="statsConsultRoles" type="string"/>
<property name="year" type="string"/>
<property name="semester" type="string"/>
<property name="statusPercentage" type="int"/>
<property name="status" type="string"/>
<property name="identifier" type="string"/>
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" lazy="false" outer-join="true"/>
<many-to-one name="structuralNode" class="pt.estgp.estgweb.domain.SurveyStructuralNode" lazy="false" outer-join="true"/>
<set name="questions" lazy="true" order-by="id asc">
<key column="survey"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyQuestion"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyImpl" discriminator-value="SurveyImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyStructuralNode" table="surveystructuralnode" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="msg" type="string" index="msgIndex"/>
<property name="msgKey" type="string" index="msgKeyIndex"/>
<property name="myKey" type="string" index="myKeyIndex"/>
<many-to-one name="parentNode" class="pt.estgp.estgweb.domain.SurveyStructuralNode" lazy="false" outer-join="true"/>
<many-to-one name="survey" class="pt.estgp.estgweb.domain.Survey" lazy="false" outer-join="true"/>
<set name="nodes" lazy="true" order-by="id asc">
<key column="parentNode"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyStructuralNode"/>
</set>
<set name="responses" lazy="true" order-by="id asc">
<key column="structuralNode"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyResponse"/>
</set>
<set name="graphics" lazy="true" order-by="id asc">
<key column="structuralNode"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyStatsGraphic"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyStructuralNodeImpl" discriminator-value="SurveyStructuralNodeImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyResponse" table="surveyresponse" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="date" type="timestamp"/>
<property name="answered" type="boolean"/>
<many-to-one name="structuralNode" class="pt.estgp.estgweb.domain.SurveyStructuralNode" lazy="false" outer-join="true"/>
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" lazy="false" outer-join="true"/>
<set name="answers" lazy="true" order-by="id asc">
<key column="response"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyQuestionAnswer"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyResponseImpl" discriminator-value="SurveyResponseImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyQuestion" table="surveyquestion" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="labelpt" type="string"/>
<property name="labelen" type="string"/>
<property name="required" type="boolean"/>
<property name="type" type="string"/>
<many-to-one name="survey" class="pt.estgp.estgweb.domain.Survey" lazy="false" outer-join="true"/>
<set name="questionItems" lazy="true" order-by="id asc">
<key column="question"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyQuestionItem"/>
</set>
<set name="graphics" lazy="true" order-by="id asc">
<key column="question"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyStatsGraphic"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyQuestionImpl" discriminator-value="SurveyQuestionImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyQuestionItem" table="surveyquestionitem" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="labelpt" type="string"/>
<property name="labelen" type="string"/>
<many-to-one name="question" class="pt.estgp.estgweb.domain.SurveyQuestion" lazy="false" outer-join="true"/>
<set name="candidadeAnswers" lazy="true" order-by="id asc">
<key column="questionItem"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswer"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyQuestionItemImpl" discriminator-value="SurveyQuestionItemImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswer" table="surveyquestioncandidateanswer" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="labelpt" type="string"/>
<property name="labelen" type="string"/>
<property name="type" type="string"/>
<many-to-one name="questionItem" class="pt.estgp.estgweb.domain.SurveyQuestionItem" lazy="false" outer-join="true"/>
<set name="answers" lazy="true" order-by="id asc">
<key column="candidateAnswer"/>
<one-to-many class="pt.estgp.estgweb.domain.SurveyQuestionAnswer"/>
</set>
<subclass name="pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswerImpl" discriminator-value="SurveyQuestionCandidateAnswerImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyQuestionAnswer" table="surveyquestionanswer" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="textAnswer" type="string"/>
<many-to-one name="candidateAnswer" class="pt.estgp.estgweb.domain.SurveyQuestionCandidateAnswer" lazy="false" outer-join="true"/>
<many-to-one name="response" class="pt.estgp.estgweb.domain.SurveyResponse" lazy="false" outer-join="true"/>
<subclass name="pt.estgp.estgweb.domain.SurveyQuestionAnswerImpl" discriminator-value="SurveyQuestionAnswerImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.SurveyStatsGraphic" table="surveystatsgraphic" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
<property name="identifier" type="string"/>
<many-to-one name="question" class="pt.estgp.estgweb.domain.SurveyQuestion" lazy="false" outer-join="true"/>
<many-to-one name="structuralNode" class="pt.estgp.estgweb.domain.SurveyStructuralNode" lazy="false" outer-join="true"/>
<subclass name="pt.estgp.estgweb.domain.SurveyStatsGraphicImpl" discriminator-value="SurveyStatsGraphicImpl"/>
</class>
</hibernate-mapping>
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStat.hbm.xml
11,7 → 11,7
<generator class="assigned"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="text"/>
<property name="description" type="text"/>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="semestre" type="string" index="semestreIndex"/>
<property name="name" type="string" index="nameIndex"/>
68,7 → 68,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="question" type="text"/>
<property name="answer" type="text"/>
85,7 → 85,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="deliverDate" type="timestamp"/>
<property name="deliverType" type="string"/>
109,7 → 109,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="deliverDate" type="timestamp"/>
<property name="grade" type="string"/>
131,7 → 131,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="publishDate" type="timestamp"/>
<property name="grade" type="int" index="gradeIndex"/>
150,7 → 150,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="dataAula" type="timestamp"/>
<property name="tipoAula" type="string"/>
173,7 → 173,7
<!--<generator class="native"/>-->
<!--</id>-->
<!--<discriminator column="discrimitator"/>-->
<!--<timestamp name="updateDate" unsaved-value="null"/>-->
<!--<timestamp source="db" name="updateDate" unsaved-value="null"/>-->
<!--<property name="saveDate" type="timestamp"/>-->
<!--<property name="deliverDate" type="timestamp"/>-->
<!--<property name="deliverType" type="string"/>-->
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string"/>
<property name="description" type="text"/>
/impl/src/hbm/pt/estgp/estgweb/domain/IdentifiersManagement.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="sequenceNumber" type="long"/>
<property name="description" type="text"/>
27,7 → 27,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="name" type="string"/>
<property name="sequenceNumber" type="long"/>
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatMonth.hbm.xml
16,7 → 16,7
</key-many-to-one>
</composite-id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="date" type="date"/>
<property name="totalClicks" type="integer"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Reminder.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="startDate" type="timestamp"/>
<property name="expireDate" type="timestamp"/>
/impl/src/hbm/pt/estgp/estgweb/domain/SessionObject.hbm.xml
16,7 → 16,7
</key-many-to-one>
</composite-id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="type" type="string"/>
<property name="object" type="java.io.Serializable">
/impl/src/hbm/pt/estgp/estgweb/domain/Job.hbm.xml
11,7 → 11,7
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<timestamp source="db" name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="startDate" type="timestamp" index="startDateIndex"/>
<property name="description" type="string"/>
/impl/src/web/imgs/openedMinus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/imgs/radiobox.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/imgs/closedPlus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/imgs/checkbox.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/admin/surveys/submitSurvey.jsp
New file
0,0 → 1,334
<%@ page import="pt.estgp.estgweb.web.form.surveys.SurveysForm" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<jsp:useBean id="SurveysForm" type="pt.estgp.estgweb.web.form.surveys.SurveysForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
<%
String fromAction = "";
String from = "";
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
from = "?from=" + request.getParameter("from");
}
request.setAttribute("from", from);
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
%>
<html:form action="${user}/submitSurvey${fromAction}${from}">
<html:hidden property="surveyView.id"/>
<html:hidden property="surveyView.deletedQuestions"/>
<html:hidden property="surveyView.deletedItems"/>
<html:hidden property="surveyView.deletedCandidates"/>
<html:hidden property="counter"/>
<input type="hidden" name="dispatch">
<input type="hidden" name="questionId"/>
<input type="hidden" name="itemId"/>
<input type="hidden" name="candidateId"/>
 
<table class="form">
<tr>
<th>
<bean:message key="survey.submit.form.title"/>
*
</th>
<td>
<html:text property="surveyView.title"/>
</td>
</tr>
<tr>
<th>
<bean:message key="survey.submit.form.type"/>
</th>
<td>
<logic:greaterThan name="SurveysForm" property="surveyView.id" value="0">
<html:hidden property="surveyView.type"/>
<bean:message key="surveys.type.${SurveysForm.surveyView.type}"/>
</logic:greaterThan>
 
<logic:lessEqual name="SurveysForm" property="surveyView.id" value="0">
<html:select property="surveyView.type" onchange="set(this.form,'changeSurveyType');this.form.submit();">
<logic:present name="SurveysForm" property="surveyTypes">
<logic:iterate id="type" name="SurveysForm" property="surveyTypes">
<html:option value="${type}">
<bean:message key="surveys.type.${type}"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</logic:lessEqual>
</td>
</tr>
<logic:equal value="general" property="surveyView.type" name="SurveysForm">
<tr>
<th>
<bean:message key="survey.submit.form.target.roles"/>
</th>
<td>
<logic:greaterThan name="SurveysForm" property="surveyView.id" value="0">
<html:hidden property="surveyView.targetRoles"/>
<bean:message key="user.role.${SurveysForm.surveyView.targetRoles}"/>
</logic:greaterThan>
 
<logic:lessEqual name="SurveysForm" property="surveyView.id" value="0">
<html:select property="surveyView.targetRoles">
<logic:present name="SurveysForm" property="surveyTargetRoles">
<logic:iterate id="target" name="SurveysForm" property="surveyTargetRoles">
<html:option value="${target}">
<bean:message key="user.role.${target}"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</logic:lessEqual>
</td>
</tr>
</logic:equal>
 
<logic:equal value="pedagogic" property="surveyView.type" name="SurveysForm">
<tr>
<th>
<bean:message key="survey.submit.form.target.roles"/>
</th>
<td>
<logic:greaterThan name="SurveysForm" property="surveyView.id" value="0">
<html:hidden property="surveyView.targetRoles"/>
<bean:message key="surveys.target.pair.${SurveysForm.surveyView.targetRoles}"/>
</logic:greaterThan>
 
<logic:lessEqual name="SurveysForm" property="surveyView.id" value="0">
<html:select property="surveyView.targetRoles">
<logic:present name="SurveysForm" property="surveyTargetPairs">
<logic:iterate id="target" name="SurveysForm" property="surveyTargetPairs">
<html:option value="${target}">
<bean:message key="surveys.target.pair.${target}"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</logic:lessEqual>
</td>
</tr>
</logic:equal>
 
<tr>
<th>
<bean:message key="survey.submit.form.stats.consult.roles"/>
</th>
<td>
<html:select property="surveyView.statsConsultRoles">
<html:option value="owner">
<bean:message key="surveys.stats.consult.owner"/>
</html:option>
<logic:present name="SurveysForm" property="surveyStatsConsultRoles">
<logic:iterate id="consult" name="SurveysForm" property="surveyStatsConsultRoles">
<html:option value="${consult}">
<bean:message key="user.role.${consult}"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</td>
</tr>
 
<tr>
<th>
<bean:message key="survey.submit.form.start.date"/>
</th>
<td>
<a href="javascript:cal.select(getObjectById('startDate'),'anchord1','yyyy/MM/dd')" name="anchor1" id="anchord1"><html:text styleClass="date" property="startDate" styleId="startDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="SurveysForm.startDate.value=null;">
</td>
</tr>
 
<tr>
<th>
<bean:message key="survey.submit.form.end.date"/>
*
</th>
<td>
<a href="javascript:cal.select(getObjectById('endDate'),'anchord2','yyyy/MM/dd')" name="anchor2" id="anchord2"><html:text styleClass="date" property="endDate" styleId="endDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="SurveysForm.endDate.value=null;">
</td>
</tr>
</table>
 
<bean:message key="survey.submit.form.questions"/>
 
<hr>
 
<input type="hidden" name="questionsListSize" value="<%=((SurveysForm)request.getAttribute("SurveysForm")).getSurveyView().getQuestions().size()%>">
<nested:iterate id="questionView" name="SurveysForm" property="surveyView.questions" indexId="qId">
<table class="form">
<input type="hidden" name="itemsListSize${qId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().size()%>"/>
<input type="hidden" name="candidatesLabelsSize${qId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getCandidatesLabels().size()%>"/>
<nested:hidden property="id"/>
<nested:hidden property="type"/>
<tr>
<th>
<a name="question${qId}"></a>
<a name="question${questionView.id}"></a>
<bean:message key="survey.submit.form.delete.question"/>
</th>
<td>
<input type="button" class="removeButton" value=""
onclick="SurveysForm.questionId.value='${qId}';confirmAction('Tem a certeza que deseja apagar?',this.form,'removeQuestion');"/>
</td>
</tr>
<tr>
<th>
<bean:message key="survey.submit.form.required.question"/>
</th>
<td>
<nested:checkbox property="required"/>
</td>
</tr>
<tr>
<th>
<bean:message key="survey.submit.form.question"/>
</th>
<td>
<nested:text property="labelpt"/>
</td>
</tr>
<nested:equal name="questionView" value="matrix" property="type">
<tr>
<th></th>
<td>
<table>
<tr>
<td></td>
<nested:iterate property="candidatesLabels" indexId="cId">
<td>
<nested:text property="labelpt" styleId="inputVertical"/>
<input type="button" class="removeButton" value=""
onclick="SurveysForm.questionId.value='${qId}';
SurveysForm.candidateId.value='${cId}';
set(this.form,'removeCandidateOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();"/>
</td>
</nested:iterate>
</tr>
<nested:iterate property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<tr>
<td>
<nested:hidden property="id"/>
<nested:text property="labelpt" styleId="inputHorizontal"/>
<input type="button" class="removeButton" value=""
onclick="SurveysForm.questionId.value='${qId}';
SurveysForm.itemId.value='${iId}';
set(this.form,'removeItemOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();"/>
</td>
<nested:iterate property="candidates">
<td align="center">
<nested:hidden property="id"/>
<img border="0" src="<%=request.getContextPath()%>/imgs/radiobox.png"/>
</td>
</nested:iterate>
</tr>
</nested:iterate>
</table>
</td>
</tr>
<tr>
<th></th>
<td>
<input type="button" value="<bean:message key="survey.submit.form.add.hoption"/>"
onclick="SurveysForm.questionId.value='${qId}';
set(this.form,'addItemOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();">
<input type="button" value="<bean:message key="survey.submit.form.add.voption"/>"
onclick="SurveysForm.questionId.value='${qId}';
set(this.form,'addCandidateOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();">
</td>
</tr>
</nested:equal>
 
<nested:notEqual name="questionView" value="matrix" property="type">
<nested:iterate property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<nested:hidden property="id"/>
<nested:iterate property="candidates" indexId="cId">
<nested:hidden property="id"/>
<nested:notEqual name="questionView" value="text" property="type">
<tr>
<th align="right">
<nested:equal name="questionView" value="radio" property="type">
<img border="0" src="<%=request.getContextPath()%>/imgs/radiobox.png"/>
</nested:equal>
<nested:equal name="questionView" value="check" property="type">
<img border="0" src="<%=request.getContextPath()%>/imgs/checkbox.png"/>
</nested:equal>
</th>
<td>
<nested:text property="labelpt" styleId="inputHorizontal"/>
<input type="button" class="removeButton" value=""
onclick="SurveysForm.questionId.value='${qId}';
SurveysForm.candidateId.value='${cId}';
set(this.form,'removeCandidateOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();"/>
</td>
</tr>
</nested:notEqual>
</nested:iterate>
</nested:iterate>
 
<nested:notEqual name="questionView" value="text" property="type">
<tr>
<th></th>
<td>
<input type="button" value="<bean:message key="survey.submit.form.add.hoption"/>"
onclick="SurveysForm.questionId.value='${qId}';
set(this.form,'addCandidateOption');
SurveysForm.action = SurveysForm.action+'#question${qId}';
this.form.submit();">
</td>
</tr>
</nested:notEqual>
</nested:notEqual>
</table>
</nested:iterate>
 
<br>
<br>
 
<bean:message key="survey.submit.form.add.question"/>
 
<html:select property="questionType">
<logic:present name="SurveysForm" property="surveyQuestionTypes">
<logic:iterate id="item" name="SurveysForm" property="surveyQuestionTypes">
<html:option value="${item}">
<bean:message key="surveys.question.type.${item}"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select>
 
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addQuestion');
SurveysForm.action = SurveysForm.action+'#question<%=SurveysForm.getCounter()%>';
this.form.submit();">
 
<hr>
<input type="button" value="<bean:message key="confirm"/>"
onclick="set(this.form,'save');this.form.submit();">
</html:form>
/impl/src/web/css/style.css
1817,3 → 1817,63
width:100%;
}
 
/* SURVEYS - Duarte Santos*/
.form #inputVertical
{
width:150px;
}
 
.form #inputHorizontal
{
width:300px;
}
 
textarea#surveyTextarea {
width: 400px;
height: 80px;
border: 1px solid #cccccc;
resize:none;
}
 
div#surveyRequiredQuestion {
font-size:10px;
color:#666666;
}
 
table#questionTable {
width:100%;
border:1px solid #cccccc;
margin-bottom:5px;
padding:5px;
background-color:#F7F7F7;
}
 
table#questionTable td,input{
vertical-align:middle;
}
 
table#questionTable .candidateCell {
text-align:center;
}
 
table#questionTable .questionLabelCell {
padding-bottom:8px;
border-bottom:1px solid #eeeeee;
}
 
div#loadNodeGraphs {
margin:10px;
}
 
div#loadNodeGraphsHeader {
margin-bottom:5px;
}
 
div#listSurveyStats {
margin:10px;
}
 
.nodeSection {
margin:5px;
}
 
/impl/src/web/css/intranet.css
97,4 → 97,3
}
 
 
 
/impl/src/web/js/functions.js
72,4 → 72,9
return confirm(msg);
}
 
function sett(form, obj, value)
{
form.obj.value = value;
}
 
 
/impl/src/web/layout/navigationLeftMenu.jsp
12,7 → 12,6
<div class="listClean">
<ul>
<li>
<a href="<%=request.getContextPath()%>/dir/student?role=student&menu=menu.alunos"><bean:message key="menu.alunos"/></a>
</li>
<li>
/impl/src/web/layout/navigationTop.jsp
70,6 → 70,8
<div class="shadow ">
<ul class="menu">
<li><a href="http://www.ipportalegre.pt/poliempreende/">Poliempreende</a></li>
<li><a href="http://www.essp.pt/Aliment_saudavel.php">alimentacao saudavel</a></li>
<li><a href="http://www.c3i.ipportalegre.pt/">C3i</a></li>
<!-- <li><a href="#">SGQ</a></li>
--> </ul>
</div>
/impl/src/web/public/courses/courseSeparators.jsp
New file
0,0 → 1,33
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.web.WebProxy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
 
<div class="seccao">
<h2>${CourseView.name} (<%=Globals.NATIONAL_INSTITUTION_CODE%> / ${CourseView.code})</h2>
 
 
<logic:notEmpty name="CourseView" property="formatedDescription"><p>${CourseView.formatedDescription}</p></logic:notEmpty>
<logic:notEmpty name="CourseView" property="externalSitePath">
<%
WebProxy.processHttpRequestService(out, CourseView.getExternalSiteServer(), CourseView.getExternalSitePath());
%>
</logic:notEmpty>
 
 
<%--<logic:notEmpty name="CourseView" property="cacheWebDocument">--%>
<%--<h3><bean:message key="course.studies.plan"/></h3>--%>
<%--<bean:write name="CourseView" property="cacheWebDocument" filter="no"/>--%>
<%--</logic:notEmpty>--%>
 
</div>
 
 
 
/impl/src/web/public/courses/courseMenu.jsp
New file
0,0 → 1,30
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%--<jsp:useBean id="typeKey" type="java.lang.String" scope="request"/>--%>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
<div class="linkMenuBlock">
<div class="linkMenuBlockTitle">
${CourseView.name}<%--<bean:message key="${typeKey}"/> (<bean:message key="course.studies.plan.users" />)--%>
</div>
<div class="linkLeftMenu">
<div class="listClean">
<ul>
<li><a href="<%=request.getContextPath() + "/startLoadCourseSeparators.do?content=home&type=" + CourseView.getDegree() + "&courseView.id=" + CourseView.getId()%>"><bean:message key="course.menu.home"/></a></li>
<li><html:link action="/startLoadCourseStudiesPlan?content=studiesplan&type=${CourseView.degree}&courseView.id=${CourseView.id}"><bean:message key="course.menu.studiesplan"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=internacionalicao"><bean:message key="course.menu.internacionalicao"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=labs"><bean:message key="course.menu.labs"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=actividades"><bean:message key="course.menu.actividades"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=casos"><bean:message key="course.menu.casos"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=parceiros"><bean:message key="course.menu.parceiros"/></html:link></li>
<li><html:link action="/startLoadMenuCourse?type=${CourseView.degree}&courseView.id=${CourseView.id}&content=faq"><bean:message key="course.menu.faq"/></html:link></li>
</ul>
</div>
</div>
</div>
/impl/src/web/public/courses/topnavCourse.jsp
6,7 → 6,15
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace("/courses.do?type=" + request.getAttribute("type"), "module.Courses");
topNav.addNavPlace(null, "course", CourseView.getName());
 
topNav.addNavPlace("/courses.do?type=" + CourseView.getDegree() , "course." + CourseView.getDegree());
if(request.getParameter("content")!= null)
{
topNav.addNavPlace("/startLoadCourseSeparators.do?content=home&type=" + CourseView.getDegree() + "&courseView.id=" + CourseView.getId() , "course.nav.without.arrow", CourseView.getName());
topNav.addNavPlace(null, "course.menu." + request.getParameter("content"));
}
else
topNav.addNavPlace(null, "course.nav.without.arrow", CourseView.getName());
 
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/courses/studiesPlan.jsp
New file
0,0 → 1,34
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.web.WebProxy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
 
<div class="seccao">
<h2><bean:message key="course.studies.plan"/></h2>
 
<logic:empty name="CourseView" property="cacheWebDocument">
<div class="seccao">
<h2>Unidades Curriculares</h2>
<ul>
<logic:iterate id="courseUnitView" name="CourseView" property="courseUnits" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
${courseUnitView.name}
</li>
</logic:iterate>
</ul>
</div>
</logic:empty>
<logic:notEmpty name="CourseView" property="cacheWebDocument">
 
<bean:write name="CourseView" property="cacheWebDocument" filter="no"/>
</logic:notEmpty>
</div>
 
 
 
/impl/src/web/public/courses/topnavCourses.jsp
1,12 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "courses");
topNav.addNavPlace(null, "course." + request.getParameter("type"));
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/courses/courseList.jsp
14,18 → 14,19
<logic:iterate id="courseView" name="courses" type="pt.estgp.estgweb.domain.views.CourseView">
<logic:notEmpty name="courseView" property="studiesPlanStreamId">
<li>
<p><a href="javascript:showOrHideOne(${courseView.id})">${courseView.name}</a> - <%=Globals.NATIONAL_INSTITUTION_CODE%>/${courseView.code} - (<a href="<%=request.getContextPath() + "/startLoadCourse.do?type=" + request.getAttribute("type") + "&courseView.id=" + courseView.getId()%>"><bean:message key="course.studies.plan.users"/> </a>)</p>
<div style="padding-left:20px;">
<div class="seccao borderLeft" style="display:none;" id="${courseView.id}">
<%--<p><a href="javascript:showOrHideOne(${courseView.id})">${courseView.name}</a> - <%=Globals.NATIONAL_INSTITUTION_CODE%>/${courseView.code} - (<a href="<%=request.getContextPath() + "/startLoadCourse.do?type=" + request.getAttribute("type") + "&courseView.id=" + courseView.getId()%>"><bean:message key="course.studies.plan.users"/> </a>)</p>--%>
<p><a href="<%=request.getContextPath() + "/startLoadCourseSeparators.do?type=" + request.getAttribute("type") + "&courseView.id=" + courseView.getId()%>">${courseView.name}</a> - <%=Globals.NATIONAL_INSTITUTION_CODE%>/${courseView.code} </a></p>
<%--<div style="padding-left:20px;">--%>
<%--<div class="seccao borderLeft" style="display:none;" id="${courseView.id}">--%>
 
<logic:notEmpty name="courseView" property="formatedDescription"><p>${courseView.formatedDescription}</p></logic:notEmpty>
<logic:notEmpty name="courseView" property="externalSitePath">
<%
WebProxy.processHttpRequestService(out, courseView.getExternalSiteServer(), courseView.getExternalSitePath());
%>
</logic:notEmpty>
</div>
</div>
<%--<logic:notEmpty name="courseView" property="formatedDescription"><p>${courseView.formatedDescription}</p></logic:notEmpty>--%>
<%--<logic:notEmpty name="courseView" property="externalSitePath">--%>
<%--<%--%>
<%--WebProxy.processHttpRequestService(out, courseView.getExternalSiteServer(), courseView.getExternalSitePath());--%>
<%--%>--%>
<%--</logic:notEmpty>--%>
<%--</div>--%>
<%--</div>--%>
</li>
</logic:notEmpty>
</logic:iterate>
/impl/src/web/public/courses/courseMenuLoader.jsp
New file
0,0 → 1,36
<%@ page import="pt.estgp.estgweb.web.WebProxy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%--<jsp:useBean id="typeKey" type="java.lang.String" scope="request"/>--%>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
 
 
 
<div class="seccao">
<%
String contentsPage = (String) request.getParameter("content");
request.setAttribute("contentM",contentsPage);
%>
<h2><bean:message key="course.menu.${contentM}"/></h2>
<%
 
try{
String pagina = "/pagina.php?nome_id=curso_" + CourseView.getCode() + "_" + contentsPage;
WebProxy.processHttpRequestService(out,"conteudos", pagina);
}
catch(Throwable e)
{
%>
<p><bean:message key="course.pagina.nao.disponivel"/></p>
<%
}
%>
 
</div>
/impl/src/web/user/surveys/listSurveyStats.jsp
New file
0,0 → 1,27
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStructuralNodeView" %>
<%@ page import="pt.estgp.estgweb.domain.views.SurveyView" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<jsp:useBean id="SurveyView" type="pt.estgp.estgweb.domain.views.SurveyView" scope="request"/>
 
<jomm:messages/>
<html:errors/>
 
<%
SurveyView surveyView = (SurveyView) request.getAttribute("SurveyView");
SurveyStructuralNodeView nodeRoot = surveyView.getStructuralNodeView();
request.setAttribute("id",surveyView.getId());
request.setAttribute("node",nodeRoot);
%>
 
<div id="listSurveyStats">
 
<jsp:include page="listSurveyStatsRecursive.jsp"/>
 
</div>
/impl/src/web/user/surveys/loadSurveyNodeGraphs.jsp
New file
0,0 → 1,39
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStatsGraphicView" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException" %>
 
<div id="loadNodeGraphs">
<%
try
{
String[] names = {"serializable"};
Object[] args = {Long.parseLong(request.getParameter("id")),Long.parseLong(request.getParameter("node"))};
IServiceManager sm = ServiceManager.getInstance();
 
List<SurveyStatsGraphicView> surveyStatsGraphicViews = (List<SurveyStatsGraphicView>) sm.execute(RequestUtils.getRequester(request,response),"LoadSurveyNodeGraphs",args,names);
 
if(surveyStatsGraphicViews.size() > 0)
{
%>
<div id="loadNodeGraphsHeader">Gráfico(s) relativo(s) a: <b><%=surveyStatsGraphicViews.get(0).getStructuralNodeView().getMsg()%></b></div>
<%
 
for(SurveyStatsGraphicView gView : surveyStatsGraphicViews)
{
%>
<div><img src="<%=request.getContextPath()%>/repositoryStream/<%=gView.getIdentifier()%>" alt=""/></div><br>
<%
}
}
else
out.println("<div>Não há graficos</div>");
}
catch(FilterChainFailedException e)
{}
catch (Throwable e)
{}
%>
</div>
/impl/src/web/user/surveys/listSurveys.jsp
New file
0,0 → 1,114
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.SurveyView" %>
<%@ page import="pt.estgp.estgweb.domain.UserSession" %>
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %>
<%@ page import="pt.estgp.estgweb.services.surveys.SurveyStatusEnum" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<%
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new String[]{};
 
List<SurveyView> surveyViews;
UserSession userSession = UserSessionProxy.loadUserSession(request, response);
if(userSession.getUser().isAdmin())
{
surveyViews = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadSurveys", args, names);
}
else
{
surveyViews = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadOwnedSurveys", args, names);
}
request.setAttribute("SurveyViews", surveyViews);
%>
 
<jomm:messages/>
<html:errors/>
 
<%
if(surveyViews.size() > 0)
{
%>
<table class="dataTable">
<tr>
<th><bean:message key="survey.list.form.title"/></th>
<th><bean:message key="survey.list.form.type"/></th>
<th><bean:message key="survey.list.form.target"/></th>
<th><bean:message key="survey.list.form.year"/></th>
<th><bean:message key="survey.list.form.semester"/></th>
<th><bean:message key="survey.list.form.start.date"/></th>
<th><bean:message key="survey.list.form.end.date"/></th>
<th><bean:message key="survey.list.form.created.by"/></th>
<th><bean:message key="survey.list.form.number.responses"/></th>
<th><bean:message key="survey.list.form.status"/></th>
</tr>
 
<logic:iterate id="surveyView" name="SurveyViews" type="pt.estgp.estgweb.domain.views.SurveyView">
<bean:define id="sv" name="surveyView" type="pt.estgp.estgweb.domain.views.SurveyView"/>
<tr>
<td><bean:write name="surveyView" property="title"/></td>
<td><bean:message key="surveys.type.${surveyView.type}"/></td>
<%
if(sv.isPedagogic())
{
%>
<td><bean:message key="surveys.target.pair.${surveyView.targetRoles}"/></td>
<%
} else {
%>
<td><bean:message key="user.role.${surveyView.targetRoles}"/></td>
<%
}
%>
<td><bean:write name="surveyView" property="year"/></td>
<td><bean:message key="courseunit.${surveyView.semester}"/></td>
<td><bean:write name="surveyView" property="formatedStartDate"/></td>
<td><bean:write name="surveyView" property="formatedEndDate"/></td>
<td><bean:write name="surveyView" property="owner.username"/></td>
<td><bean:write name="surveyView" property="numberOfResponses"/>/<bean:write name="surveyView" property="numberTotalOfResponses"/></td>
<td><bean:write name="surveyView" property="statusPercentage"/><bean:message key="survey.list.form.percentage.symbol"/></td>
<%
if(sv.getStatus() != null && (sv.getStatus() == SurveyStatusEnum.STATUS_STOPPED || sv.isExpired()))
{
%>
<logic:equal name="surveyView" property="numberOfResponses" value="0">
<td><html:link action="/user/startEditSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.edit"/></html:link></td>
</logic:equal>
<td><html:link action="/user/startCloneSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.clone"/></html:link></td>
<td><html:link action="/user/startConsistSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.consist"/></html:link></td>
<td><html:link action="/user/startGenerateSurveyStatsFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.gen.stats"/></html:link></td>
<logic:present name="surveyView" property="identifier">
<td><html:link action="/user/startListSurveyStats.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.view.stats"/></html:link></td>
<td><a href="<%=request.getContextPath()%>/repositoryStream/${surveyView.identifier}"><bean:message key="survey.list.form.option.download.csv"/></a></td>
</logic:present>
<%
}
else if(sv.getStatus() != null)
{
%>
<td colspan="200"><bean:message key="<%=sv.getStatus().getMessageKey()%>"/></td>
<%
}
%>
</tr>
</logic:iterate>
</table>
<%
}
else
{
%>
<bean:message key="survey.list.form.empty"/>
<%
}
%>
/impl/src/web/user/surveys/listSurveyStatsRecursive.jsp
New file
0,0 → 1,53
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStructuralNodeView" %>
<%
String from = "";
if (request.getParameter("from") != null)
{
from = "&from=" + request.getParameter("from");
}
request.setAttribute("from", from);
long nodeToShow = 0;
if(request.getParameter("node") != null)
{
nodeToShow = Long.parseLong(request.getParameter("node"));
}
 
SurveyStructuralNodeView node = (SurveyStructuralNodeView) request.getAttribute("node");
if(node.getNodes().size() > 0)
{
String image = request.getContextPath() + "/imgs/";
image += node.isRelativeParentOf(nodeToShow) ? "closedPlus.gif" : "openedMinus.gif";
%>
 
<a href="#"><img border="0" onclick="this.src=showOrHide('node<%=node.getId()%>','<%=request.getContextPath()%>/imgs/closedPlus.gif','<%=request.getContextPath()%>/imgs/openedMinus.gif')"
src="<%=image%>" alt="abrir"/></a> <%=node.getMsg()%><br>
 
<%
if(node.isRelativeParentOf(nodeToShow)) {
%>
<div id="node<%=node.getId()%>" style="display:block" class="nodeSection">
<%
}else{
%>
<div id="node<%=node.getId()%>" style="display:none" class="nodeSection">
<%
}
for(SurveyStructuralNodeView n : node.getNodes())
{
request.setAttribute("node",n);
%>
<jsp:include page="listSurveyStatsRecursive.jsp"/>
<%
}
%>
</div>
<%
}
else
{
%>
<div class="nodeSection"><a href="<%=request.getContextPath()%>/user/startLoadSurveyNodeGraphs.do?id=<%=request.getAttribute("id")%>&node=<%=node.getId()%><%=from%>"><%=node.getMsg()%></a></div>
<%
}
%>
/impl/src/web/user/surveys/submitSurveyResponse.jsp
New file
0,0 → 1,162
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="pt.estgp.estgweb.web.form.surveys.SurveysForm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<jsp:useBean id="SurveysForm" type="pt.estgp.estgweb.web.form.surveys.SurveysForm" scope="request"/>
 
<jomm:messages/>
<html:errors/>
 
<html:form action="/user/submitSurveyResponseFromHome">
<input type="hidden" name="dispatch">
<html:hidden name="SurveysForm" property="surveyView.id"/>
<html:hidden name="SurveysForm" property="surveyResponseView.id"/>
<input type="hidden" name="questionsListSize" value="<%=((SurveysForm)request.getAttribute("SurveysForm")).getSurveyView().getQuestions().size()%>">
<table class="form" border="0">
<tr>
<th><bean:message key="survey.answer.form.title"/></th>
<td>
<html:hidden name="SurveysForm" property="surveyView.title"/>
<bean:write name="SurveysForm" property="surveyView.title"/>
</td>
</tr>
<tr>
<th><bean:message key="survey.answer.form.type"/></th>
<td>
<html:hidden name="SurveysForm" property="surveyView.type"/>
<bean:message key="surveys.type.${SurveysForm.surveyView.type}"/>
</td>
</tr>
<tr>
<th><bean:message key="survey.answer.form.end.date"/></th>
<td>
<html:hidden name="SurveysForm" property="surveyView.formatedEndDate"/>
<bean:write name="SurveysForm" property="surveyView.formatedEndDate"/>
</td>
</tr>
<logic:notEqual name="SurveysForm" property="surveyView.type" value="general">
<tr>
<th><bean:message key="survey.answer.form.related"/></th>
<td>
<html:hidden name="SurveysForm" property="surveyResponseView.structuralNodeView.msg"/>
<bean:write name="SurveysForm" property="surveyResponseView.structuralNodeView.msg"/>
</td>
</tr>
</logic:notEqual>
<tr>
<th></th>
<td colspan="2">
<nested:iterate id="questionView" name="SurveysForm" property="surveyView.questions" indexId="qId">
<input type="hidden" name="itemsListSize${qId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().size()%>"/>
<input type="hidden" name="candidatesLabelsSize${qId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getCandidatesLabels().size()%>"/>
<nested:hidden property="id"/>
<nested:hidden property="required"/>
 
<table id="questionTable">
<tr>
<td colspan="200" class="questionLabelCell">
<nested:hidden property="labelpt"/>
<nested:hidden property="type"/>
<nested:write property="labelpt"/>
<nested:equal property="required" value="true">
<div id="surveyRequiredQuestion"><bean:message key="survey.answer.form.required.question"/></div>
</nested:equal>
</td>
</tr>
 
<nested:equal property="type" value="text">
<tr>
<td>
<nested:iterate id="item" property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<nested:iterate property="candidates">
<nested:hidden property="id"/>
</nested:iterate>
<logic:iterate id="c" name="item" property="candidates">
<nested:textarea property="textareaValue" styleId="surveyTextarea"/>
</logic:iterate>
</nested:iterate>
</td>
</tr>
</nested:equal>
 
<nested:equal property="type" value="radio">
<nested:iterate id="item" property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<nested:iterate property="candidates">
<nested:hidden property="id"/>
<nested:hidden property="labelpt"/>
</nested:iterate>
<logic:iterate id="c" name="item" property="candidates">
<tr>
<td>
<nested:radio property="radioValue" value="${c.id}"/>
<nested:write name="c" property="labelpt"/>
</td>
</tr>
</logic:iterate>
</nested:iterate>
</nested:equal>
 
<nested:equal property="type" value="check">
<nested:iterate id="item" property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<nested:iterate property="candidates">
<tr>
<td>
<nested:hidden property="id"/>
<nested:hidden property="labelpt"/>
<nested:checkbox property="checkbox"/>
<nested:write property="labelpt"/>
</td>
</tr>
</nested:iterate>
</nested:iterate>
</nested:equal>
 
<nested:equal property="type" value="matrix">
<tr>
<td></td>
<nested:iterate property="candidatesLabels">
<td class="candidateCell">
<nested:hidden property="labelpt"/>
<nested:write property="labelpt"/>
</td>
</nested:iterate>
</tr>
<input type="hidden" name="teste_row_hidden"/>
<nested:iterate id="item" property="items" indexId="iId">
<input type="hidden" name="candidatesListSize${qId}${iId}" value="<%=SurveysForm.getSurveyView().getQuestions().get(qId).getItems().get(iId).getCandidates().size()%>"/>
<nested:iterate property="candidates">
<nested:hidden property="id"/>
<nested:hidden property="labelpt"/>
</nested:iterate>
<tr onmouseover="this.style.backgroundColor='#aFaFaF'" onmouseout="this.style.backgroundColor='#F7F7F7'">
<td>
<nested:hidden property="labelpt"/>
<nested:write property="labelpt"/>
</td>
<logic:iterate id="c" name="item" property="candidates">
<td class="candidateCell">
<nested:radio property="radioValue" value="${c.id}"/>
</td>
</logic:iterate>
</tr>
</nested:iterate>
</nested:equal>
</table>
 
</nested:iterate>
</td>
</tr>
</table>
 
<hr>
<input type="button" value="<bean:message key="confirm"/>"
onclick="set(this.form,'answer');this.form.submit();">
</html:form>
/impl/src/web/user/courses/directedCoordinatedCourses.jsp
304,7 → 304,7
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/></td>
</baco:hasRole>
<td>${courseUnitView.code}</td>
<td><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitFromHome.do?id=${courseUnitView.id}">${courseUnitView.code}</a></td>
<td>
<baco:hasRole role="teacher">
<a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a>
348,7 → 348,7
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/></td>
</baco:hasRole>
<td>${courseUnitView.code}</td>
<td><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitFromHome.do?id=${courseUnitView.id}">${courseUnitView.code}</a></td>
<td><a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a></td>
<td>${courseUnitView.teachersSnipet}</td>
</tr>
/impl/src/web/user/home/student.jsp
1,3 → 1,5
<%@ page import="org.hibernate.SQLQuery" %>
<%@ page import="java.math.BigInteger" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
7,6 → 9,10
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<%
 
 
%>
<div class="portal">
<logic:notMatch value="StudentImpl" name="UserSession" property="user.class.name">
<ul>
62,6 → 68,14
</li>
<li>
<p><bean:message key="courseunit.semestre"/> 2</p>
<%--<br/>--%>
<%--<p>As inscrições para os Exames de 2º Semestre irão ser efectuadas pelo BACO</p>--%>
<%--<p>Caso se tenha inscrito e não tem intenção de fazer o Exame ou ainda não sabe a sua nota final remova a sua inscrição para regularizar a situação</p>--%>
<%--<br/>--%>
<br/>
<p>O periodo de inscrições terminou</p>
<br/>
 
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
69,10 → 83,135
</logic:present>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:notEmpty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<%--<table cellpadding="0" cellspacing="0" class="dataTable">--%>
<%--<tr>--%>
<%--<th>Exames de 1ª Época</th>--%>
<%--<th>Inscrito</th>--%>
<%--<th></th>--%>
<%--</tr>--%>
 
<%--<logic:iterate id="unit" name="UserSession" property="user.subscribedUnitsCurrentYearViewS2" type="pt.estgp.estgweb.domain.CourseUnit">--%>
<%--<tr>--%>
<%--<td style="text-align:center; padding:3px">--%>
<%--${unit.name}--%>
<%--</td>--%>
 
<%--<%--%>
<%--String courseCode = "";--%>
<%--if(unit.getCourse() != null)--%>
<%--{--%>
<%--String courseName = unit.getCourse().getName();--%>
<%--String[] words = courseName.split(" ");--%>
<%--for(String word: words)--%>
<%--{--%>
<%--if(word != null && word.length() > 3 && word.charAt(0) >= 'A' && word.charAt(0) <= 'Z' )--%>
<%--{--%>
<%--courseCode += word.charAt(0);--%>
<%--}--%>
<%--}--%>
<%--}--%>
 
<%--%>--%>
<%--<%--%>
 
 
<%--org.hibernate.Session sess = jomm.dao.utils.HibernateUtils.getCurrentSession();--%>
<%--sess.beginTransaction();--%>
<%--org.hibernate.SQLQuery q = sess.createSQLQuery("select count(*) from inscricoes_exame where courseunit_id = " + unit.getId() + " and user_id = " + UserSession.getUser().getId());--%>
<%--java.math.BigInteger count = (java.math.BigInteger) q.list().get(0);--%>
<%--boolean inscrito = false;--%>
<%--if(count.intValue() > 0)--%>
<%--{--%>
<%--inscrito = true;--%>
<%--}--%>
<%----%>
<%--sess.getTransaction().commit();--%>
 
<%--if(request.getParameter("inscrever") != null)--%>
<%--{--%>
 
<%--if(!inscrito && request.getParameter("inscrever").equals("true"))--%>
<%--{--%>
<%--long courseunit_id=Long.parseLong(request.getParameter("courseunit_id"));--%>
<%--if(courseunit_id == unit.getId())--%>
<%--{--%>
<%--sess = jomm.dao.utils.HibernateUtils.getCurrentSession();--%>
<%--sess.beginTransaction();--%>
<%--try--%>
<%--{--%>
 
<%--sess.createSQLQuery("insert into inscricoes_exame (courseunit_id,user_id) VALUES(" + courseunit_id + "," + UserSession.getUser().getId() + ")").executeUpdate();--%>
 
<%--}--%>
<%--catch(Exception e)--%>
<%--{--%>
<%--e.printStackTrace();--%>
<%--}--%>
<%--sess.flush();--%>
<%--sess.getTransaction().commit();--%>
<%--inscrito = true;--%>
<%--}--%>
<%--}--%>
<%--else if(inscrito && request.getParameter("inscrever").equals("false"))--%>
<%--{--%>
<%--long courseunit_id=Long.parseLong(request.getParameter("courseunit_id"));--%>
<%--if(courseunit_id == unit.getId())--%>
<%--{--%>
<%--sess = jomm.dao.utils.HibernateUtils.getCurrentSession();--%>
<%--sess.beginTransaction();--%>
<%--try--%>
<%--{--%>
<%--sess.createSQLQuery("delete from inscricoes_exame where courseunit_id = " + courseunit_id + " and user_id = " + UserSession.getUser().getId()).executeUpdate();--%>
<%--}--%>
<%--catch(Exception e)--%>
<%--{--%>
<%--e.printStackTrace();--%>
<%--}--%>
<%--sess.flush();--%>
<%--sess.getTransaction().commit();--%>
<%--inscrito = false;--%>
<%--}--%>
<%--}--%>
<%--}--%>
 
<%--if(inscrito)--%>
<%--{--%>
<%--%>--%>
 
<%--<td style="background-color:green;color:white;text-align:center">Sim</td>--%>
<%--<td style="text-align:center">--%>
<%--<form style="padding:0;margin:0" action="<%=request.getContextPath()%>/user/home.do" method="post">--%>
<%--<input type="hidden" name="inscrever" value="false">--%>
<%--<input type="hidden" name="courseunit_id" value="${unit.id}">--%>
<%--<input type="submit" value="Desinscrever" onclick="return confirm('Esta acção vai remover a sua inscrição no Exame de ${unit.name}. Tem a certeza que se deseja remover a sua inscrição no exame da unidade de ${unit.name}?');">--%>
<%--</form>--%>
<%--</td>--%>
<%--<%--%>
<%--}--%>
<%--else--%>
<%--{--%>
<%--%>--%>
<%--<td style="text-align:center">Não</td>--%>
<%--<td style="text-align:center">--%>
<%--<form style="padding:0;margin:0" action="<%=request.getContextPath()%>/user/home.do" method="post">--%>
<%--<input type="hidden" name="inscrever" value="true">--%>
<%--<input type="hidden" name="courseunit_id" value="${unit.id}">--%>
<%--<input type="submit" value="Inscrever" onclick="return confirm('Esta acção vai inscrevê-lo no Exame de ${unit.name}. Tem a certeza que se deseja inscrever no exame da unidade de ${unit.name}?');">--%>
<%--</form>--%>
<%--</td>--%>
<%--<%--%>
<%--}--%>
<%--%>--%>
<%--</tr>--%>
 
<%--</logic:iterate>--%>
<%--</table>--%>
 
 
<ul>
<logic:iterate id="unit" name="UserSession" property="user.subscribedUnitsCurrentYearViewS2" type="pt.estgp.estgweb.domain.CourseUnit">
<li>
<%
<%
String courseCode = "";
if(unit.getCourse() != null)
{
90,6 → 229,7
%>
<html:link action="/user/startLoadCourseUnitFromHome?id=${unit.id}">${unit.name} (<%=courseCode%><%//${unit.courseName} (${unit.courseCode})%>) </html:link>
<html:link action="/user/startLoadCourseUnitRootFromHome?courseUnitView.id=${unit.id}"><img border="0" alt="Pastas" src="<%=request.getContextPath()%>/imgs/folder.gif"></html:link>
 
</li>
</logic:iterate>
</ul>
/impl/src/web/user/home/todos.jsp
57,7 → 57,8
String style;
String img;
String styleClass;
if (toDoCat.getDescription().equals(ModuleEnum.TodoAnnouncements.getMessageKey()))
// Duarte Santos
if (toDoCat.getDescription().equals(ModuleEnum.TodoAnnouncements.getMessageKey()) || toDoCat.getDescription().equals(ModuleEnum.Surveys.getMessageKey()))
{
styleClass = "WARNING";
img = "/imgs/openedboxNeg.gif";
89,10 → 90,10
<%=MessageResources.getMessage(request, toDoCat.getDescription())%> (<%=toDoCat.getTotalToDo()%>) <img alt="abrir" src="<%=request.getContextPath() + img%>" onclick="this.src=showOrHide('<%=toDoCat.getDescription()%>','<%=request.getContextPath() + imgClose%>','<%=request.getContextPath() + imgOpen%>')" >
</p>
 
 
 
<ul id="<%=toDoCat.getDescription()%>" style="<%=style%>">
<%
<%
for (IToDo todo : toDoCat.getAllToDos())
{
 
139,4 → 140,4
<%
}
%>
</div>
</div>
/impl/src/web/user/home/topnavResponseSurvey.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "survey.topnav.response.survey");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavViewSurveyNodeGraphs.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys");
topNav.addNavPlace("/user/startListSurveyStatsFromServiceZone.do?id=", "survey.topnav.list.stats");
topNav.addNavPlace(null, "survey.topnav.view.graphs");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavListSurvey.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "survey.topnav.list.surveys");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/serviceZone.jsp
8,6 → 8,7
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.domain.CourseUnitAnnouncement" %>
<%@ page import="pt.estgp.estgweb.domain.views.SurveyView" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
48,7 → 49,17
request.setAttribute("OwnerBlogPosts", ownerBlogPosts);
}
 
// Duarte Santos
List<SurveyView> ownerSurveys = null;
List<SurveyView> consultStatsSurveys = null;
if(Globals.MODULE_STATUS_SURVEYS)
{
ownerSurveys = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadOwnedSurveys", args, names);
request.setAttribute("OwnerSurveys",ownerSurveys);
 
consultStatsSurveys = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadConsultStatsSurveys", args, names);
request.setAttribute("ConsultStatsSurveys",consultStatsSurveys);
}
%>
<jomm:messages/>
<html:errors/>
94,6 → 105,27
</baco:hasRole>
</baco:isModuleOn>
 
<!-- Duarte Santos -->
<baco:isModuleOn module="surveys">
<baco:isAdmin>
<li>
<bean:message key="surveys"/>
<ul>
<li>
<html:link action="/user/startSubmitSurveyFromServiceZone">
<bean:message key="survey.create.survey"/>
</html:link>
</li>
<li>
<html:link action="/user/startListSurveysFromServiceZone">
<bean:message key="survey.list.surveys"/>
</html:link>
</li>
</ul>
</li>
</baco:isAdmin>
</baco:isModuleOn>
<!---->
 
<baco:isAdmin>
<li>
469,6 → 501,46
</div>
</div>
</baco:isModuleOn>
<!-- Duarte Santos -->
<baco:isModuleOn module="surveys">
<div class="block">
<div class="head">
<bean:message key="intranet.my.surveys.stats"/>
<a href="#"><img border="0" onclick="this.src=showOrHide('mySurveysStats','<%=request.getContextPath()%>/imgs/closedbox.gif','<%=request.getContextPath()%>/imgs/openedbox.gif')" src="<%=request.getContextPath()%>/imgs/closedbox.gif" alt="abrir"/></a>
</div>
<div id="mySurveysStats" style="display:none;">
<%
if(consultStatsSurveys.size() == 0)
{
%>
<div class="zerofound">
<bean:message key="survey.stats.zero.placed"/>
</div>
<%
}
else
{
%>
<table>
<%
for (SurveyView s : consultStatsSurveys)
{
%>
<tr>
<td>
<a href="<%=request.getContextPath()%>/user/startListSurveyStats.do?id=<%=s.getId()%>&from=ServiceZone"><%=s.getTitle()%></a>
</td>
</tr>
<%
}
%>
</table>
<%
}
%>
</div>
</div>
</baco:isModuleOn>
 
</td>
</tr>
/impl/src/web/user/serviceZone/topnavListSurveyStats.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
if(request.getParameter("from") == null)
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys");
topNav.addNavPlace(null, "survey.topnav.list.stats");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavLoadSurveyNodeGraphs.jsp
New file
0,0 → 1,16
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
String from = "";
if(request.getParameter("from") == null)
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys");
else
from = "&from=" + request.getParameter("from");
topNav.addNavPlace("/user/startListSurveyStats.do?id="+Long.parseLong(request.getParameter("id"))+from+"&node="+Long.parseLong(request.getParameter("node"))+"", "survey.topnav.list.stats");
topNav.addNavPlace(null, "survey.topnav.view.graphs");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavCreateSurvey.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "survey.topnav.create.survey");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/etc/conteudos.sql
New file
0,0 → 1,53
-- MySQL dump 10.13 Distrib 5.1.37, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: conteudos
-- ------------------------------------------------------
-- Server version 5.1.37-1ubuntu5
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
 
--
-- Table structure for table `pagina`
--
 
DROP TABLE IF EXISTS `pagina`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pagina` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`html` text NOT NULL,
`nome_id` varchar(255) NOT NULL,
`categoria` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `pagina`
--
 
LOCK TABLES `pagina` WRITE;
/*!40000 ALTER TABLE `pagina` DISABLE KEYS */;
INSERT INTO `pagina` VALUES (1,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n','eee',''),(2,'','tttt',''),(3,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n<p>\r\n &nbsp;</p>\r\n<h1>\r\n Principal</h1>\r\n','principal','Alunos'),(4,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n<p>\r\n &nbsp;</p>\r\n<ol>\r\n <li>\r\n <strong>eqweqwe</strong></li>\r\n <li>\r\n qweqwe</li>\r\n <li>\r\n qweqweqwe</li>\r\n <li>\r\n qweqweqweqwe</li>\r\n</ol>\r\n<p>\r\n <a href=\"http://www.google.com\">Google</a></p>\r\n','teste','catDeTeste'),(5,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n','rtyu','catDeTeste'),(6,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n','AlunosTeste','Alunos'),(7,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n','Alunos Teste2','Alunos'),(8,'<p>\r\n This is some <strong>sample text</strong>.</p>\r\n<ol>\r\n <li>\r\n dasfgdsfgs</li>\r\n <li>\r\n dfgsd</li>\r\n <li>\r\n <u>fgsdfg</u></li>\r\n</ol>\r\n','Pagina de Teste','Gatos'),(9,'','Pagina de Teste Nova','cat1'),(10,'<div class=\"seccao\">\r\n <h2>\r\n Mensagem do Director</h2>\r\n <p>\r\n Caros alunos,</p>\r\n <p>\r\n &Eacute; com enorme satisfa&ccedil;&atilde;o que vos desejamos as boas vindas &agrave; ESTG, ou renovamos esses votos, no in&iacute;cio deste ano lectivo, o qual ser&aacute; uma vez mais de mudan&ccedil;a, em virtude da entrada em vigor dos novos estatutos da nossa Escola. Partilhamos convosco o regozijo de vos oferecermos uma escola mais din&acirc;mica e melhor preparada para vos apoiar:</p>\r\n <p>\r\n Temos uma oferta formativa est&aacute;vel e j&aacute; consolidada, mas simultaneamente inovadora, caracterizada por uma incessante adapta&ccedil;&atilde;o a novas necessidades e exig&ecirc;ncias da envolvente. No que respeita a cursos de licenciatura &ndash; 1&ordm; ciclo, temos 12 cursos em funcionamento, num total de 15 vari&aacute;veis, incluindo o regime p&oacute;s-laboral e os diversos ramos, disponibilizando um leque diversificado de op&ccedil;&otilde;es, destacando-se a oferta de est&aacute;gios curriculares e optativos, semin&aacute;rios e projectos. Com o intuito de disponibilizar uma oferta formativa mais alargada proporcionamos, no ano lectivo 2009/10, a frequ&ecirc;ncia de 3 cursos de Mestrado - 2&ordm; ciclo e p&oacute;s-gradua&ccedil;&otilde;es, que abrangem as diversas &aacute;reas cient&iacute;ficas ministradas na ESTG. Constitui ainda o leque de oferta formativa desta escola cursos de especializa&ccedil;&atilde;o tecnol&oacute;gica e cursos de curta dura&ccedil;&atilde;o, isoladamente ou em parceria com outras institui&ccedil;&otilde;es.</p>\r\n <p>\r\n O nosso corpo docente &eacute; cada vez mais qualificado e est&aacute; permanentemente empenhado em contribuir para o sucesso educativo dos estudantes, sendo evid&ecirc;ncia desse facto a mais de uma dezena de candidaturas de docentes da ESTG ao PROTEC aprovadas.</p>\r\n <p>\r\n Por todas estas raz&otilde;es, mas tamb&eacute;m pela exig&ecirc;ncia, pelo rigor e pela permanente orienta&ccedil;&atilde;o para os alunos somos uma escola integrada na primeira institui&ccedil;&atilde;o de ensino superior a receber um certificado de qualidade na sua globalidade, em que a qualidade &eacute; reconhecida &agrave;s actividades que realizamos e que pretendemos cada vez maior com o vosso contributo e para vosso benef&iacute;cio. Como desafio para um futuro pr&oacute;ximo surge a certifica&ccedil;&atilde;o ao n&iacute;vel da responsabilidade social. Apresento-vos os meus votos de bom trabalho e que alcancem o mais amplo sucesso.</p>\r\n <p>\r\n &nbsp;</p>\r\n <p align=\"center\">\r\n <img src=\"http://deptal.estgp.pt:9090/static/public/portal/imagens/presidente.gif\" style=\"border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 156px; height: 211px; \" /><br />\r\n Artur Rom&atilde;o<br />\r\n (O Director)</p>\r\n <ul>\r\n </ul>\r\n</div>\r\n','MensagemDirector','FuturosAlunos');
/*!40000 ALTER TABLE `pagina` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
 
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
-- Dump completed on 2011-02-03 22:13:54
/impl/etc/conteudosEmPHP.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/build.xml
475,6 → 475,10
</target>
 
<target name="generateHibernateDomainObjects">
<replace dir="${hbm.dir}" value="">
<include name="**/*.hbm.xml"/>
<replacefilter token='&lt;timestamp source="db"' value="&lt;timestamp"/>
</replace>
<hibernatetool>
<configuration>
<fileset dir="${hbm.dir}">
491,6 → 495,10
<include name="**/*Impl.java"/>
</fileset>
</delete>
<replace dir="${hbm.dir}" value="">
<include name="**/*.hbm.xml"/>
<replacefilter token='&lt;timestamp' value='&lt;timestamp source="db"'/>
</replace>
</target>