throws ECARException {
List retorno = new ArrayList();
List lFuncoes;
int nivel;
FuncaoFun funcao = new FuncaoFun();
funcao.setIndAtivoFun("S");
funcao.setIndOpcionalFun("S");
lFuncoes = new FuncaoDao(request).pesquisar(funcao, new String[] { "nomeFun",
AtributoDao.ORDEM_ASC });
Iterator it = lFuncoes.iterator();
while (it.hasNext()) {
funcao = (FuncaoFun) it.next();
if (funcao.getIndExclusivoEstruturaFun() != null
&& !"S".equals(funcao.getIndExclusivoEstruturaFun())) {
retorno.add(funcao);
} else {
//Se a Fun��o n�o foi utilzado em nenhuma estrutura, � uma
// func��o permitida
if (funcao.getEstruturaFuncaoEttfs() != null) {
if (funcao.getEstruturaFuncaoEttfs().isEmpty())
retorno.add(funcao);
// Sen�o precisa verificar em qual n�vel esta Fun��o foi
// usado
else {
EstruturaFuncaoEttf estruturaFuncao = (EstruturaFuncaoEttf) (funcao
.getEstruturaFuncaoEttfs().iterator().next());
/*
* Se o n�vel da estrutura na qual foi usada a fun��o
* for igual ao n�vel do Pai + 1 (n�vel da nova
* estrutura) ent�o � um atributo permitido