/** * 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.priorizacao.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.priorizacao.service.PriorizacaoServiceUtil; 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.portlet.messageboards.model.MBCategory; public class CategoriaDropDown extends DropDownChoice<MBCategory> { private static final long serialVersionUID = 1L; private static final Log LOG = LogFactoryUtil.getLog(CategoriaDropDown.class); public CategoriaDropDown(String id, long groupId) { super(id, new Model<MBCategory>(), new MBCategoryListModel(groupId)); } @Override protected void onInitialize() { super.onInitialize(); init(); } private void init(){ this.setOutputMarkupId(true); this.setChoiceRenderer(new IChoiceRenderer<MBCategory>() { private static final long serialVersionUID = 1L; @Override public Object getDisplayValue(MBCategory object) { return object.getName(); } @Override public String getIdValue(MBCategory object, int index) { return Long.toString(object.getCategoryId()); } }); } private static class MBCategoryListModel extends LoadableDetachableModel<List<MBCategory>> { private static final long serialVersionUID = 1L; private final long groupId; private MBCategoryListModel(long groupId) { this.groupId = groupId; } @Override protected List<MBCategory> load() { ArrayList<MBCategory> retorno = new ArrayList<MBCategory>(); try { List<MBCategory> categoriasRaiz = PriorizacaoServiceUtil.listarCategorias(groupId,0l); for(MBCategory categoria : categoriasRaiz ){ adiciona(retorno, 0, categoria); } return retorno; } catch (Exception e) { LOG.error("Erro ao obter lista de categorias.Param groupId=\""+groupId+"\"",e); return Collections.emptyList(); } } private void adiciona(ArrayList<MBCategory> retorno, int nivel, MBCategory categoria) throws PortalException, SystemException { StringBuilder sb = new StringBuilder(nivel + categoria.getName().length()); for (int i = 0; i < nivel; i++) sb.append("-"); sb.append(categoria.getName()); categoria.setName(sb.toString()); retorno.add(categoria); List<MBCategory> filhos = PriorizacaoServiceUtil.listarCategorias( groupId, categoria.getCategoryId()); for (MBCategory filho : filhos) adiciona(retorno, nivel + 1, filho); } } }