/** * 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.dashboard.customquery; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.apache.commons.lang3.StringUtils; import br.gov.camara.edemocracia.portlets.dashboard.cache.util.CacheKey; import br.gov.camara.edemocracia.portlets.dashboard.dto.Configuracao; import br.gov.camara.edemocracia.portlets.dashboard.dto.RecursoDTO; import com.liferay.portal.kernel.dao.jdbc.DataAccess; public abstract class QueryExecutor { protected abstract List<RecursoDTO> listar(Connection connection, Configuracao config, long companyId) throws SQLException; public abstract CacheKey getChaveCache(); public final List<RecursoDTO> listarRecursosComMaiorParticipacao(Connection connection, Configuracao config, long companyId) throws SQLException { List<RecursoDTO> retorno = listar(connection, config, companyId); adicionarClassificacaoETruncarTitulo(retorno); buscarEscopoSeNecessario(retorno, connection); return retorno; } public static int getQuantidadeMaximaDeResultados(Configuracao config) { if (config.getQtdDeRecursos() == 0) { return Configuracao.QUANTIDADE_DE_RECURSOS_PADRAO; } else { return config.getQtdDeRecursos(); } } /** * Verifica se o recurso está em um escopo especifico. Se estiver, busca a * página de escopo correspondente * * @throws SQLException */ private static void buscarEscopoSeNecessario(List<RecursoDTO> recursos, Connection conn) throws SQLException { for (RecursoDTO recurso : recursos) { // ACERTAR DOCUMENTACAO que possuem escopo o liferay cria um // registro intermediario na tabela Group // e o nome da comunidade fica sendo o plid da página de escopo. String tituloComunidade = recurso.getTituloComunidade(); boolean possuiEscopo = StringUtils.isNumeric(tituloComunidade); if (possuiEscopo) { String escopo = buscarEscopo(conn, tituloComunidade); if (StringUtils.isBlank(escopo)) { recurso.setTituloComunidade("Comunidade Global"); } else { recurso.setTituloComunidade(escopo); } } } } /** * Retorna a comunidade e a página correspondente ao escopo * * Ex: Politica Espaçial ("/pagina") * * @param conn * @param plid * @return * @throws SQLException */ private static String buscarEscopo(Connection conn, String plid) throws SQLException { StringBuilder sb = new StringBuilder(); sb.append(" SELECT g.name as comunidade , l.friendlyURL as paginaEscopo "); sb.append(" FROM Layout l "); sb.append(" INNER JOIN Group_ g ON l.groupId = g.groupId "); sb.append(" WHERE l.plid = ? "); String sql = sb.toString(); PreparedStatement ps = null; ResultSet result = null; try { ps = conn.prepareStatement(sql); ps.setLong(1, Long.parseLong(plid)); result = ps.executeQuery(); String tituloComunidadeComEscopo = ""; while (result.next()) { String comunidade = result.getString("comunidade"); String paginaEscopo = result.getString("paginaEscopo"); tituloComunidadeComEscopo = comunidade + " (escopo: " + paginaEscopo + ")"; } return tituloComunidadeComEscopo; } finally { DataAccess.cleanUp(result); DataAccess.cleanUp(ps); } } /** * Trunca o titulo, deixando apenas 88 caracteres * * @param recurso */ private static void truncarTitulo(RecursoDTO recurso) { String titulo = recurso.getTitulo(); if (StringUtils.isNotBlank(titulo) && titulo.length() > 85) { recurso.setTitulo(titulo.substring(0, 85) + " ..."); } } private static void adicionarClassificacaoETruncarTitulo(List<RecursoDTO> recursos) { int i = 1; for (RecursoDTO recursoDTO : recursos) { truncarTitulo(recursoDTO); recursoDTO.setClassificacao(i); i++; } } }