/** * 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.wikilegis.service.persistence; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import br.gov.camara.edemocracia.portlets.wikilegis.ArtigoDisplay; import br.gov.camara.edemocracia.portlets.wikilegis.model.Artigo; import br.gov.camara.edemocracia.portlets.wikilegis.model.impl.ArtigoImpl; import com.liferay.portal.kernel.dao.orm.QueryPos; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.dao.orm.SQLQuery; import com.liferay.portal.kernel.dao.orm.Session; import com.liferay.portal.kernel.dao.orm.Type; import com.liferay.portal.service.persistence.impl.BasePersistenceImpl; import com.liferay.util.dao.orm.CustomSQLUtil; public class ArtigoFinderImpl extends BasePersistenceImpl<Artigo> implements ArtigoFinder { private static final String FIND_ALL_ARTIGO_DISPLAY = ArtigoFinderImpl.class.getName() + ".findAllArtigoDisplay"; private static final String FIND_ARTIGO_DISPLAY_BY_G_E = ArtigoFinderImpl.class.getName() + ".findArtigoDisplayByGE"; /** * Lista todos os artigos do grupo * @param groupId * @return */ @Override public Map<Long, List<ArtigoDisplay>> findAllArtigoDisplay(long groupId) { Session session = null; try { session = openSession(); SQLQuery q = session.createSQLQuery(CustomSQLUtil.get(FIND_ALL_ARTIGO_DISPLAY)); q.setCacheable(true); q.addEntity("art", ArtigoImpl.class); q.addScalar("contribuicoes", Type.INTEGER); q.addScalar("comentarios", Type.INTEGER); QueryPos qPos = QueryPos.getInstance(q); qPos.add(groupId); List<Object[]> list = (List<Object[]>) QueryUtil.list(q, getDialect(), QueryUtil.ALL_POS, QueryUtil.ALL_POS); Map<Long, List<ArtigoDisplay>> artigosPorEstrutura = new HashMap<Long, List<ArtigoDisplay>>(); long estruturaIdAtual = Long.MIN_VALUE; ArrayList<ArtigoDisplay> listaAtual = null; for (Object[] obj : list) { Artigo artigo = (Artigo) obj[0]; int contribuicoes = (Integer)obj[1]; int comentarios = (Integer)obj[2]; if (estruturaIdAtual != artigo.getEstruturaId()) { if (listaAtual != null && !listaAtual.isEmpty()) artigosPorEstrutura.put(estruturaIdAtual, Collections.unmodifiableList(listaAtual)); listaAtual = new ArrayList<ArtigoDisplay>(); estruturaIdAtual = artigo.getEstruturaId(); } listaAtual.add(new ArtigoDisplay(artigo, comentarios, contribuicoes)); } if (listaAtual != null && !listaAtual.isEmpty()) artigosPorEstrutura.put(estruturaIdAtual, Collections.unmodifiableList(listaAtual)); return Collections.unmodifiableMap(artigosPorEstrutura); } finally { closeSession(session); } } /** * Lista os artigos filhos da estrutura especificada * * @param estruturaId * @return */ @Override public List<ArtigoDisplay> findDisplayByG_E(long groupId, long estruturaId) { Session session = null; try { session = openSession(); SQLQuery q = session.createSQLQuery(CustomSQLUtil.get(FIND_ARTIGO_DISPLAY_BY_G_E)); q.setCacheable(true); q.addEntity("art", ArtigoImpl.class); q.addScalar("contribuicoes", Type.INTEGER); q.addScalar("comentarios", Type.INTEGER); QueryPos qPos = QueryPos.getInstance(q); qPos.add(groupId); qPos.add(estruturaId); @SuppressWarnings("unchecked") List<Object[]> list = (List<Object[]>) QueryUtil.list(q, getDialect(), QueryUtil.ALL_POS, QueryUtil.ALL_POS); List<ArtigoDisplay> artigos = new ArrayList<ArtigoDisplay>(); for (Object[] obj : list) { Artigo artigo = (Artigo) obj[0]; int contribuicoes = (Integer)obj[1]; int comentarios = (Integer)obj[2]; artigos.add(new ArtigoDisplay(artigo, comentarios, contribuicoes)); } return Collections.unmodifiableList(artigos); } finally { closeSession(session); } } }