/** * 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.movetopico.model; import java.util.List; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import br.gov.camara.edemocracia.movetopico.service.MoveTopicoLocalServiceUtil; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.liferay.portlet.messageboards.model.MBCategory; public class BuliderModeloArvoreForuns { private final class FiltroForumPossuiSubForuns implements Predicate<MBCategory> { private MBCategory parent; public FiltroForumPossuiSubForuns(MBCategory parent) { this.parent = parent; } @Override public boolean apply(MBCategory input) { return input.getParentCategoryId() == parent.getCategoryId(); } } private final class FiltroForumRaiz implements Predicate<MBCategory> { @Override public boolean apply(MBCategory input) { return input.isRoot(); } } /** * */ private static final long serialVersionUID = -8743212025751706394L; private long idComunidade; public BuliderModeloArvoreForuns(long idComunidade) { this.idComunidade = idComunidade; } public TreeModel construir() { List<MBCategory> result = MoveTopicoLocalServiceUtil.getForunsComunidade(idComunidade); Iterable<MBCategory> roots = Iterables.filter(result, new FiltroForumRaiz()); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Fórums"); for(MBCategory category : roots) { Iterable<MBCategory> children = Iterables.filter(result, new FiltroForumPossuiSubForuns(category)); DefaultMutableTreeNode node = addChildren(category, children,result); rootNode.add(node); } return new DefaultTreeModel(rootNode); } private DefaultMutableTreeNode addChildren(MBCategory parent, Iterable<MBCategory> children, List<MBCategory> universe) { DefaultMutableTreeNode parentNode = new DefaultMutableTreeNode(new Forum(parent.getCategoryId(), parent.getName())); if(!Iterables.isEmpty(children)) { for(MBCategory category : children) { Iterable<MBCategory> kids = Iterables.filter(universe, new FiltroForumPossuiSubForuns(category)); DefaultMutableTreeNode node = addChildren(category, kids, universe); parentNode.add(node); } } return parentNode; } }