package pt.estgp.estgweb.domain.dao.impl;
import jomm.dao.DaoException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.*;
import java.util.ArrayList;
import java.util.List;
import static org.
hibernate.
criterion.
Restrictions.
*;
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class QuestionarioDaoImpl
extends QuestionarioDao
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(QuestionarioDaoImpl.
class);
public static QuestionarioDaoImpl getInstance
()
{
if (myInstance ==
null)
myInstance =
new QuestionarioDaoImpl
();
return (QuestionarioDaoImpl
) myInstance
;
}
public List
<QuestionarioImpl
> findSortedBy
(int pageIndex,
int sizeOfPage,
1.5.0/docs/api/java/lang/String.html">String field
)
{
try
{
Criteria criteria = createCriteria
();
criteria.
setFirstResult(pageIndex
* sizeOfPage
);
criteria.
setMaxResults(sizeOfPage
);
criteria.
addOrder(Order.
desc(field
));
return criteria.
list();
}
catch (HibernateException e
)
{
throw new DaoException
(e
);
}
}
public List
<QuestionarioImpl
> findAnoSemestre
(1.5.0/docs/api/java/lang/String.html">String year,
1.5.0/docs/api/java/lang/String.html">String semestre,
long historyDriveId
)
{
try
{
Criteria criteria = createCriteria
();
criteria.
add(eq
("year",year
))
.
add(eq
("semestre", semestre
))
.
add(eq
("questionarioHistoryDrive.id",historyDriveId
));
return criteria.
list();
}
catch (HibernateException e
)
{
throw new DaoException
(e
);
}
}
public List
<QuestionarioImpl
> findProcessing
()
{
try
{
Criteria criteria = createCriteria
();
criteria.
add(or
(eq
("state",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING.
name()),eq
("state",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS.
name())));
return criteria.
list();
}
catch (HibernateException e
)
{
throw new DaoException
(e
);
}
}
public List
<QuestionarioImpl
> findNotClosed
()
{
try
{
Criteria criteria = createCriteria
();
criteria.
add(not
(or
(or
(eq
("state",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
CLOSED.
name()),eq
("state",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_OLAP.
name())),
eq
("state",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
OLAP.
name()))))
.
addOrder(Order.
desc("id"));
return criteria.
list();
}
catch (HibernateException e
)
{
throw new DaoException
(e
);
}
}
public long getNumeroRespostas
(long questionarioId
)
{
1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession
().
createQuery
("select count(r.id) from r in class " + QuestionarioResposta.
class.
getName() +
" " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId
);
5+0%2Fdocs%2Fapi+Object">Object result = q.
uniqueResult();
if(result
!=
null && ((1.5.0/docs/api/java/lang/Long.html">Long)result
) > 0
)
{
return (1.5.0/docs/api/java/lang/Long.html">Long)result
;
}
else
return 0;
}
public long getNumeroUnidadesUsadas
(long questionarioId
)
{
1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession
().
createQuery
("select count(u.id) from u in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.
class.
getName() +
" " +
" JOIN u.cursoAfeto c " +
" JOIN c.questionario q " +
" where u.usar = true AND q.id = " + questionarioId
);
5+0%2Fdocs%2Fapi+Object">Object result = q.
uniqueResult();
if(result
!=
null && ((1.5.0/docs/api/java/lang/Long.html">Long)result
) > 0
)
{
return (1.5.0/docs/api/java/lang/Long.html">Long)result
;
}
else
return 0;
}
public long getNumeroRespostasRequisitadas
(long questionarioId
)
{
1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession
().
createQuery
("select count(r.id) from r in class " + QuestionarioRespostaRequisitada.
class.
getName() +
" " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId
);
5+0%2Fdocs%2Fapi+Object">Object result = q.
uniqueResult();
if(result
!=
null && ((1.5.0/docs/api/java/lang/Long.html">Long)result
) > 0
)
{
return (1.5.0/docs/api/java/lang/Long.html">Long)result
;
}
else
return 0;
}
/*
public AnnouncementDaoImpl.FindUsersResult findUsersEmails(Long id,boolean onlyNotAnswered)
{
AnnouncementDaoImpl.FindUsersResult findUsersResult = new AnnouncementDaoImpl.FindUsersResult();
List<String> users = new ArrayList<String>();
findUsersResult.emails = users;
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" u.outEmail, u.preferrefEmail, u.email " +
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " +
"JOIN rR.questionario q " +
"JOIN rR.user u " +
"WHERE q.id = :id " +
(onlyNotAnswered? " AND rR.resposta is null " : "" ) +
"GROUP BY u.id");
q.setLong("id",id);
List<Object[]> results = (List<Object[]>) q.list();
fullFillResults(findUsersResult, results);
return findUsersResult;
}
*/
public AnnouncementDaoImpl.
FindUsersIdResult findUsersIds
(1.5.0/docs/api/java/lang/Long.html">Long id,
boolean onlyNotAnswered
)
{
AnnouncementDaoImpl.
FindUsersIdResult findUsersResult =
new AnnouncementDaoImpl.
FindUsersIdResult();
List
<Long
> users =
new ArrayList
<Long
>();
findUsersResult.
userIds = users
;
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery("SELECT " +
" u.id " +
"from " + QuestionarioRespostaRequisitada.
class.
getName() +
" rR " +
"JOIN rR.questionario q " +
"JOIN rR.user u " +
"WHERE q.id = :id " +
(onlyNotAnswered
? " AND rR.resposta is null " :
"" ) +
"GROUP BY u.id");
q.
setLong("id",id
);
List
<Object
> results =
(List
<Object
>) q.
list();
for(5+0%2Fdocs%2Fapi+Object">Object result: results
)
{
findUsersResult.
userIds.
add((1.5.0/docs/api/java/lang/Long.html">Long) result
);
}
findUsersResult.
users = results.
size();
return findUsersResult
;
}
public AnnouncementDaoImpl.
FindUsersIdResult findUsersIdsPedagogico
(boolean onlyNotAnswered,
long cursoAfetoId,
long unidadeAfetaId
)
{
AnnouncementDaoImpl.
FindUsersIdResult findUsersResult =
new AnnouncementDaoImpl.
FindUsersIdResult();
List
<Long
> users =
new ArrayList
<Long
>();
findUsersResult.
userIds = users
;
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery("SELECT " +
" u.id " +
"from " + QuestionarioPedagogicoAlunoRequisitado.
class.
getName() +
" aR " +
"JOIN aR.respostaRequisitada rR " +
"JOIN rR.user u " +
"WHERE " +
(cursoAfetoId
> 0 ?
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.id = " + cursoAfetoId :
" aR.tipologiaRequisitada.unidadeAfeta.id = " + unidadeAfetaId
) +
(onlyNotAnswered
? " AND rR.resposta is null " :
"" ) +
"GROUP BY u.id");
List
<Object
> results =
(List
<Object
>) q.
list();
for(5+0%2Fdocs%2Fapi+Object">Object result: results
)
{
findUsersResult.
userIds.
add((1.5.0/docs/api/java/lang/Long.html">Long) result
);
}
findUsersResult.
users = results.
size();
return findUsersResult
;
}
public AnnouncementDaoImpl.
FindUsersIdResult findUsersIdsPedagogicoAllProcessing
(boolean onlyNotAnswered
)
{
AnnouncementDaoImpl.
FindUsersIdResult findUsersResult =
new AnnouncementDaoImpl.
FindUsersIdResult();
List
<Long
> users =
new ArrayList
<Long
>();
findUsersResult.
userIds = users
;
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery("SELECT " +
" u.id " +
"from " + QuestionarioPedagogicoAlunoRequisitado.
class.
getName() +
" aR " +
"JOIN aR.respostaRequisitada rR " +
"JOIN rR.user u " +
"WHERE " +
"( " +
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP1 " +
" OR " +
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP2 " +
")" +
(onlyNotAnswered
? " AND rR.resposta is null " :
"" ) +
"GROUP BY u.id");
q.
setString("sP1",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING.
name());
q.
setString("sP2",QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS.
name());
List
<Object
> results =
(List
<Object
>) q.
list();
for(5+0%2Fdocs%2Fapi+Object">Object result: results
)
{
findUsersResult.
userIds.
add((1.5.0/docs/api/java/lang/Long.html">Long) result
);
}
findUsersResult.
users = results.
size();
return findUsersResult
;
}
public static class QuestionarioStatsVars
{
public long cursos
;
public long unidades
;
public long profs
;
public long alunos
;
public long turmas
;
public long alunosDeUsadas
;
public long profsDeUsadas
;
public long unidadesUsadas
;
public long tipologiasUsadas
;
public long profsTimeStudents
;
public long respostasRequisitadas
;
public long respostasObtidas
;
}
public QuestionarioStatsVars loadQuestionarioStatsPedagogico
(long questionarioId
)
{
QuestionarioStatsVars questionarioStatsVars =
new QuestionarioStatsVars
();
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery("SELECT " +
" count(distinct c.id) AS cursos " +
",count(distinct u.id) AS unidades " +
",sum (u.profs) AS profs " +
",count(distinct t.cdTurma) AS turmas " +
",sum (u.students) AS students " +
",count(distinct a.aluno.id) AS alunosDeUsadas " +
",count(distinct t.docenteAfeto.id) AS profsDeUsadas " +
",count(distinct t.id) AS tipologiasRequisitadas " +
",sum (case when u.usar = true then (u.profs * u.students) else 0 end) AS respostasEsperadas " +
"from " + QuestionarioPedagogicoCursoAfeto.
class.
getName() +
" c " +
"JOIN c.questionario q " +
"JOIN c.unidadesAfetas u " +
"JOIN u.tipologiasRequisitadas t " +
"JOIN t.alunosRequisitados a " +
"WHERE q.id = :id " +
"GROUP BY q.id");
q.
setLong("id",questionarioId
);
5+0%2Fdocs%2Fapi+Object">Object[] results =
(5+0%2Fdocs%2Fapi+Object">Object[]) q.
uniqueResult();
if(results
!=
null && results
[0
] !=
null)
{
questionarioStatsVars.
cursos =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[0
];
questionarioStatsVars.
unidades =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[1
];
questionarioStatsVars.
profs =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[2
];
questionarioStatsVars.
turmas =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[3
];
questionarioStatsVars.
alunos =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[4
];
questionarioStatsVars.
alunosDeUsadas =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[5
];
questionarioStatsVars.
profsDeUsadas =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[6
];
questionarioStatsVars.
tipologiasUsadas =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[7
];
questionarioStatsVars.
profsTimeStudents =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[8
];
questionarioStatsVars.
respostasRequisitadas = getNumeroRespostasRequisitadas
(questionarioId
);
questionarioStatsVars.
respostasObtidas = getNumeroRespostas
(questionarioId
);
questionarioStatsVars.
unidadesUsadas = getNumeroUnidadesUsadas
(questionarioId
);
if(questionarioStatsVars.
unidadesUsadas > questionarioStatsVars.
unidades)
logger.
error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM");
}
return questionarioStatsVars
;
}
}