/** * 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.components; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import br.gov.camara.edemocracia.portlets.wikilegis.model.Estrutura; import br.gov.camara.edemocracia.portlets.wikilegis.service.WikiLegisServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.ui.model.ElementoEstrutura; 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; /** * componente DropDownChoice com todos os agrupamentos cadastrados */ public class EstruturaDropDown extends DropDownChoice<ElementoEstrutura> { private static final long serialVersionUID = 1L; private static final Log LOG = LogFactoryUtil.getLog(EstruturaDropDown.class); public EstruturaDropDown(String id,long scopeGroupId) { super(id, new Model<ElementoEstrutura>(), new ElementoEstruturaListModel(scopeGroupId)); } @Override protected void onInitialize() { super.onInitialize(); init(); } private void init() { this.setOutputMarkupId(true); this.setChoiceRenderer(new IChoiceRenderer<ElementoEstrutura>() { private static final long serialVersionUID = 1L; @Override public Object getDisplayValue(ElementoEstrutura object) { return object.getTexto(); } @Override public String getIdValue(ElementoEstrutura object, int index) { return Long.toString(object.getEstruturaId()); } }); } /** * Lista de elementos, organizados de forma hierárquica (espaços indicam o * nível) * * @author robson * */ private static class ElementoEstruturaListModel extends LoadableDetachableModel<List<ElementoEstrutura>> { private static final long serialVersionUID = 1L; private final long groupId; private ElementoEstruturaListModel(long groupId) { this.groupId = groupId; } @Override protected List<ElementoEstrutura> load() { ArrayList<ElementoEstrutura> retorno = new ArrayList<ElementoEstrutura>(); try { List<Estrutura> raizes = WikiLegisServiceUtil.listaEstruturaFilhos(groupId, 0l); for (Estrutura estrutura : raizes) { adiciona(retorno, 0, estrutura); } return retorno; } catch (Exception e) { // XXX Log LOG.error("Erro ao obter lista de elementos.Param groupId=\""+groupId+"\",paiEstruturaId = \"0l\" ",e); return Collections.emptyList(); } } private void adiciona(ArrayList<ElementoEstrutura> retorno, int nivel, Estrutura estrutura) throws PortalException, SystemException { StringBuilder sb = new StringBuilder(nivel + estrutura.getTexto().length()); for (int i = 0; i < nivel; i++) sb.append("-"); sb.append(estrutura.getTexto()); retorno.add(new ElementoEstrutura(estrutura.getEstruturaId(), sb.toString())); List<Estrutura> filhos = WikiLegisServiceUtil.listaEstruturaFilhos(groupId, estrutura.getEstruturaId()); for (Estrutura filho : filhos) adiciona(retorno, nivel + 1, filho); } } }