Caro Jorge Luis,
Não sei ao certo se entendi você corretamente, mais a exibição de tree precisa obrigatoriamente definir em cada "Node" qual é o seu respectivo "parent Node". Nesse caso, você poderá de 3 coisas:
1) Utilizar o "DefaultTreeNode" passando o 2o parâmetro no construtor, ou simplesmente usando o método "setParent";
2) Ordenar tua lista de acordo com a ordem de campos acima, algo semelhante a isso:
(Obs:O código abaixo pode ter erro, pois copiei de um código que tenho e fiz algumas mudanças)
class MeuComparator implements Comparator {
private String[] atributos;
protected IndexSortComparator(String[] atributos) {
this.atributos = columns;
}
public int compare(Object obj1, Object obj2) {
int comp = 0;
Class<?> clazz = obj1.getClass();
for ( String att: this.atributos ) {
Field field = clazz.getDeclaredField(att);
comp = (String) field.get(obj1).compareTo((String)field.get(obj1));
if ( comp != 0 ) {
break;
}
}
return comp;
}
}
....
List<?> minhaLista = <instancia a lista>
String[] atributos = {"Empresa", "Grupo", "Departamento", "Secao", "Produto"}
Comparator meuComparator = new MeuComparator(atributos);
Collections.sort(minhaLista, meuComparator);
3) Como os atributos são conhecidos, talvez um simples "for" seja o suficiente (isto é, não seria necessário usar recursividade):
(mais ou menos conforme código abaixo)
List<?> minhaLista = <instancia a lista>;
String[] atributos = {"Empresa", "Grupo", "Departamento", "Secao", "Produto"}
Comparator meuComparator = new MeuComparator(atributos);
Collections.sort(minhaLista, meuComparator);
private int ultEmpresa;
private int ultGrupo;
private int ultDepartamento;
private int ultSecao;
private int ultProduto;
TreeNode child = null;
TreeNode parent = null;
Iterator itr = minhaLista.iterator();
while(itr.hasNext()) {
Object obj = itr.next();
if ( (ultEmpresa == null || ultEmpresa != obj.getEmpresa() ) ||
(ultGrupo == null || ultGrupo != obj.getGrupo() ) ||
(ultDepartamento == null || ultDepartamento != obj.getDepartamento() ) ||
(ultSecao == null || ultSecao != obj.getSecao() ) ||
(ultProduto == null || ultProduto != obj.getProduto() ) {
ultEmpresa = obj.getEmpresa();
ultGrupo = obj.getGrupo();
ultDepartamento = obj.getDepartamento();
ultSecao = obj.getSecao();
ultProduto = obj.getProduto();
parent = child;
}
child = new DefaultTreeNode(obj.getDescricaoCompleta(), parent);
}