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.
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; }
}
public static String MD_DEPARTAMENTO| Elemento | O que significa |
|---|---|
public | Acessível de outros pacotes — HomeDesk acessa indiretamente via hasDepartamento() |
static | Pertence à classe, não a instâncias — acesso direto via PnlCfg.MD_DEPARTAMENTO sem criar objeto |
String | Chave de texto usada para identificar a configuração no banco de dados |
MD_DEPARTAMENTO | Prefixo 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| Elemento | O que significa |
|---|---|
protected | Padrã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) |
Check | Componente de checkbox do Jasap — representa um campo de marcação sim/não em formulários |
mdDepartamento | Mesmo nome do método getter — padrão do projeto |
= null | Lazy initialization — o componente só é criado quando mdDepartamento() é chamado pela primeira vez |
public Check mdDepartamento() throws ExceptionMétodo getter com lazy initialization que cria e configura o checkbox do módulo:
| Linha | O 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 |
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.
| Elemento | O que significa |
|---|---|
public | Acessível de qualquer lugar — especialmente do HomeDesk |
static | Chamado sem instância: PnlCfg.hasDepartamento(getManager()). Sem static, o HomeDesk precisaria criar um objeto PnlCfg inteiro só para essa verificação |
boolean | true = módulo ativo · false = módulo inativo |
AppManager manager | Necessá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) != null | A 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:
| Chamada | O 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");
| Elemento | O 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.