package pt.estgp.estgweb.domain.dao.impl;
import jomm.dao.DaoException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto;
import pt.estgp.estgweb.domain.QuestionarioResposta;
import pt.estgp.estgweb.domain.QuestionarioRespostaRequisitada;
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 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 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 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 " +
",sum (u.turmas) AS turmas " +
",sum (u.students) AS students " +
",sum (case when u.usar = true then u.students else 0 end) AS alunosDeUsadas " +
",sum (case when u.usar = true then u.profs else 0 end) AS profsDeUsadas " +
",sum (case when u.usar = true then 1 else 0 end) AS unidadesUsadas " +
",sum (case when u.usar = true then 1 else 1 end) AS unidadesTodasCheck " +
",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 " +
"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.
unidadesUsadas =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[7
];
if(((1.5.0/docs/api/java/lang/Long.html">Long) results
[8]) != questionarioStatsVars.
unidades)
logger.
error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM");
questionarioStatsVars.
profsTimeStudents =
(1.5.0/docs/api/java/lang/Long.html">Long) results
[9
];
questionarioStatsVars.
respostasRequisitadas = getNumeroRespostasRequisitadas
(questionarioId
);
questionarioStatsVars.
respostasObtidas = getNumeroRespostas
(questionarioId
);
}
return questionarioStatsVars
;
}
}