Responsável por registrar todas as actions do módulo no framework e definir a chave de permissão de acesso. É o segundo arquivo a ser criado — depende do Home (precisa registrá-lo).
package br.xt.app.departamento;
import br.xt.app.painel.PnlManager;
public class DepartamentoManager extends PnlManager {
public static final String F_ACESSO_MODULO = "XT.PAINEL_CONTROLE.ACESSO_MODULO.DEPARTAMENTO";
@Override
public void config() throws Exception {
regFun("PAINEL DE CONTROLE", "Acesso ao Módulo", "DEPARTAMENTO", F_ACESSO_MODULO);
regAction(DepartamentoHome.class);
regAction(DepartamentoHome.Title.class);
regAction(DepartamentoHome.MenuItem.class);
regAction(DepartamentoHome.MenuInicial.class);
}
}
O projeto tem duas linhas de herança com papéis completamente diferentes:
| Linha dos Gerentes (Manager) | Linha dos Funcionários (Action) | |
|---|---|---|
| Herança | AppManager → PnlManager → DepartamentoManager | JasapAct → AppsRootAction → DepartamentoHome |
| Papel | Configurar — registrar actions e permissões | Atender — montar telas, processar dados, responder ao browser |
| Quando roda | Uma vez, na abertura do sistema (config()) | A cada requisição do browser (execute()) |
| Métodos que fornece | regAction(), regFun() | ui(), link(), eval(), update(), getInput() |
| Responde ao browser? | Não | Sim |
Na analogia do prédio:
DepartamentoManager extends PnlManager = o gerente do departamento herda do cargo de gerente. Ele configura o departamento: apresenta os funcionários pro sistema e distribui os crachás. Faz isso uma vez e pronto.DepartamentoHome extends AppsRootAction = a recepcionista herda do cargo de funcionário. Ela atende as requisições do dia a dia: monta a tela, navega entre guichês, responde ao browser.Resumo: Manager configura, Action atende.
public class DepartamentoManager extends PnlManager| Elemento | O que significa |
|---|---|
public | A classe é visível para todo o projeto — outros pacotes como RootManager precisam instanciá-la, então não pode ser privada ou de pacote |
class | Declara que isso é uma classe Java — o bloco que agrupa os dados e comportamentos do manager |
DepartamentoManager | Nome da classe. Convenção do projeto: prefixo do módulo + Manager |
extends PnlManager | Herda de PnlManager, que fornece os métodos regAction() e regFun(). Sem essa herança não haveria como registrar actions nem permissões |
public static final String F_ACESSO_MODULO = "XT.PAINEL_CONTROLE.ACESSO_MODULO.DEPARTAMENTO"| Elemento | O que significa |
|---|---|
public | Visível fora da classe — necessário porque HomeDesk e outros arquivos leem essa constante diretamente via DepartamentoManager.F_ACESSO_MODULO |
static | Pertence à classe, não a uma instância. Permite usar DepartamentoManager.F_ACESSO_MODULO sem precisar criar um new DepartamentoManager() |
final | O valor não pode ser alterado depois de atribuído — é uma constante. O compilador garante: se alguém tentar fazer F_ACESSO_MODULO = "outra coisa", o código não compila. Importante porque essa string é usada em dois lugares (regFun e ok()) — se mudasse acidentalmente, a permissão pararia de funcionar |
String | Tipo do valor — é uma cadeia de texto, não um número ou objeto |
F_ACESSO_MODULO | Nome da constante. Convenção do projeto: prefixo F_ indica funcionalidade de permissão. Maiúsculas porque é uma constante. O nome é sempre o mesmo em todo manager (F_ACESSO_MODULO) — o que muda entre módulos é o valor da string. Quando o código faz DepartamentoManager.F_ACESSO_MODULO, já sabe qual módulo é pela classe. Assim, ao criar um módulo real (ex: Estoque), o aluno só muda o valor, não o nome da constante |
"XT.PAINEL_CONTROLE.ACESSO_MODULO.DEPARTAMENTO" | Chave única de permissão no sistema. Cada ponto separa um nível na hierarquia (ver detalhes abaixo) |
A string de permissão funciona como um endereço — cada ponto separa um nível, filtrando até chegar no destino:
| Nível | Valor | O que representa |
|---|---|---|
| 1 | XT | Sistema — nome do sistema (todos os módulos começam com XT) |
| 2 | PAINEL_CONTROLE | Área — seção do painel de controle onde a permissão aparece |
| 3 | ACESSO_MODULO | Tipo de permissão — neste caso, acesso ao módulo. No CRUD surgirão outros tipos como EXCLUIR, INSERIR |
| 4 | DEPARTAMENTO | Módulo específico — este módulo. Cada módulo muda só este nível |
Outros módulos seguem o mesmo padrão, mudando apenas o último nível:
XT.PAINEL_CONTROLE.ACESSO_MODULO.LABORATORIOXT.PAINEL_CONTROLE.ACESSO_MODULO.DEPARTAMENTOXT.PAINEL_CONTROLE.ACESSO_MODULO.GEDA mesma string é usada em dois lugares com dois propósitos diferentes:
| Onde | Método | O que faz |
|---|---|---|
DepartamentoManager | regFun(..., F_ACESSO_MODULO) | Cria a permissão no sistema — registra o crachá |
HomeDesk | ok(F_ACESSO_MODULO) | Verifica se o usuário tem a permissão — confere o crachá |
Se a string não bater exatamente nos dois lugares, a permissão não é encontrada e o módulo não aparece pro usuário. Deve ser única no sistema inteiro — dois módulos com a mesma chave compartilhariam a permissão.
@OverrideInforma ao compilador que este método existe na classe pai (PnlManager) e está sendo substituído aqui. Se o nome do método estiver errado, o compilador avisa. Não é obrigatório, mas é boa prática.
public void config() throws Exception| Elemento | O que significa |
|---|---|
public | O RootManager chama new DepartamentoManager().config() de fora da classe — precisa ser público |
void | O método não retorna nenhum valor — só executa os registros |
config() | Nome definido pela interface do Jasap. O framework chama esse método para inicializar o manager |
throws Exception | Declara que o método pode lançar exceções. O Jasap exige isso porque os métodos internos de registro podem falhar |
regFun("PAINEL DE CONTROLE", "Acesso ao Módulo", "DEPARTAMENTO", F_ACESSO_MODULO)Registra uma permissão no sistema de controle de acesso. Cria a entrada que aparece no Painel de Controle onde o admin libera ou bloqueia acesso por usuário.
Por que são 4 parâmetros separados e não uma string só? Porque cada um tem um propósito diferente — os 3 primeiros montam a estrutura visual da tela de permissões pro admin, o 4º é a chave real do sistema:
| Parâmetro | Valor | Pra que serve |
|---|---|---|
| 1º — Grupo | "PAINEL DE CONTROLE" | A pasta principal onde aparece na tela do admin |
| 2º — Sub-grupo | "Acesso ao Módulo" | A seção dentro da pasta |
| 3º — Nome | "DEPARTAMENTO" | O texto que o admin vê e marca/desmarca |
| 4º — Chave técnica | F_ACESSO_MODULO | A string que o sistema usa internamente pra verificar (ok()) |
Se fosse uma string só, o sistema não saberia onde cortar pra montar a hierarquia visual. Os 3 primeiros são só exibição — se errar, o admin vê nome errado mas funciona. O 4º não pode errar — se a string não bater com o ok() do HomeDesk, o módulo não aparece.
regAction(DepartamentoHome.class)Registra cada action no Jasap. Sem esse registro, o framework não conhece a action e não roteia nenhuma requisição para ela — é como se a classe não existisse para o sistema.
| Parte | O que significa |
|---|---|
regAction | Método herdado de PnlManager que adiciona a action ao mapa interno do Jasap |
DepartamentoHome.class | Referência à classe Java em tempo de compilação. O .class retorna o objeto Class<?> que representa a classe — o Jasap usa isso para instanciar a action quando uma requisição chegar |
Cada inner class de DepartamentoHome também precisa ser registrada separadamente — Title, MenuItem e MenuInicial são actions independentes com suas próprias URLs no framework.