/** * 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.ui.pages; import java.util.ArrayList; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.RefreshingView; import org.apache.wicket.model.ComponentPropertyModel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.protocol.http.WebRequest; import br.gov.camara.edemocracia.portlets.priorizacao.model.Eixo; import br.gov.camara.edemocracia.portlets.priorizacao.model.Proposta; import br.gov.camara.edemocracia.portlets.priorizacao.service.PriorizacaoServiceUtil; import br.gov.camara.edemocracia.portlets.priorizacao.ui.panels.MenuPanel; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.util.PortalUtil; /** * Página inicial de apresentação das propostas * * @author robson * */ public class HomePageOld extends WebPage { private RefreshingView<Eixo> eixos; private static final Log LOG = LogFactoryUtil .getLog(HomePageOld.class); public HomePageOld() { initMenu(); initEixos(); } private void initMenu() { add(new MenuPanel("menu")); } private void initEixos() { eixos = new RefreshingView<Eixo>("eixos") { @Override protected Iterator<IModel<Eixo>> getItemModels() { return listEixos(); } @Override protected void populateItem(Item<Eixo> item) { item.add(new Label("titulo", new ComponentPropertyModel<String>("titulo"))); item.add(new Label("sumario", new ComponentPropertyModel<String>("sumario"))); final Long eixoId = item.getModelObject() != null ? item.getModelObject().getEixoId() : null; RefreshingView<Proposta> propostas = new RefreshingView<Proposta>("propostas") { @Override protected Iterator<IModel<Proposta>> getItemModels() { return listPropostas(eixoId); } @Override protected void populateItem(Item<Proposta> item) { PageParameters params = new PageParameters(); if (item.getModelObject() != null) params.put("proposta", item.getModelObject().getPropostaId()); BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("link", VotacaoPage.class, params); link.add(new Label("identificador")); item.add(link); item.add(new Label("ementa")); } }; propostas.setVisible(getPropostasCount(eixoId) != 0); item.add(propostas); } }; add(eixos); } /** * Obtém a lista de propostas de um eixo * * @param eixoId * @return */ private Iterator<IModel<Proposta>> listPropostas(Long eixoId) { ArrayList<IModel<Proposta>> retorno = new ArrayList<IModel<Proposta>>(); if (eixoId != null) { try { for (Proposta proposta : PriorizacaoServiceUtil.listarPropostasPorEixoId(eixoId)) { final long propostaId = proposta.getPropostaId(); retorno.add(new CompoundPropertyModel<Proposta>(new LoadableDetachableModel<Proposta>(proposta) { @Override protected Proposta load() { try { return PriorizacaoServiceUtil.getProposta(propostaId); } catch (PortalException e) { //TODO Log LOG.error("Erro ao obter proposta.", e); return null; } catch (SystemException e) { // TODO Log LOG.error("Erro ao obter proposta.", e); return null; } } })); } } catch (SystemException e) { // TODO Log } } return retorno.iterator(); } private int getPropostasCount(long eixoId){ try { return PriorizacaoServiceUtil.getPropostasCountByEixoId(eixoId); } catch (SystemException e) { //TODO LOG.error("Erro ao obter número de propostas do eixo",e); } return 0; } /** * Obtém a lista de eixos * * @return */ private Iterator<IModel<Eixo>> listEixos() { ArrayList<IModel<Eixo>> retorno = new ArrayList<IModel<Eixo>>(); HttpServletRequest request = ((WebRequest) (RequestCycle.get()).getRequest()).getHttpServletRequest(); try { long scopeGroupId = PortalUtil.getScopeGroupId(request); for (Eixo eixo : PriorizacaoServiceUtil.listarEixos(scopeGroupId)) { final long eixoId = eixo.getEixoId(); retorno.add(new LoadableDetachableModel<Eixo>(eixo) { @Override protected Eixo load() { try { return PriorizacaoServiceUtil.getEixo(eixoId); } catch (PortalException e) { // TODO Log LOG.error("Erro ao obter eixo."); return null; } catch (SystemException e) { // TODO Log LOG.error("Erro ao obter eixo."); return null; } } }); } } catch (PortalException e) { // TODO Log LOG.error("Erro ao obter lista de eixos.", e); } catch (SystemException e) { // TODO Log LOG.error("Erro ao obter lista de eixos.", e); } return retorno.iterator(); } }