/impl/conf/language/MessageResourcesSurvey.properties |
---|
1,6 → 1,6 |
################################################################################ |
# |
# Survey MESSAGE RESOURCES |
# Survey MESSAGE RESOURCES - Duarte Santos |
# |
################################################################################ |
59,6 → 59,7 |
# 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 |
/impl/conf/WEB-INF/struts/struts-survey.xml |
---|
41,10 → 41,9 |
<forward name="home" path="page.separators.home"/> |
</action> |
<action path="/user/startViewSurveyNodeGraphs" forward="page.view.node.graphs.from.serviceZone"/> |
<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/startListSurveyStatsFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=listStats&from=ServiceZone"/> |
<action path="/user/startGenerateSurveyStatsFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=generateStats&from=ServiceZone"/> |
<action path="/user/startConsistSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=consist&from=ServiceZone"/> |
<action path="/user/startCloneSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=clone&from=ServiceZone"/> |
58,7 → 57,7 |
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.from.serviceZone"/> |
<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> |
/impl/conf/WEB-INF/struts/tiles-survey.xml |
---|
18,17 → 18,16 |
<put name="body" value="/user/surveys/listSurveys.jsp"/> |
</definition> |
<definition name="page.list.survey.stats.from.serviceZone" extends="page.separators.serviceZone"> |
<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> |
<!--ver--> |
<definition name="page.view.node.graphs.from.serviceZone" extends="page.separators.serviceZone"> |
<definition name="page.load.survey.node.graphs" extends="page.separators.serviceZone"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/serviceZone/topnavViewSurveyNodeGraphs.jsp"/> |
<put name="body" value="/user/surveys/viewResponseGraphs.jsp"/> |
<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"> |
/impl/conf/app.properties |
---|
1,4 → 1,4 |
|
#FICHEIRO DE CONFIGURACOES |
tmp.dir=@tmp.dir@ |
95,14 → 95,13 |
ionline.use.default.credentials.to.updates.and.deletes=false |
server.estgp.start.path= |
#server.estgp=http://localhost:9090/static --dars |
server.estgp=http://deptal.estgp.pt:9090/static |
server.estgp=http://localhost:9090/static |
estgp.encoding=UTF-8 |
estgp.proxy.host= |
estgp.proxy.port= |
server.conteudos.start.path= |
#server.conteudos=http://localhost:9090/conteudos --dars |
#server.conteudos=http://localhost:9090/conteudos |
server.conteudos=http://deptal.estgp.pt:9090/conteudos |
conteudos.encoding=UTF-8 |
conteudos.proxy.host= |
289,7 → 288,6 |
surveys.stats.consult.role.0=all |
surveys.stats.consult.role.1=teacher |
surveys.stats.consult.role.2=student |
surveys.stats.consult.role.3=admin |
surveys.question.type.0=radio |
surveys.question.type.1=check |
297,9 → 295,10 |
surveys.question.type.3=text |
# Stats |
surveys.stats.graph.img.width=700 |
surveys.stats.graph.img.width=800 |
surveys.stats.graph.img.height=300 |
######################################################################### |
# Link Analysis |
# |
420,8 → 419,8 |
# |
#PopService |
# |
#pop.container.use=true --dars |
pop.container.use=false |
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/berserk/sd.xml |
---|
1477,44 → 1477,64 |
<!-- Duarte Santos --> |
<service> |
<name>CreateEditSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.CreateEditSurveyService</implementationClass> |
<description>Create or Edit an survey</description> |
<name>LoadSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load survey view</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>createEditSurveyService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
</filterChains> |
</service> |
<service> |
<name>LoadSurvey</name> |
<name>LoadEditSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load an Survey view</description> |
<description>Load survey view to edit</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
<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 Surveys</description> |
<description>Load all survey views</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>LoadOwnedSurveys</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveysService</implementationClass> |
<description>Load owned surveys</description> |
<description>Load owned survey views</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadOwnedSurveys</defaultMethod> |
<filterChains> |
1526,58 → 1546,59 |
<service> |
<name>LoadSurveyResponse</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyResponseService</implementationClass> |
<description>Load an Survey response view</description> |
<description>Load survey response view</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
<chain name="OwnersLoadResponse"/> |
</filterChains> |
</service> |
<service> |
<name>InsertSurveyAnswers</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.InsertSurveyAnswersService</implementationClass> |
<description>Insert list of answers</description> |
<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="OwnersLoadSurvey"/>--> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>ConsistSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.ConsistSurveyService</implementationClass> |
<description>Apply survey answers to created new users</description> |
<description>Apply survey responses to new users</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>consistService</defaultMethod> |
<defaultMethod>consistSurveyService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>GenerateSurveyStats</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.GenerateSurveyStatsService</implementationClass> |
<description>Generate all survey stats</description> |
<name>InsertSurveyAnswers</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.InsertSurveyAnswersService</implementationClass> |
<description>Insert survey answers</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>generateStatsService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
<chain name="OwnersLoadResponse"/> |
</filterChains> |
</service> |
<service> |
<name>LoadNodeGraphs</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadNodeGraphsService</implementationClass> |
<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"/>--> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
1588,7 → 1609,33 |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<!--<chain name="OwnersLoadSurvey"/>--> |
<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 --> |
</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,7 → 206,7 |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<!--Surveys - Duarte Santos--> |
<!-- Duarte Santos --> |
<filterChain> |
<name>OwnersLoadSurvey</name> |
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression> |
214,23 → 214,28 |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<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>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>ContextObjectTimer</name> |
<expression>ContextObjectTimer("object.serializable","object.referenceClass")</expression> |
<description>Timer Control Chain from Object Time</description> |
<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.ContextControlFilter</filterClass> |
<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,6 → 235,7 |
} |
} |
public List<CLAZZ> getAll() |
{ |
Session s = getCurrentSession(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadNodeGraphsService.java |
---|
File deleted |
/impl/src/java/pt/estgp/estgweb/services/surveys/ConsistSurveyService.java |
---|
1,17 → 1,15 |
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.SurveyView; |
import pt.estgp.estgweb.utils.DatesUtils; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.estgp.estgweb.web.controllers.surveys.SurveysController; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.Serializable; |
import javax.servlet.http.HttpServletRequest; |
import java.util.ArrayList; |
import java.util.List; |
28,38 → 26,41 |
private static final int MAX_COMMIT = 100; |
private long surveyId; |
private HttpServletRequest request; |
public void consistService(long surveyId, UserSession userSession) |
public void consistSurveyService(long surveyId, HttpServletRequest request, UserSession userSession) |
{ |
if(surveyId <= 0) return; |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(survey != null) |
{ |
this.surveyId = surveyId; |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CONSIST_SURVEY.getStatus()); |
ConsistSurveyService s = new ConsistSurveyService(); |
s.request = request; |
s.surveyId = surveyId; |
// start a thread |
Thread thread = new Thread(this); |
Thread thread = new Thread(s); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
} |
private synchronized void consistPedagogic(Survey survey) |
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(semester); |
SurveyStructuralNode nodeSemester = ((SurveyStructuralNodeImpl)nodeYear).getChildNode(semesterMsg); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(String area : areas) |
{ |
SurveyStructuralNode nodeArea = ((SurveyStructuralNodeImpl)nodeSemester).getChildNode(area); |
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) |
{ |
71,9 → 72,13 |
List<User> users = new ArrayList<User>(); |
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT)) |
users.addAll(DaoFactory.getStudentDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getStudents()); |
} |
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT)) |
users.addAll(DaoFactory.getTeacherDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getTeachers()); |
} |
for(User user: users) |
{ |
90,38 → 95,37 |
} |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
{ |
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(survey.getId()); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
} |
else |
{ |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
} |
private synchronized void consistGeneral(Survey survey) |
private synchronized SurveyImpl consistGeneral(SurveyImpl survey) |
{ |
List<String> roles = RoleManager.getRolesFromSerial(survey.getTargetRoles()); |
List<User> users = new ArrayList<User>(); |
149,53 → 153,60 |
} |
} |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
{ |
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(survey.getId()); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
} |
else |
{ |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
} |
public void run() |
{ |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
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..."); |
consistGeneral(survey); |
survey = consistGeneral(survey); |
} |
else if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
{ |
logger.info("Consisting pedagogic survey..."); |
consistPedagogic(survey); |
survey = consistPedagogic(survey); |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsCsvService.java |
---|
42,9 → 42,12 |
String filename = Globals.TMP_DIR + "/survey_"+survey.getId()+".csv"; |
File file = new File(filename); |
FileOutputStream fout = new FileOutputStream(file); |
OutputStreamWriter writer = new OutputStreamWriter(fout, Charset.forName("UTF-8")); |
fout.write(239); |
fout.write(187); |
fout.write(191); |
OutputStreamWriter writer = new OutputStreamWriter(fout, "UTF-8"); |
String[] csvHeader = {"IDResposta","IDQuestionario","Titulo do Questionario","IDPergunta","Pergunta","IDItem","Item","IDCandidata","Candidata","Resposta de Texto","IDUtilizador","Utilizador","Nos"}; |
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()); |
82,11 → 85,13 |
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(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/InsertSurveyAnswersService.java |
---|
22,7 → 22,7 |
private LoadSurveyService loadSurveyService = new LoadSurveyService(); |
public SurveyView run(SurveyView surveyView, long responseId, UserSession userSession) |
public SurveyView run(long responseId, SurveyView surveyView, UserSession userSession) |
{ |
SurveyResponse response = DaoFactory.getSurveyResponseDaoImpl().load(responseId); |
56,6 → 56,8 |
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/CreateEditSurveyService.java |
---|
1,19 → 1,23 |
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.impl.SurveyQuestionDaoImpl; |
import pt.estgp.estgweb.domain.views.*; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
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 org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.estgp.estgweb.utils.StringsUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.*; |
import javax.servlet.http.HttpServletRequest; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
/** |
* @author: Duarte Santos |
28,15 → 32,12 |
private static final int MAX_COMMIT = 100; |
private long surveyId; |
private HttpServletRequest request; |
public SurveyView createEditSurveyService(SurveyView surveyView, UserSession userSession) throws AccessDeniedOperationException |
public SurveyView createEditSurveyService(SurveyView surveyView, HttpServletRequest request, UserSession userSession) |
{ |
// delete questions, items, candidates |
processDeletedObjects(surveyView); |
// Survey |
Survey s; |
SurveyImpl s; |
if(surveyView.getId() <= 0) |
{ |
s = DomainObjectFactory.createSurveyImpl(); |
50,13 → 51,15 |
s.setStatusPercentage(0); |
s.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
DaoFactory.getSurveyDaoImpl().save(s); |
logger.info("Creating survey: "+s.getId()); |
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("Updating survey: "+s.getId()); |
logger.info("Editing survey with id: "+s.getId()); |
} |
// SurveyQuestions |
74,7 → 77,6 |
{ |
q = DaoFactory.getSurveyQuestionDaoImpl().load(questionView.getId()); |
questionView.persistViewInObject(q); |
logger.info("Updating survey question: "+q.getId()); |
} |
// SurveyQuestionItems |
92,7 → 94,6 |
{ |
qi = DaoFactory.getSurveyQuestionItemDaoImpl().load(itemView.getId()); |
itemView.persistViewInObject(qi); |
logger.info("Updating survey question item: "+qi.getId()); |
} |
// SurveyQuestionCandidateAnswers |
110,29 → 111,26 |
{ |
ca = DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().load(candidateAnswerView.getId()); |
candidateAnswerView.persistViewInObject(ca); |
logger.info("Updating survey question item: " + ca.getId()); |
} |
} |
} |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
SurveyView view = new SurveyView(s); |
// start a thread |
if(surveyView.getId() <= 0) |
{ |
Survey survey = DaoFactory.getSurveyDaoImpl().load(s.getId()); |
this.surveyId = survey.getId(); |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CREATE_SURVEY.getStatus()); |
CreateEditSurveyService service = new CreateEditSurveyService(); |
service.request = request; |
service.surveyId = s.getId(); |
Thread thread = new Thread(this); |
Thread thread = new Thread(service); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
return surveyView; |
return view; |
} |
private void processDeletedObjects(SurveyView surveyView) |
178,21 → 176,23 |
} |
} |
private synchronized void createPedagogicResponses(Survey survey) |
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(); |
String semester = DatesUtils.getSemestre(); |
String importYear = DatesUtils.getImportYear(); |
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null); |
survey.setStructuralNode(nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semester,nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semesterMsg,nodeYear); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(String area : areas) |
{ |
SurveyStructuralNodeImpl nodeArea = createSurveyStructuralNodeTree(survey,area,nodeSemester); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(DatesUtils.getImportYear(),area); |
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); |
203,9 → 203,13 |
List<User> users = new ArrayList<User>(); |
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT)) |
users.addAll(DaoFactory.getStudentDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getStudents()); |
} |
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT)) |
users.addAll(DaoFactory.getTeacherDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getTeachers()); |
} |
for(User user : users) |
{ |
219,50 → 223,56 |
} |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
{ |
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(survey.getId()); |
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()); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
} |
} |
private synchronized void createGeneralResponses(Survey 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)); |
String importYear = DatesUtils.getImportYear(); |
String semester = DatesUtils.getSemestre(); |
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null); |
survey.setStructuralNode(nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semester,nodeYear); |
SurveyStructuralNodeImpl nodeGeneral = createSurveyStructuralNodeTree(survey,survey.getTitle(),nodeSemester); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(User user : users) |
{ |
273,31 → 283,37 |
responses.add(sr); |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
{ |
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(survey.getId()); |
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()); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
} |
} |
private synchronized SurveyStructuralNodeImpl createSurveyStructuralNodeTree(Survey survey, String msg, SurveyStructuralNodeImpl parent) |
{ |
319,17 → 335,26 |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
logger.info("Loading survey with id: "+surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_GENERAL)) |
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..."); |
createGeneralResponses(survey); |
survey = createGeneralResponses(survey); |
} |
else if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
else if(survey.isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
{ |
logger.info("Creating pedagogic responses..."); |
createPedagogicResponses(survey); |
survey = createPedagogicResponses(survey); |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsService.java |
---|
7,11 → 7,15 |
import org.jfree.chart.ChartFactory; |
import org.jfree.chart.ChartUtilities; |
import org.jfree.chart.JFreeChart; |
import org.jfree.chart.axis.NumberAxis; |
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; |
22,6 → 26,7 |
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; |
43,27 → 48,26 |
private HttpServletRequest request; |
private UserSession userSession; |
public void generateStatsService(HttpServletRequest request, long surveyId, UserSession userSession) |
public void generateStatsService(long surveyId, HttpServletRequest request, UserSession userSession) |
{ |
if(surveyId <= 0) return; |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(survey != null) |
{ |
this.surveyId = surveyId; |
this.request = request; |
this.userSession = userSession; |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_GENERATE_STATS.getStatus()); |
GenerateSurveyStatsService s = new GenerateSurveyStatsService(); |
s.request = request; |
s.surveyId = surveyId; |
s.userSession = userSession; |
// start a thread |
Thread thread = new Thread(this); |
Thread thread = new Thread(s); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
} |
private synchronized SurveyStatsGraphic buildChart(HttpServletRequest request, SurveyQuestion q, SurveyStructuralNode node, UserSession userSession, boolean withCategories) |
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>(); |
98,29 → 102,18 |
CategoryDataset dataset = buildCategoryDataset(categories,series,values); |
JFreeChart chart = buildJFreeChart(q.getLabelpt(),domainAxisLabel,MessageResources.getMessage(request,"survey.stats.graph.axis.range.label"),dataset,orientation); |
// store on repository |
String filename = "/survey_"+q.getSurvey().getId()+"_question_"+q.getId()+"_node_"+node.getId()+".png"; |
SurveyStatsGraphic graph = DaoFactory.getSurveyStatsGraphicDaoImpl().load(q.getId(), node.getId()); |
String identifier; |
if(graph == null) |
{ |
identifier = storeChartRepository(chart,filename,"descricao",null,userSession); |
if(identifier != null) |
{ |
graph = DomainObjectFactory.createSurveyStatsGraphicImpl(); |
graph.setQuestion(q); |
graph.setStructuralNode(node); |
graph.setIdentifier(identifier); |
} |
} |
else |
{ |
identifier = graph.getIdentifier(); |
storeChartRepository(chart,filename,"descricao",identifier,userSession); |
graph = null; |
} |
// 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 graph; |
return chart; |
} |
public synchronized String storeChartRepository(JFreeChart chart, String filename, String description, String identifier, UserSession userSession) |
187,50 → 180,79 |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
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(); |
List<SurveyStatsGraphic> graphics = new ArrayList<SurveyStatsGraphic>(); |
long total = childNodes.size() * survey.getQuestions().size(); |
long i = 0; |
int status; |
for(SurveyStructuralNode node : childNodes) |
{ |
for(SurveyQuestion question : survey.getQuestions()) |
{ |
SurveyStatsGraphic graph = null; |
if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX)) |
graph = buildChart(request, question, node, userSession, true); |
else if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) || question.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO)) |
graph = buildChart(request, question, node, userSession, false); |
long nodeId = node.getId(); |
long questionId = question.getId(); |
if(graph != null) |
graphics.add(graph); |
} |
} |
long i = 0; |
int status; |
if(graphics.size() > 0) |
{ |
for(SurveyStatsGraphic g : graphics) |
{ |
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(survey.getId()); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
DaoFactory.getSurveyStatsGraphicDaoImpl().save(g); |
node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId); |
question = DaoFactory.getSurveyQuestionDaoImpl().load(questionId); |
status = (int)(((double)i/(double)graphics.size())*100); |
if(status >= 100) |
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) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
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); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
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/LoadSurveyService.java |
---|
29,14 → 29,18 |
public SurveyView run(long surveyId, UserSession userSession) |
{ |
Survey s = DaoFactory.getSurveyDaoImpl().get(surveyId); |
logger.info("Loading survey with id: "+s.getId()+" and structuralNode: "+s.getStructuralNode().getId()); |
long nrOfResponsesAnswered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true); |
long nrTotalOfResponses = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null); |
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(nrOfResponsesAnswered); |
surveyView.setNumberTotalOfResponses(nrTotalOfResponses); |
surveyView.setNumberOfResponses(answered); |
surveyView.setNumberTotalOfResponses(total); |
return surveyView; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/SurveyImpl.java |
---|
1,6 → 1,8 |
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; |
12,7 → 14,7 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyImpl extends Survey implements IOwned |
public class SurveyImpl extends Survey implements IOwned, IConsultSurveyStats, IEdit |
{ |
private static final Logger logger = Logger.getLogger(SurveyImpl.class); |
54,4 → 56,47 |
{ |
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/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 |
---|
12,11 → 12,30 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyResponseImpl extends SurveyResponse |
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; |
31,4 → 50,6 |
public Serializable getSerializable() { |
return getId(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStatsGraphicView.java |
---|
19,6 → 19,7 |
private long id; |
private String identifier; |
private SurveyStructuralNodeView structuralNodeView; |
public SurveyStatsGraphicView() |
{} |
51,6 → 52,14 |
this.identifier = identifier; |
} |
public SurveyStructuralNodeView getStructuralNodeView() { |
return structuralNodeView; |
} |
public void setStructuralNodeView(SurveyStructuralNodeView structuralNodeView) { |
this.structuralNodeView = structuralNodeView; |
} |
@Override |
public Class getReferenceClass() { |
return SurveyStatsGraphicImpl.class; |
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStructuralNodeView.java |
---|
185,4 → 185,21 |
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 |
---|
3,6 → 3,7 |
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; |
308,6 → 309,11 |
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()); |
/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java |
---|
210,7 → 210,7 |
} |
// Duarte Santos |
public static Survey createSurveyImpl() |
public static SurveyImpl createSurveyImpl() |
{ |
return new SurveyImpl(); |
} |
/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 |
---|
102,16 → 102,6 |
} |
// Duarte Santos |
public boolean haveResponse(Survey s, String msg) |
{ |
for(SurveyResponse r : getMySurveyResponses()) |
{ |
if(r.getStructuralNode().getSurvey() == s && r.getStructuralNode().getMsg().equals(msg)) |
return true; |
} |
return false; |
} |
public boolean haveResponse(Survey s, SurveyStructuralNode node) |
{ |
for(SurveyResponse r : getMySurveyResponses()) |
121,5 → 111,4 |
} |
return false; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyStructuralNodeDaoImpl.java |
---|
29,6 → 29,14 |
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(); |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyDaoImpl.java |
---|
1,7 → 1,9 |
package pt.estgp.estgweb.domain.dao.impl; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.Survey; |
import pt.estgp.estgweb.domain.SurveyImpl; |
16,15 → 18,17 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyDaoImpl extends SurveyDao |
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 (SurveyDaoImpl) myInstance; |
return myInstance; |
} |
public List<Survey> loadAllSurveys() |
43,4 → 47,9 |
.add(eq("identifier",identifier)) |
.uniqueResult(); |
} |
@Override |
protected Class getReferenceClass() { |
return SurveyImpl.class; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionAnswerDaoImpl.java |
---|
62,8 → 62,7 |
.addOrder(Order.asc("qca.id")) |
.addOrder(Order.asc("qi.id")) |
.addOrder(Order.asc("q.id")) |
.addOrder(Order.asc("s.id")) |
.addOrder(Order.asc("r.id")); |
.addOrder(Order.asc("s.id")); |
return c.list(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java |
---|
5,10 → 5,8 |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.HibernateException; |
import org.hibernate.criterion.CriteriaSpecification; |
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; |
17,6 → 15,8 |
import java.util.Date; |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.*; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
233,25 → 233,4 |
criteria.add(co); |
return criteria.list(); |
} |
public int countUsersWithoutResponse(List<String> roles) |
{ |
Criteria criteria = createCriteria(); |
if(roles != null) |
{ |
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); |
} |
criteria.createAlias("mySurveyResponses","sr", CriteriaSpecification.LEFT_JOIN) |
.add(isNull("sr.id")); |
return criteria.list().size(); |
} |
} |
/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 |
---|
1,6 → 1,7 |
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; |
17,7 → 18,16 |
@Override |
public boolean canAccessResource(UserSession userSession, String identifier) |
{ |
Survey s = DaoFactory.getSurveyDaoImpl().loadByRepositoryId(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/controllers/surveys/SurveysController.java |
---|
7,6 → 7,7 |
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; |
71,29 → 72,27 |
} |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {view}; |
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(view.getId() <= 0) |
if(newSurvey) |
addMessage(request, "survey.message.created.success"); |
else |
addMessage(request, "survey.message.edited.success"); |
return mapping.findForward("serviceZone"); |
} |
return mapping.getInputForward(); |
return mapping.findForward("serviceZone"); |
} |
catch(AccessDeniedOperationException e) |
{ |
logger.info(e.getMessage()); |
// addMessage(request,"survey.cant.be.edit.because.have.answers"); // Todo TIRAR ISTO |
return mapping.findForward("list"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
168,9 → 167,9 |
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex); |
String questionsToDelete = ""+qView.getId()+","; |
String itemsToDelete = ""; |
String candidatesToDelete = ""; |
String questionsToDelete = surveyView.getDeletedQuestions()+qView.getId()+","; |
String itemsToDelete = surveyView.getDeletedItems(); |
String candidatesToDelete = surveyView.getDeletedCandidates(); |
for(SurveyQuestionItemView iView : qView.getItems()) |
{ |
181,9 → 180,9 |
} |
} |
surveyView.setDeletedQuestions(surveyView.getDeletedQuestions().concat(questionsToDelete)); |
surveyView.setDeletedItems(surveyView.getDeletedItems().concat(itemsToDelete)); |
surveyView.setDeletedCandidates(surveyView.getDeletedCandidates().concat(candidatesToDelete)); |
surveyView.setDeletedQuestions(questionsToDelete); |
surveyView.setDeletedItems(itemsToDelete); |
surveyView.setDeletedCandidates(candidatesToDelete); |
surveyView.getQuestions().remove(questionIndex); |
} |
336,11 → 335,11 |
{ |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView view; |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo ALTERAR O NOME DO SERVICO PARA ADICIONAR FILTRO |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadEditSurvey",args,names); |
if(view != null) |
{ |
387,11 → 386,11 |
{ |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView surveyView; |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo: ALTERAR O NOME DO SERVIÇO PARA DPS POR O FILTRO |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadCloneSurvey",args,names); |
if(surveyView != null) |
{ |
455,8 → 454,8 |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {new Long(request.getParameter("id"))}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id")),request}; |
sm.execute(RequestUtils.getRequester(request,response),"ConsistSurvey",args,names); |
486,13 → 485,10 |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {request,new Long(request.getParameter("id"))}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id")),request}; |
sm.execute(RequestUtils.getRequester(request,response),"GenerateSurveyStats",args,names); |
Object[] args2 = {new Long(request.getParameter("id"))}; |
sm.execute(RequestUtils.getRequester(request,response),"GenerateSurveyStatsCsv",args2,names); |
addMessage(request,"survey.message.operation.started"); |
return mapping.findForward("serviceZone"); |
517,11 → 513,11 |
try |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView view; |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo: ALTERAR NOME DO SERVIÇO PARA FILTROS |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadListStatsSurvey",args,names); |
if(view != null) |
{ |
555,7 → 551,7 |
long resp = Long.parseLong(request.getParameter("resp")); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {resp}; |
SurveyResponseView surveyResponseView; |
565,7 → 561,7 |
{ |
surveysForm.setSurveyResponseView(surveyResponseView); |
String[] names2 = {}; |
String[] names2 = {"serializable"}; |
Object[] args2 = {surveyResponseView.getStructuralNodeView().getSurveyView().getId()}; |
SurveyView surveyView; |
665,10 → 661,11 |
try |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = {sView, rView.getId()}; |
String[] names = {"serializable"}; |
Object[] args = {rView.getId(),sView}; |
SurveyView surveyView; |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"InsertSurveyAnswers",args); |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"InsertSurveyAnswers",args,names); |
if(surveyView != null) |
{ |
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml |
---|
72,11 → 72,11 |
<key column="owner"/> |
<one-to-many class="pt.estgp.estgweb.domain.ManagedIdentifierCollection"/> |
</set> |
<set name="mySurveys" lazy="true"> |
<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"> |
<set name="mySurveyResponses" lazy="true" order-by="id asc"> |
<key column="owner"/> |
<one-to-many class="pt.estgp.estgweb.domain.SurveyResponse"/> |
</set> |
/impl/src/web/admin/surveys/submitSurvey.jsp |
---|
9,11 → 9,23 |
<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/> |
<html:form action="/user/submitSurveyFromServiceZone"> |
<% |
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"/> |
/impl/src/web/css/style.css |
---|
1162,17 → 1162,6 |
} |
/*Duarte Santos*/ |
.form #inputVertical |
{ |
width:150px; |
} |
.form #inputHorizontal |
{ |
width:300px; |
} |
.form input[type="text"], .form input[type="password"], .form input.text, .form input.password |
{ |
width: 800px; |
1829,7 → 1818,16 |
} |
/*SURVEYS - Duarte Santos*/ |
/* Duarte Santos */ |
.form #inputVertical |
{ |
width:150px; |
} |
.form #inputHorizontal |
{ |
width:300px; |
} |
textarea#surveyTextarea { |
width: 400px; |
height: 80px; |
1863,3 → 1861,19 |
border-bottom:1px solid #eeeeee; |
} |
div#loadNodeGraphs { |
margin:10px; |
} |
div#loadNodeGraphsHeader { |
margin-bottom:5px; |
} |
div#listSurveyStats { |
margin:10px; |
} |
.nodeSection { |
margin:5px; |
} |
/impl/src/web/user/surveys/viewResponseGraphs.jsp |
---|
File deleted |
\ No newline at end of file |
/impl/src/web/user/surveys/listSurveyResponsesRecursive.jsp |
---|
File deleted |
\ No newline at end of file |
/impl/src/web/user/surveys/listSurveyStats.jsp |
---|
1,6 → 1,5 |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStructuralNodeView" %> |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyView" %> |
<%@ page import="java.util.List" %> |
<%@ 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" %> |
17,7 → 16,12 |
<% |
SurveyView surveyView = (SurveyView) request.getAttribute("SurveyView"); |
SurveyStructuralNodeView nodeRoot = surveyView.getStructuralNodeView(); |
request.setAttribute("id",surveyView.getId()); |
request.setAttribute("node",nodeRoot); |
%> |
<jsp:include page="listSurveyResponsesRecursive.jsp"/> |
<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 |
---|
43,6 → 43,7 |
<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> |
57,6 → 58,18 |
<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> |
68,12 → 81,16 |
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> |
<td><html:link action="/user/startListSurveyStatsFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.view.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) |
/impl/src/web/user/surveys/listSurveyStatsRecursive.jsp |
---|
New file |
0,0 → 1,50 |
<%@ 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) |
{ |
%> |
<a href="#"><img border="0" onclick="this.src=showOrHide('node<%=node.getId()%>','<%=request.getContextPath()%>/imgs/closedPlus.gif','<%=request.getContextPath()%>/imgs/openedMinus.gif')" |
src="<%=request.getContextPath()%>/imgs/closedPlus.gif" 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/serviceZone/serviceZone.jsp |
---|
51,10 → 51,14 |
// 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/> |
501,16 → 505,16 |
<baco:isModuleOn module="surveys"> |
<div class="block"> |
<div class="head"> |
<bean:message key="intranet.my.surveys"/> |
<a href="#"><img border="0" onclick="this.src=showOrHide('mySurveys','<%=request.getContextPath()%>/imgs/closedbox.gif','<%=request.getContextPath()%>/imgs/openedbox.gif')" src="<%=request.getContextPath()%>/imgs/closedbox.gif" alt="abrir"/></a> |
<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="mySurveys" style="display:none;"> |
<div id="mySurveysStats" style="display:none;"> |
<% |
if(ownerSurveys.size() == 0) |
if(consultStatsSurveys.size() == 0) |
{ |
%> |
<div class="zerofound"> |
<bean:message key="survey.zero.placed"/> |
<bean:message key="survey.stats.zero.placed"/> |
</div> |
<% |
} |
519,16 → 523,13 |
%> |
<table> |
<% |
for(SurveyView s : ownerSurveys) |
for (SurveyView s : consultStatsSurveys) |
{ |
%> |
<tr> |
<td> |
<a href="<%=request.getContextPath()%>/user/startListSurveysFromServiceZone.do"><%=s.getTitle()%></a> |
<a href="<%=request.getContextPath()%>/user/startListSurveyStats.do?id=<%=s.getId()%>&from=ServiceZone"><%=s.getTitle()%></a> |
</td> |
<td> |
<%=s.getFormatedSaveDate()%> |
</td> |
</tr> |
<% |
} |
539,19 → 540,7 |
%> |
</div> |
</div> |
<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;"> |
<div class="zerofound"> |
<bean:message key="survey.stats.zero.placed"/> |
</div> |
</div> |
</div> |
</baco:isModuleOn> |
<!----> |
</td> |
</tr> |
/impl/src/web/user/serviceZone/topnavListSurveyStats.jsp |
---|
5,6 → 5,7 |
<% |
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"); |
%> |
/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"/> |