* @param gruposUsuario
* @return List
* @throws ECARException
*/
public List getDescendentesComPermissoesOrdenado(ItemEstruturaIett itemEstrutura, UsuarioUsu usuarioUsu, Set gruposUsuario) throws ECARException{
ValidaPermissao validaPermissao = new ValidaPermissao();
List retorno = new ArrayList();
/*1.Obter um conjunto de estrutura do item passado como par�metro
(EstruturaDao.getSetEstruturasItem(item);)*/
EstruturaDao estruturaDao = new EstruturaDao(request);
List itens = estruturaDao.getSetEstruturasItem(itemEstrutura);
retorno.add(itemEstrutura);
/*2.Para cada estrutura 'e' obtida no passo anterior*/
Iterator itEstrutura = itens.iterator();
while(itEstrutura.hasNext()){
EstruturaEtt e = (EstruturaEtt) itEstrutura.next();
/*3.Obter as colunas dessa estrutura (EstruturaDao.getAtributosAcessoEstrutura('e');)*/
List atributos = estruturaDao.getAtributosAcessoEstrutura(e);
if(atributos != null && atributos.size() > 0){
ObjetoEstrutura objeto = (ObjetoEstrutura) atributos.get(0); //primeira coluna obtida
/*
4.Obter os itens filhos da estrutura 'e', ordenados pela primeira coluna obtida no passo anterior; ItemEstruturaDao.getItensFilhos(item, 'e', ObjetoEstrutura.iGetNomeOrdenarLista())
*/
List itensFilhos = getItensFilho(itemEstrutura, e, objeto.iGetNomeOrdenarLista());
/*5.Para cada item 'it' obtido no passo anterior*/
Iterator itFilhos = itensFilhos.iterator();
while(itFilhos.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) itFilhos.next();
/*6.Obter a permissao do usuario para este item (ValidaPermissao.permissoesItem('it', usuario, grupos);*/
validaPermissao.permissoesItem(itemFilho, usuarioUsu, gruposUsuario);
/*7.Se validaPermissao.permissaoConsultarItem()*/
if (validaPermissao.permissaoConsultarItem()){
/*8.Adiciona o item 'it' na lista de retorno*/
retorno.add(itemFilho);
/*9.Chama o m�todo recursivamente (getDescendentesComPermissoesOrdenado('it', usuario, grupos);)*/
retorno.addAll(getDescendentesComPermissoesOrdenado(itemFilho, usuarioUsu, gruposUsuario));
}