/** * 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.ui.pages; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.RequestCycle; import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.JavascriptPackageResource; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.RefreshingView; import org.apache.wicket.model.AbstractReadOnlyModel; 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.wikilegis.ArtigoDisplay; import br.gov.camara.edemocracia.portlets.wikilegis.ElementoDisplay; import br.gov.camara.edemocracia.portlets.wikilegis.EstruturaDisplay; import br.gov.camara.edemocracia.portlets.wikilegis.service.EstruturaLocalServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.service.WikiLegisServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.ui.behaviour.WicketAjaxJsPatch; import br.gov.camara.edemocracia.portlets.wikilegis.ui.panels.NavegadorPanel; import br.gov.camara.edemocracia.portlets.wikilegis.ui.panels.WikiLegisArtigoPanel; import br.gov.camara.edemocracia.portlets.wikilegis.ui.panels.WikiLegisEstruturaPanel; import br.gov.camara.edemocracia.portlets.wikilegis.ui.panels.WikiLegisMenuPanel; import br.gov.camara.edemocracia.portlets.wikilegis.ui.util.UIUtils; import br.gov.camara.liferay.comum.StaticImage; import com.google.common.collect.Iterators; 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.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; /** * @author robson * */ public class HomePage extends WebPage { private static final Log LOG = LogFactoryUtil.getLog(HomePage.class); public HomePage() { if (!UIUtils.getThemeDisplay().getUser().getDefaultUser()) { add(JavascriptPackageResource.getHeaderContribution("html/js/liferay/liferay_restart_session.js")); } add(new WicketAjaxJsPatch()); init(); } /** * Cria os componentes */ private void init() { // Monta o menu com funções administrativas initMenuWikilegis(); // Título do projeto de lei initTituloProjetoLei(); initImgExpandir(); // Título da Descrição do Projeto de Lei initTituloDescricaoProjeto(); // Descricao do Projeto initDescricaoProjeto(); // Monta o painel de estrutura initNavegador(); // Monta o quadro com o plugin do facebook initPlugins(); // Monta a lista de elementos raiz initFilhos(); } private void initImgExpandir() { String imgAbrirArvore; add(JavascriptPackageResource.getHeaderContribution("html/js/liferay/arvore.js")); imgAbrirArvore = UIUtils.getThemeDisplay().getPathThemeImages() + "/custom/iconeRecolher.gif"; StaticImage img = new StaticImage("imgExpandir", imgAbrirArvore); add(img); } private void initTituloDescricaoProjeto() { add(new Label("tituloDescricaoProjeto", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return UIUtils.getPortletPreferences().getValue("tituloDescricao", "Altere este título em \"Preferências\""); } })); } private void initDescricaoProjeto() { Label descricaoProjeto = new Label("descricaoProjeto", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return UIUtils.getPortletPreferences().getValue("descricaoProjeto", "Altere esta descrição em \"Preferências\" "); } }); descricaoProjeto.setEscapeModelStrings(false); add(descricaoProjeto); } private void initTituloProjetoLei() { add(new Label("tituloProjetoLei", new AbstractReadOnlyModel<String>() { /** * */ private static final long serialVersionUID = 1L; @Override public String getObject() { return UIUtils.getPortletPreferences().getValue("titulo", "Altere o título em \"Preferências\""); } })); } private void initPlugins(){ Label plugins = new Label("plugins"); plugins.setVisible(Boolean.parseBoolean(UIUtils.getPortletPreferences().getValue("habilitaPlugins", "false"))); String urlComunidade = getURLComunidade(); String urlToShare = StringPool.BLANK; if(urlComunidade != null){ urlToShare = "//www.facebook.com/plugins/like.php?href=#LINK#&send=false&layout=standard&width=235&"; urlToShare = urlToShare.replace("#LINK#", urlComunidade); plugins.add(new SimpleAttributeModifier("src",urlToShare)); } add(plugins); } private void initMenuWikilegis() { add(new WikiLegisMenuPanel("menuWikilegis")); } private void initNavegador() { add(new NavegadorPanel("navegador")); } private void initFilhos() { HttpServletRequest req = ((WebRequest) RequestCycle.get().getRequest()).getHttpServletRequest(); ThemeDisplay td = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY); final long groupId = td.getScopeGroupId(); RefreshingView<ElementoDisplay> filhos = new RefreshingView<ElementoDisplay>("filhos") { @Override protected Iterator<IModel<ElementoDisplay>> getItemModels() { Collection<ElementoDisplay> elementos; try { elementos = WikiLegisServiceUtil.listaElementos(groupId); } catch (SystemException e) { return Iterators.emptyIterator(); } catch (PortalException e) { return Iterators.emptyIterator(); } List<IModel<ElementoDisplay>> retorno = new ArrayList<IModel<ElementoDisplay>>(); for (ElementoDisplay elemento : elementos) { final long entradaId = elemento.getId(); final boolean artigo = elemento instanceof ArtigoDisplay; retorno.add(new LoadableDetachableModel<ElementoDisplay>(elemento) { @Override protected ElementoDisplay load() { try { if (artigo) return WikiLegisServiceUtil.getArtigoDisplay(entradaId); else return new EstruturaDisplay(EstruturaLocalServiceUtil.getEstrutura(entradaId)); } catch (PortalException e) { return null; } catch (SystemException e) { return null; } } }); } return retorno.iterator(); } @SuppressWarnings("unchecked") @Override protected void populateItem(Item<ElementoDisplay> item) { IModel<? extends ElementoDisplay> model = item.getModel(); if (model.getObject() instanceof ArtigoDisplay) { item.add(new WikiLegisArtigoPanel("filho", (IModel<ArtigoDisplay>) model)); } else item.add(new WikiLegisEstruturaPanel("filho", (IModel<EstruturaDisplay>) model)); } }; add(filhos); } /** * Retorna a url da comunidade, se não encontrar retorna null. * * @return */ private String getURLComunidade(){ String url = PortalUtil.getPortalURL(UIUtils.getHttpServletRequest()); try { url = url + PortalUtil.getLayoutURL(UIUtils.getThemeDisplay()); } catch (PortalException e) { try { url = url + PortalUtil.getPathFriendlyURLPublic() + UIUtils.getThemeDisplay().getLayout().getGroup().getFriendlyURL() + UIUtils.getThemeDisplay().getLayout().getFriendlyURL(); } catch (PortalException e1) { LOG.error("Erro ao obter url da comunidade.", e1); return null; } catch (SystemException e1) { throw new RuntimeException(e); } } catch (SystemException e) { throw new RuntimeException(e); } return url; } }