DepartamentoManager novo arquivo

0:00 / 0:00

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).

CÓDIGO COMPLETO
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);

    }
}
Por que extends PnlManager e não AppsRootAction?

O projeto tem duas linhas de herança com papéis completamente diferentes:

Linha dos Gerentes (Manager)Linha dos Funcionários (Action)
HerançaAppManager → PnlManager → DepartamentoManagerJasapAct → AppsRootAction → DepartamentoHome
PapelConfigurar — registrar actions e permissõesAtender — montar telas, processar dados, responder ao browser
Quando rodaUma vez, na abertura do sistema (config())A cada requisição do browser (execute())
Métodos que forneceregAction(), regFun()ui(), link(), eval(), update(), getInput()
Responde ao browser?NãoSim

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

ElementoO que significa
publicA classe é visível para todo o projeto — outros pacotes como RootManager precisam instanciá-la, então não pode ser privada ou de pacote
classDeclara que isso é uma classe Java — o bloco que agrupa os dados e comportamentos do manager
DepartamentoManagerNome da classe. Convenção do projeto: prefixo do módulo + Manager
extends PnlManagerHerda 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"

ElementoO que significa
publicVisível fora da classe — necessário porque HomeDesk e outros arquivos leem essa constante diretamente via DepartamentoManager.F_ACESSO_MODULO
staticPertence à classe, não a uma instância. Permite usar DepartamentoManager.F_ACESSO_MODULO sem precisar criar um new DepartamentoManager()
finalO 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
StringTipo do valor — é uma cadeia de texto, não um número ou objeto
F_ACESSO_MODULONome 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ívelValorO que representa
1XTSistema — nome do sistema (todos os módulos começam com XT)
2PAINEL_CONTROLEÁrea — seção do painel de controle onde a permissão aparece
3ACESSO_MODULOTipo de permissão — neste caso, acesso ao módulo. No CRUD surgirão outros tipos como EXCLUIR, INSERIR
4DEPARTAMENTOMó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:

A mesma string é usada em dois lugares com dois propósitos diferentes:

OndeMétodoO que faz
DepartamentoManagerregFun(..., F_ACESSO_MODULO)Cria a permissão no sistema — registra o crachá
HomeDeskok(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.

@Override

Informa 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

ElementoO que significa
publicO RootManager chama new DepartamentoManager().config() de fora da classe — precisa ser público
voidO 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 ExceptionDeclara 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âmetroValorPra 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écnicaF_ACESSO_MODULOA 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.

ParteO que significa
regActionMétodo herdado de PnlManager que adiciona a action ao mapa interno do Jasap
DepartamentoHome.classReferê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.