====== Árvore de Unidades ======
Componente JSF para exibição de árvore de unidades composto por um campo para digitação do código da unidade, um campo do tipo autocomplete e uma árvore contendo a hierarquia das unidades, conforme mostrado na figura abaixo. Qualquer um dos três campos pode ser utilizado para seleção da unidade.
{{:desenvolvimento:especificacoes:arquitetura:servicos:arvore.png|}}
===== Implementação =====
Foi criado um componente JSF composto por três classes, o component, o renderer e a tag. O renderer é onde existe o código HTML renderizado pelo componente. Além disso, foi criada a classe ArvoreUnidades, que contém toda a lógica de criação das hierarquias de unidades; o arquivo arvore-unidades.js, com o javascript necessário para o funcionamento da árvore; a classe BuscaUnidadesServlet no SIGAdmin, para realização de buscas via Ajax; e o arquivo ufrn-jsfcomps.tld, no SIPAC, que contém o tag library descriptor da taglib do componente.
As classes podem ser vistas na tabela a seguir:
^ Classe ^ Projeto ^
| ArvoreUnidades | EntidadesComuns |
| ArvoreUnidadesComponent | EntidadesComuns |
| ArvoreUnidadesRenderer | EntidadesComuns |
| ArvoreUnidadesTag | EntidadesComuns |
| BuscaUnidadesServlet | SIGAdmin |
Os demais arquivos podem ser vistos na tabela a seguir:
^ Arquivo ^ Projeto ^
| arvore-unidades.js | SharedResources |
| ufrn-jsfcomps.tld | SIPAC |
===== Tag =====
==== Atributos ====
//**Tipo:**// Identifica o tipo de árvore de unidades a ser renderizada. Pode ser **organizacional**, **orcamentaria** ou **academica**. Dependendo do seu valor, a árvore será renderizada de acordo com a hierarquia orçamentária, organizacional ou acadêmica. Caso esse atributo não seja informado, o valor padrão é o //organizacional//.
//**Modo:**// Informa se a árvore será renderizada localmente ou via ajax. Se for renderizada localmente (valores **local** ou **client**), a árvore é carregada completamente na página e não será necessário realizar mais nenhuma consulta ao servidor para utilizá-la. Se for renderizada via ajax (valores **ajax** ou **server**, a árvore terá apenas o seu primeiro nível carregado e, a cada vez que um nó for expandido, será feita uma consulta no servidor para buscar os nós do próximo nível carregado. Se nenhum valor for atribuído a esse campo, o valor padrão é //client//.
//**Size:**// Tamanho do campo de texto responsável pelo autocomplete das unidades. Semelhante ao atributo size dos campos input do HTML.
//**Value:**// Atributo do //managed bean// que representa a unidade que será escolhida pela árvore de unidades. Esse valor é obrigatório. **ATENÇÃO:** O atributo value deve apontar para o atributo unidade e não para o seu id, pois a árvore setará todos os atributos da unidade e não apenas o id.
==== Exemplos de Uso ====
Básico (hierarquia organizacional e carregamento local):
Hierarquia orçamentária:
Hierarquia acadêmica e carregamento via ajax: