/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.portlets.priorizacao.service.persistence;
import java.util.List;
import br.gov.camara.edemocracia.portlets.priorizacao.model.Voto;
import com.liferay.portal.kernel.dao.orm.SQLQuery;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
/**
* @author p_7339
*
*/
public class VotoFinderImpl extends BasePersistenceImpl<Voto> implements VotoFinder {
/**
* Conta o número de propostas mais votos do que o informado
*
* @return
*/
@Override
public int countUserIdComMaisVotosPorProposta(long groupId, int votosPorProposta) throws SystemException {
Session session = null;
try {
session = openSession();
SQLQuery q = session.createSQLQuery(
"SELECT COUNT(*) FROM (" +
"SELECT DISTINCT vv.userId FROM " +
"(SELECT v.propostaId AS propostaId, v.userId AS userId, SUM(v.numeroVotos) AS numeroVotos FROM " +
"PR_Proposta p JOIN PR_Voto v ON v.propostaId = p.propostaId WHERE p.groupId = ? " +
"GROUP BY v.propostaId, v.userId HAVING SUM(v.numeroVotos) > ?) AS vv) AS v2");
q.setLong(0, groupId);
q.setInteger(1, votosPorProposta);
List<?> ret = q.list();
return ((Number)ret.get(0)).intValue();
} catch (Exception e) {
throw processException(e);
} finally {
closeSession(session);
}
}
/**
* Conta o número de userId que já votaram mais vezes do que o informado
* @param groupId
* @param totalVotos
* @return
* @throws SystemException
*/
@Override
public int countUserIdComMaisVotosTotal(long groupId, int totalVotos) throws SystemException {
Session session = null;
try {
session = openSession();
SQLQuery q = session.createSQLQuery("SELECT COUNT(*) FROM " +
"(SELECT v.userId, SUM(v.numeroVotos) AS numeroVotos FROM PR_Proposta p JOIN PR_Voto v ON p.propostaId = v.propostaId " +
"WHERE p.groupId = ? GROUP BY v.userId HAVING SUM(v.numeroVotos) > ?) AS s" );
q.setLong(0, groupId);
q.setInteger(1, totalVotos);
List<?> ret = q.list();
return ((Number)ret.get(0)).intValue();
} catch (Exception e) {
throw processException(e);
} finally {
closeSession(session);
}
}
}