/** * 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.panels; import org.apache.wicket.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.Panel; 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 br.gov.camara.edemocracia.portlets.wikilegis.ArtigoDisplay; import br.gov.camara.edemocracia.portlets.wikilegis.service.WikiLegisServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.ui.components.Anchor; import br.gov.camara.edemocracia.portlets.wikilegis.ui.pages.ContribuicaoPage; import br.gov.camara.edemocracia.portlets.wikilegis.ui.pages.EdicaoArtigoPage; import br.gov.camara.edemocracia.portlets.wikilegis.ui.util.UIUtils; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.security.permission.ActionKeys; /** * @author robson * */ public class WikiLegisArtigoPanel extends Panel { private static final long serialVersionUID = 1L; /** * Obtém o artigo associado a este painel * * @return */ private ArtigoDisplay getModelObject() { return (ArtigoDisplay) getDefaultModelObject(); } /** * Modelo do artigo associado * * @return */ @SuppressWarnings("unchecked") private IModel<ArtigoDisplay> getModel() { return (IModel<ArtigoDisplay>) getDefaultModel(); } // ///////////// // Campos de formulário // ///////////// private AjaxLink<Void> mostrarComentarios; private WebMarkupContainer containerIconeComentarios; private WebMarkupContainer containerIconeSugestoes; private AjaxLink<Void> mostrarLegislacao; private AjaxLink<Void> ocultarLegislacao; private Link<Void> editar; private Link<ContribuicaoPage> mostrarContribuicoes; private Label textoFormatado; private Label legislacaoVigenteFormatada; private ComentariosPanel comentarios; private WebMarkupContainer legislacaoVigenteRegiao; private WebMarkupContainer comentariosRegiao; private WebMarkupContainer containerNumeroComentarios; private WebMarkupContainer containerNumeroContribuicoes; private Label numeroComentarios; private Label numeroSugestoes; /** * @param id * @param model */ public WikiLegisArtigoPanel(String id, IModel<ArtigoDisplay> model) { super(id); if (!(model instanceof CompoundPropertyModel<?>)) setDefaultModel(new CompoundPropertyModel<ArtigoDisplay>(model)); else setDefaultModel(model); initNodeName(); initContainerNumeroComentarios(); initNumeroComentarios(); initContainerIconeComentarios(); initMostrarComentarios(); initContainerNumeroContribuicoes(); initNumeroContribuicoes(); initEditar(); initContainerIconeContribuicoes(); initMostrarContribuicoes(); initMostrarLegislacao(); initTextoFormatado(); initLegislacaoVigenteRegiao(); initLegislacaoVigenteFormatada(); initOcultarLegislacao(); initComentariosRegiao(); initComentarios(); } private void initContainerNumeroComentarios() { containerNumeroComentarios = new WebMarkupContainer("containerNumeroComentarios"){ private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(getModelObject().getNumeroComentarios() != 0); } }; containerNumeroComentarios.setOutputMarkupId(true); containerNumeroComentarios.setOutputMarkupPlaceholderTag(true); add(containerNumeroComentarios); } private void initNumeroComentarios() { numeroComentarios = new Label("numeroComentarios"); containerNumeroComentarios.add(numeroComentarios); } private void initContainerNumeroContribuicoes() { containerNumeroContribuicoes = new WebMarkupContainer("containerNumeroContribuicoes"){ private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); boolean sugestoesEnabled = Boolean.parseBoolean(UIUtils.getPortletPreferences().getValue("habilitaSugestoes", "true")); if(sugestoesEnabled){ setVisible(getModelObject().getNumeroSugestoes() != 0); } else { setVisible(false); } } }; containerNumeroContribuicoes.setOutputMarkupId(true); containerNumeroContribuicoes.setOutputMarkupPlaceholderTag(true); add(containerNumeroContribuicoes); } private void initNumeroContribuicoes() { numeroSugestoes = new Label("numeroSugestoes"); containerNumeroContribuicoes.add(numeroSugestoes); } /** * Cria o campo com o link */ private void initNodeName() { Anchor nodeName = new Anchor("nodeName", new ComponentPropertyModel<String>("nodeName")); add(nodeName); } private void initLegislacaoVigenteRegiao() { legislacaoVigenteRegiao = new WebMarkupContainer("legislacaoVigenteRegiao"); legislacaoVigenteRegiao.setVisible(false); legislacaoVigenteRegiao.setOutputMarkupId(true); legislacaoVigenteRegiao.setOutputMarkupPlaceholderTag(true); add(legislacaoVigenteRegiao); } private void initLegislacaoVigenteFormatada() { legislacaoVigenteFormatada = new Label("legislacaoVigenteFormatada"); legislacaoVigenteFormatada.setEscapeModelStrings(false); legislacaoVigenteRegiao.add(legislacaoVigenteFormatada); } private void initComentariosRegiao() { comentariosRegiao = new WebMarkupContainer("comentariosRegiao"); comentariosRegiao.setVisible(false); comentariosRegiao.setOutputMarkupId(true); comentariosRegiao.setOutputMarkupPlaceholderTag(true); add(comentariosRegiao); } private void initComentarios() { comentarios = new ComentariosPanel("comentarios", new ComponentPropertyModel<ArtigoDisplay>("")) { private static final long serialVersionUID = 1L; @Override protected void onComentariosChanged(AjaxRequestTarget target) { // Recarrega o modelo final long artigoId = WikiLegisArtigoPanel.this.getModelObject().getId(); WikiLegisArtigoPanel.this.setDefaultModel(new CompoundPropertyModel<ArtigoDisplay>(new LoadableDetachableModel<ArtigoDisplay>() { @Override protected ArtigoDisplay load() { try { return WikiLegisServiceUtil.getArtigoDisplay(artigoId); } catch (PortalException e) { return null; } catch (SystemException e) { // TODO LOG return null; } } })); if (target != null) { target.addComponent(containerIconeComentarios); target.addComponent(containerNumeroComentarios); } } }; comentariosRegiao.add(comentarios); } private void initTextoFormatado() { textoFormatado = new Label("textoFormatado"); textoFormatado.setEscapeModelStrings(false); add(textoFormatado); } private void initMostrarLegislacao() { mostrarLegislacao = new AjaxLink<Void>("mostrarLegislacao") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); ArtigoDisplay objeto = WikiLegisArtigoPanel.this.getModelObject(); setVisible(objeto != null && objeto.getLegislacaoVigente() != null && !objeto.getLegislacaoVigente().trim().isEmpty()); } @Override public void onClick(AjaxRequestTarget target) { legislacaoVigenteRegiao.setVisible(!legislacaoVigenteRegiao.isVisible()); if (target != null) target.addComponent(legislacaoVigenteRegiao); } }; add(mostrarLegislacao); } private void initContainerIconeContribuicoes() { containerIconeSugestoes = new WebMarkupContainer("containerIconeSugestoes") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(Boolean.parseBoolean(UIUtils.getPortletPreferences().getValue("habilitaSugestoes", "true"))); ArtigoDisplay objeto = WikiLegisArtigoPanel.this.getModelObject(); if (objeto.getNumeroSugestoes() != 0) add(new SimpleAttributeModifier("class", "iconesSugestaoWikilegis")); } }; containerIconeSugestoes.setOutputMarkupId(true); add(containerIconeSugestoes); } private void initMostrarContribuicoes() { PageParameters pp = new PageParameters(); ArtigoDisplay elemento = (ArtigoDisplay) getDefaultModelObject(); pp.add("artigo", Long.toString(elemento.getId())); mostrarContribuicoes = new BookmarkablePageLink<ContribuicaoPage>("mostrarContribuicoes", ContribuicaoPage.class, pp); containerIconeSugestoes.add(mostrarContribuicoes); } private void initEditar() { PageParameters pp = new PageParameters(); ArtigoDisplay elemento = (ArtigoDisplay) getDefaultModelObject(); pp.add("0", Long.toString(elemento.getId())); editar = new BookmarkablePageLink<Void>("editar", EdicaoArtigoPage.class, pp) { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(UIUtils.possuiPermissoes(ActionKeys.CONFIGURATION)); } }; add(editar); } private void initContainerIconeComentarios() { containerIconeComentarios = new WebMarkupContainer("containerIconeComentarios") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); ArtigoDisplay objeto = WikiLegisArtigoPanel.this.getModelObject(); if (objeto.getNumeroComentarios() != 0) add(new SimpleAttributeModifier("class", "iconesComentarioWikilegis")); else add(new SimpleAttributeModifier("class", "demaisIconesWikilegis")); } }; containerIconeComentarios.setOutputMarkupId(true); add(containerIconeComentarios); } private void initMostrarComentarios() { mostrarComentarios = new AjaxLink<Void>("mostrarComentarios") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { comentariosRegiao.setVisible(!comentariosRegiao.isVisible()); if (target != null) target.addComponent(comentariosRegiao); } }; mostrarComentarios.setOutputMarkupId(true); containerIconeComentarios.add(mostrarComentarios); } private void initOcultarLegislacao() { ocultarLegislacao = new AjaxLink<Void>("ocultarLegislacao") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); ArtigoDisplay objeto = WikiLegisArtigoPanel.this.getModelObject(); setVisible(objeto != null && objeto.getLegislacaoVigente() != null && !objeto.getLegislacaoVigente().trim().isEmpty()); } @Override public void onClick(AjaxRequestTarget target) { legislacaoVigenteRegiao.setVisible(false); if (target != null) target.addComponent(legislacaoVigenteRegiao); } }; legislacaoVigenteRegiao.add(ocultarLegislacao); } public void ocultaComentarios(AjaxRequestTarget target) { comentariosRegiao.setVisible(false); if (target != null) target.addComponent(comentariosRegiao); } }