Observando o arquivo de configuração package-info.java em meuprojeto_comuns, percebi que o Jaguar carrega as depedencias baseada na propriedade classeLookup de @PlcConfigGrupoAgregacao:
@PlcConfigGrupoAgregacao(
entidade = br.com.meusistema.entidade.MinhaClasseEntity.class,
classesLookup = {br.com.meusistema.entidade.MinhaClasseAgregadaEntity.class},
padrao = @PlcConfigPadrao(logica = PlcConfigPadrao.Logica.CRUD,
complexidade = PlcConfigPadrao.Complexidade.SIMPLES,
exclusaoModo = PlcConfigPadrao.ExclusaoModo.FISICA)
Assim se o campo da classe agregada for uma combo dinâmica, esse carregamento será feito no início da aplicação e gerenciado pelo Jaguar em cache, . Minha dúvida é a seguinte:
É possível alterar a carga dos dados da combo em tempo de execução? Gostaria de fazer algo no momento da carga das configurações personalizadas do usuário. Exemplo: o usuário A só tera acesso a uma combo dinâmica contento os perfis AreaTecnica e Usuarios, enquanto o usuário B poder ver a combo com todos os perfis disponíveis. Obrigado
Autor: Wagner Petronio de Sousa Abreu
1Um comentário
// Garante que nunca é nula (primeira vez), para não cancelar
// hashmap do cache
if (listaVOs == null) {
listaVOs = new ArrayList();
} try {
//Só sobrescrevi por causa disso
if (entityComunsUtil == null) {
entityComunsUtil = new PlcEntityComunsUtil();
}
// POJOs devem sempre ter package e não serem homonimos, então usa o
// padrão listaSel<nome-sem-package> para o cache
String nomeSemPackage = entityComunsUtil
.obtemNomeClasseSemPacote(classeLookup.getName()); if (log.isDebugEnabled()) {
log.debug("Vai adicionar para chave="
+ PlcConstantes.LOOKUP.PREFIXO_LOOKUP + nomeSemPackage
+ " total de " + listaVOs.size() + " registros");
} PlcCacheUtil cacheUtil = (PlcCacheUtil) PlcCDIUtil.getInstance()
.getInstanceByType(PlcCacheUtil.class,
QPlcDefaultLiteral.INSTANCE); cacheUtil.adicionaObjeto(PlcConstantes.LOOKUP.PREFIXO_LOOKUP
+ nomeSemPackage, listaVOs); if (listaVOs != null) {
log.debug("###### Carregou para lookup: " + classeLookup
+ " com total de " + listaVOs.size() + " registros");
} } catch (PlcException e) {
e.printStackTrace();
} }
Ai fiz um pequeno teste no construtor do meu Action como segue: List<MeuEntity> listaMeuEntity = new ArrayList<MeuEntity>(); listaMeuEntity.add(algumacoisa1); listaMeuEntity.add(algumacoisa2); AppClasseLookupUtil util = new AppClasseLookupUtil(); util.defineClasseLookupNoCache(MeuEntity.class,
listaMeuEntity); Feito! A combo dinâmica atualiza na hora da chamada do Action. Se faltou um pouco de elegância nesse código, estou aberto a sugestões.