/** * 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.contadores; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.Map; import javax.portlet.PortletException; import javax.portlet.PortletRequest; import javax.portlet.PortletRequestDispatcher; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import br.gov.camara.edemocracia.portlets.graficos.DadosConsolidados; import br.gov.camara.edemocracia.portlets.graficos.service.ContadorAcessoLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.portlet.LiferayPortlet; import com.liferay.portal.kernel.portlet.LiferayPortletSession; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.Group; import com.liferay.portal.service.GroupLocalServiceUtil; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; /** * @author robson * */ public class ContadoresPortlet extends LiferayPortlet { @Override protected void doView(RenderRequest request, RenderResponse response) throws PortletException, java.io.IOException { PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher( "/html/contadores/contadores.jsp"); long companyId = PortalUtil.getCompanyId(request); try { if (hasPermission(request)) { Map<Long, DadosConsolidados> dados = ContadorAcessoLocalServiceUtil.getDadosConsolidados(companyId); request.setAttribute("dados", dados); ArrayList<Group> grupos = new ArrayList<Group>(); for (Long groupId : dados.keySet()) { if (groupId != null) { try { grupos.add(GroupLocalServiceUtil.getGroup(groupId)); } catch (PortalException e) { } } else { grupos.add(null); } } request.setAttribute("grupos", grupos); } else { request.setAttribute("dados", Collections.EMPTY_MAP); } } catch (SystemException e) { if (e.getCause() == null) throw new PortletException(e); else throw new PortletException(e.getCause()); } portletRequestDispatcher.include(request, response); } /** * Verifica se o usuário possui permissões * * @param request * @return */ private boolean hasPermission(PortletRequest request) { ThemeDisplay td = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); String name = td.getPortletDisplay().getRootPortletId(); String primKey; if ("".equals(name) || name == null) { name = PortalUtil.getPortletId(request); primKey = td.getLayout().getPlid() + LiferayPortletSession.LAYOUT_SEPARATOR + name; } else { primKey = td.getPortletDisplay().getResourcePK(); } return td.getPermissionChecker().hasPermission(td.getScopeGroupId(), name, primKey, "VIEW"); } /** * Fornece o arquivo CSV */ @Override public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException { if (hasPermission(resourceRequest)) { resourceResponse.setContentType("text/csv; charset=ISO-8859-1"); resourceResponse.setCharacterEncoding("ISO-8859-1"); resourceResponse.setProperty("content-disposition", "attachment;filename=contadores.csv"); OutputStream os = resourceResponse.getPortletOutputStream(); Writer writer = new OutputStreamWriter(os, Charset.forName(resourceResponse.getCharacterEncoding())); long companyId = PortalUtil.getCompanyId(resourceRequest); try { writer.write(ContadorAcessoLocalServiceUtil.getCSV(companyId)); } catch (SystemException e) { throw new PortletException(e); } writer.flush(); } else { super.serveResource(resourceRequest, resourceResponse); } } }