PnlCfg editar arquivo

0:00 / 0:00

Tela de configuração do sistema onde o administrador ativa ou desativa módulos. Cada módulo precisa de um checkbox aqui para que o HomeDesk saiba se deve exibi-lo no menu principal. Sem as adições deste episódio, o módulo nunca apareceria no menu — mesmo que todo o código esteja correto.

CÓDIGO COMPLETO
package br.xt.app.painel;

import br.jasap.core.AppManager;
import br.jasap.core.Effect;
import br.jasap.effect.Response;
import br.jasap.gui.Bar;
import br.jasap.gui.Button;
import br.jasap.gui.JasapPage;
import br.jasap.gui.Table;
import br.jasap.gui.form.Check;
import br.jasap.gui.form.Form;
import br.jasap.gui.form.Text;
import br.jasap.util.DomainValue;
import br.jasap.util.JasapList;
import br.jasap.util.Js;
import br.jasap.util.filters.TransactionFilter;
import br.xt.AppsRootAction;
import br.xt.app.painel.cfg.PcfgModel;
import br.xt.acore.view.XtPage;

public class PnlCfg extends AppsRootAction {

    @Override
    public Effect execute() throws Exception {
        render();
        return new Response();
    }

    public static class Insert extends PnlCfg {
        public Insert() { super(); super.getFilters().add(new TransactionFilter()); }
        @Override
        public Effect execute() throws Exception {
            getFactory().painel().cfgModel().insert(DIR_REPOSITORIO_ROOT, getInput().getString(DIR_REPOSITORIO_ROOT));
            getFactory().painel().cfgModel().insert(MD_GED, getInput().getString(MD_GED));
            getFactory().painel().cfgModel().insert(MD_DEPARTAMENTO, getInput().getString(MD_DEPARTAMENTO));
            getFactory().painel().cfgModel().insert(MD_LABORATORIO, getInput().getString(MD_LABORATORIO));

            eval(Js.alert("Informações salvas com sucesso!"));
            return new Response();
        }
    }

    public void render() throws Exception {
        XtPage page = new XtPage(getManager());
        if (isAjaxCall()){
            update(JasapPage.DIV_WINDOW, page.content(window().toHtml()));
            eval(Js.CLOSE_SUB_WINDOWS);
        } else {
            page.getTable().setBorder(4).rowC("100%").setContent(page.content(window().toHtml())).setStyle(ui().stretchBorder());;
            page.setWinTitle("XT Cloud");
            getOutput().write(this, page);
        }
    }

    public Table window() throws Exception {
        Table w = new Table(getManager()).setStyle("background:#f7eee6").setSize("100%", "100%");

        w.rowC("1%", null, ui().line());
        w.rowC("99%").setId(JasapPage.DIV_WSPACE).setContent(form()).setScroll(Table.SCROLL_VERTICAL).table();
        w.rowC("1%", null, ui().line());
        w.rowC("1%", JasapPage.DIV_BOTTOM, br());

        return w;
    }

    private Bar br = null;
    private Bar br() throws Exception{
        if (br==null){

            Button salvar = ui().button("Salvar")
            .setOnClick(submit(Insert.class).validate());

            br = ui().bar()
            .addRight(salvar);
        }
        return br;
    }

    private Form form = null;
    public String form() throws Exception{

        form = ui().form();
        form.line().add(ui().header("CONFIGURAÇÕES GERAIS DO SISTEMA", "30"));
        form.line().add(repRoot(), "200");
        form.line().add(ui().header("MÓDULOS DO SISTEMA", "30"));
        if (isAdminXT()){
            form.line().add(mdGED(), "200");
            form.line().add(mdDepartamento(), "200");
            form.line().add(mdLaboratorio(), "200");
        }

        return form.getTable().toHtml();
    }

    protected Text repRoot = null;
    public Text repRoot() throws Exception {
        if (repRoot==null){
            repRoot = ui().text(DIR_REPOSITORIO_ROOT)
            .setLabel("Repositório")
            .setStyle("width:550")
            .setMaxlength(200)
            .setRequired(true)
            .setValue(getFactory().painel().cfgModel().getSetting(DIR_REPOSITORIO_ROOT))
            .setComplement(new Table(getManager()).rowC().setVerticalAlign(Table.ALIGN_MIDDLE).setContent("ROOT PATH").table());
        }
        return repRoot;
    }

    protected Check mdGED = null;
    public Check mdGED() throws Exception {
        JasapList list = new JasapList();
        list.getList().add(new DomainValue(1, "ativar Módulo Gerenciador Eletrônico de Documentos (GED)"));

        if (mdGED==null){
            mdGED = new Check(getManager(), MD_GED)
            .setLabel("")
            .setValue(list);
            mdGED.getValue().setSelected(getFactory().painel().cfgModel().getSetting(MD_GED));
        }
        return mdGED;
    }

    public static boolean hasGED(AppManager manager) throws Exception{
        PcfgModel cfgModel = new PcfgModel(manager);
        return (cfgModel.getSetting(MD_GED)!=null);
    }

    protected Check mdDepartamento = null;
    public Check mdDepartamento() throws Exception {
        JasapList list = new JasapList();
        list.getList().add(new DomainValue(1, "ativar Módulo Departamento"));

        if (mdDepartamento==null){
            mdDepartamento = new Check(getManager(), MD_DEPARTAMENTO)
            .setLabel("")
            .setValue(list);
            mdDepartamento.getValue().setSelected(getFactory().painel().cfgModel().getSetting(MD_DEPARTAMENTO));
        }
        return mdDepartamento;
    }

    public static boolean hasDepartamento(AppManager manager) throws Exception{
        PcfgModel cfgModel = new PcfgModel(manager);
        return (cfgModel.getSetting(MD_DEPARTAMENTO)!=null);
    }

    protected Check mdLaboratorio = null;
    public Check mdLaboratorio() throws Exception {
        JasapList list = new JasapList();
        list.getList().add(new DomainValue(1, "ativar Módulo Laboratório"));

        if (mdLaboratorio==null){
            mdLaboratorio = new Check(getManager(), MD_LABORATORIO)
            .setLabel("")
            .setValue(list);
            mdLaboratorio.getValue().setSelected(getFactory().painel().cfgModel().getSetting(MD_LABORATORIO));
        }
        return mdLaboratorio;
    }

    public static boolean hasLaboratorio(AppManager manager) throws Exception{
        PcfgModel cfgModel = new PcfgModel(manager);
        return (cfgModel.getSetting(MD_LABORATORIO)!=null);
    }

    public static String ROOT = "__ROOT_CFG_SYSTEM/";

    public static String DIR_REPOSITORIO_ROOT = ROOT.concat("__DIR_REPOSITORIO_ROOT");
    public static String MD_GED = ROOT.concat("__MD_GED");
    public static String MD_DEPARTAMENTO = ROOT.concat("__MD_DEPARTAMENTO");
    public static String MD_LABORATORIO = ROOT.concat("__MD_LABORATORIO");

    public PcfgModel cfgModel;
    public PcfgModel cfgModel(){ if (cfgModel==null)cfgModel = new PcfgModel(getManager()); return cfgModel; }
}
Checkbox do módulo — MD_DEPARTAMENTO + mdDepartamento()
0:00 / 0:00

public static String MD_DEPARTAMENTO

ElementoO que significa
publicAcessível de outros pacotes — HomeDesk acessa indiretamente via hasDepartamento()
staticPertence à classe, não a instâncias — acesso direto via PnlCfg.MD_DEPARTAMENTO sem criar objeto
StringChave de texto usada para identificar a configuração no banco de dados
MD_DEPARTAMENTOPrefixo MD_ = módulo — padrão do projeto para constantes de configuração de módulos
ROOT.concat("__MD_DEPARTAMENTO")ROOT é "__ROOT_CFG_SYSTEM/". A concatenação gera a chave final "__ROOT_CFG_SYSTEM/__MD_DEPARTAMENTO" — identificador único na tabela de configurações

Chave presente no banco = módulo ativo. Chave ausente = módulo inativo ou nunca configurado.

protected Check mdDepartamento = null

ElementoO que significa
protectedPadrão do projeto para campos de componentes de formulário — não private (subclasses podem acessar) e não public (não precisa ser exposto fora do pacote)
CheckComponente de checkbox do Jasap — representa um campo de marcação sim/não em formulários
mdDepartamentoMesmo nome do método getter — padrão do projeto
= nullLazy initialization — o componente só é criado quando mdDepartamento() é chamado pela primeira vez

public Check mdDepartamento() throws Exception

Método getter com lazy initialization que cria e configura o checkbox do módulo:

LinhaO que faz
new JasapList()Cria a lista de opções para o checkbox — contêiner do Jasap para listas de DomainValue
new DomainValue(1, "ativar Módulo Departamento")Adiciona uma opção: valor 1 quando marcado, texto descritivo exibido ao lado do checkbox na tela
if (mdDepartamento==null)Só cria o componente se ainda não existe — evita recriar a cada chamada dentro da mesma requisição
new Check(getManager(), MD_DEPARTAMENTO)getManager() = contexto da requisição · MD_DEPARTAMENTO = nome do campo HTML (o valor virá como getInput().getString(MD_DEPARTAMENTO))
.setLabel("")Rótulo vazio — o texto descritivo já está dentro do DomainValue
.setValue(list)Associa as opções disponíveis ao checkbox
mdDepartamento.getValue().setSelected(...)Busca no banco o estado atual via getFactory().painel().cfgModel().getSetting(MD_DEPARTAMENTO). Não-nulo = checkbox marcado. Null = desmarcado
Integração — hasDepartamento(), Insert e form()

public static boolean hasDepartamento(AppManager manager)

public static boolean hasDepartamento(AppManager manager) throws Exception{
    PcfgModel cfgModel = new PcfgModel(manager);
    return (cfgModel.getSetting(MD_DEPARTAMENTO)!=null);
}

Método estático que permite ao HomeDesk verificar se o módulo está ativo sem precisar instanciar PnlCfg.

ElementoO que significa
publicAcessível de qualquer lugar — especialmente do HomeDesk
staticChamado sem instância: PnlCfg.hasDepartamento(getManager()). Sem static, o HomeDesk precisaria criar um objeto PnlCfg inteiro só para essa verificação
booleantrue = módulo ativo · false = módulo inativo
AppManager managerNecessário porque o método é estático (sem acesso ao this) — precisa do contexto da requisição para consultar o banco
new PcfgModel(manager)Instancia diretamente o model de configurações — em métodos estáticos não existe getFactory()
getSetting(MD_DEPARTAMENTO) != nullA simples presença da chave no banco indica que o módulo foi ativado pelo administrador

Linha adicionada no Insert.execute()

getFactory().painel().cfgModel().insert(MD_DEPARTAMENTO, getInput().getString(MD_DEPARTAMENTO));

Chamada quando o administrador clica em "Salvar" na tela de configuração. Cada módulo tem exatamente uma linha aqui:

ChamadaO que faz
getFactory()Retorna AppsRootModelFactory
.painel()Retorna PainelMdFactory
.cfgModel()Retorna o model de configurações do painel (PcfgModel)
.insert(MD_DEPARTAMENTO, ...)Grava a configuração no banco: chave = MD_DEPARTAMENTO, valor = getInput().getString(MD_DEPARTAMENTO) ("1" se marcado, null se desmarcado)

Sem esta linha: o checkbox aparece na tela, o admin pode marcar, mas ao salvar o estado é ignorado — nunca é gravado no banco.

Linha adicionada no form()

// dentro de if (isAdminXT()) { ... }
form.line().add(mdDepartamento(), "200");
ElementoO que significa
form.line()Adiciona uma nova linha ao formulário — organiza os campos verticalmente
.add(mdDepartamento(), "200")mdDepartamento() = o componente Check · "200" = largura do rótulo em pixels
if (isAdminXT())Módulos do projeto de estudo ficam dentro deste bloco — apenas administradores XT os visualizam

Sem esta linha: o checkbox nunca aparece na tela de configuração, tornando impossível ativar o módulo pela interface.