/** * 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.comunidades.portlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.portlet.PortletException; import javax.portlet.PortletPreferences; import javax.portlet.PortletRequest; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import br.gov.camara.edemocracia.portlets.comunidades.ElementoComunidade; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.Group; import com.liferay.portal.model.Layout; import com.liferay.portal.service.LayoutLocalServiceUtil; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; import com.liferay.util.bridges.mvc.MVCPortlet; public abstract class ListaComunidadesPortlet extends MVCPortlet { public ListaComunidadesPortlet() { super(); } @Override public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { ThemeDisplay td = (ThemeDisplay) renderRequest .getAttribute(WebKeys.THEME_DISPLAY); List<Group> comunidades = getComunidades(renderRequest, td); int pageSize = getPageSize(renderRequest); int pageTotal = getPageTotal(comunidades, pageSize); int currentPage = getCurrentPage(renderRequest, pageTotal); List<ElementoComunidade> page = getPage(comunidades, td, pageSize, currentPage); String titulo = getTitulo(); renderRequest.setAttribute("comunidades", page); renderRequest.setAttribute("pageSize", pageSize); renderRequest.setAttribute("currentPage", currentPage); renderRequest.setAttribute("pageTotal", pageTotal); renderRequest.setAttribute("titulo", titulo); super.doView(renderRequest, renderResponse); } private ElementoComunidade makeElementoComunidade(Group grp, ThemeDisplay td) throws SystemException, PortalException { long plid; long grpId = grp.getGroupId(); if (grp.getPrivateLayoutsPageCount() > 0) plid = LayoutLocalServiceUtil.getDefaultPlid(grpId, true); else plid = LayoutLocalServiceUtil.getDefaultPlid(grpId, false); Layout layout = LayoutLocalServiceUtil.getLayout(plid); String grpUrl = PortalUtil.getLayoutURL(layout, td, true); String grpName = grp.getName(); String grpImgUrl = CommunityIconFinder.findUrl(td, grpId); return new ElementoComunidade(grpUrl, grpName, grpImgUrl); } private int getPageSize(RenderRequest renderRequest) { PortletPreferences pp = renderRequest.getPreferences(); int pageSize = 5; String strPageSize = pp.getValue("comm_page_size", Integer .toString(pageSize)); try { pageSize = Integer.parseInt(strPageSize); } catch (NumberFormatException nfe) { // } return pageSize; } private int getPageTotal(List<Group> comunidades, int pageSize) { int size = comunidades.size(); return (size % pageSize == 0) && size > 0 ? size / pageSize : size / pageSize + 1; } private int getCurrentPage(RenderRequest renderRequest, int pageTotal) { int currentPage = ParamUtil.getInteger(renderRequest, "currentPage", 1); currentPage = currentPage <= pageTotal ? currentPage : pageTotal; currentPage = currentPage >= 1 ? currentPage : 1; return currentPage; } private List<ElementoComunidade> getPage( List<Group> comunidades, ThemeDisplay td, int pageSize, int currentPage) { int size = comunidades.size(); List<Group> page = size == 0 ? comunidades : comunidades .subList((currentPage - 1) * pageSize, Math.min(size, currentPage * pageSize)); ArrayList<ElementoComunidade> ret = new ArrayList<ElementoComunidade>(); for (Group group : page) { try { ret.add(makeElementoComunidade(group, td)); } catch (PortalException e) { // TODO LOG } catch (SystemException e) { // TODO LOG } } return ret; } protected abstract List<Group> getComunidades( PortletRequest renderRequest, ThemeDisplay td); protected abstract String getTitulo(); }