Pessoal tenho uma página de cadastro de usuários que tem o componente <p:tree> do primefaces porem essa página esta lenta para abrir, alguem sabe o motivo abaixo vou postar o código da página:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.request.contextPath}/resources/css/cadastros.css"/>
<h:outputScript name="jquery.js" library="js" target="head"/>
</h:head>
<h:body>
<ui:composition template="/WEB-INF/template.xhtml">
<ui:define name="conteudoPrincipal">
<!-- Formulário para exibição dos dados-->
<h:form id="formGerenciamentoUser">
<p:growl id="growl"/>
<p:dataTable id="tableUsuarios" var="usuarios" value="#{gerenciamentoUserMB.usuarios}"
paginator="true" rows="10"
rowKey="#{usuarios.idUsuario}"
selection="#{gerenciamentoUserMB.usuario}"
selectionMode="single"
resizableColumns="true"
emptyMessage="Nenhum registro encontrado na base de dados"
scrollable="true"
styleClass="rodape"
scrollHeight="500"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,20,30,40,50,60"
paginatorPosition="bottom">
<!-- Evento disparado para o servidor toda vez que uma linha for selecionada na datatable -->
<p:ajax event="rowSelect" update=":formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar" listener="#{gerenciamentoUserMB.onRowSelect}"/>
<!-- Evento disparado para o servidor toda vez que ocorrer uma paginção na datatable -->
<p:ajax event="page" update=":formGerenciamentoUser:tableUsuarios :formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar" listener="#{gerenciamentoUserMB.pageEvent}"/>
<f:facet name="header">
Gerenciamento de Usuários
</f:facet>
<p:column headerText="Id" rendered="false" >
#{usuarios.idUsuario}
</p:column>
<p:column headerText="Senha" rendered="false" >
#{usuarios.senha}
</p:column>
<p:column headerText="Login" width="350">
#{usuarios.login}
</p:column>
<p:column headerText="Nome" width="350">
#{usuarios.nome}
</p:column>
<p:column headerText="Telefone" width="400">
#{usuarios.telefone}
</p:column>
</p:dataTable>
<p:separator/>
<fieldset id="barraBotoes" style="float: right; border: none;">
<p:commandButton id="btnCadastrar" value="Cadastrar" disabled="false" oncomplete="dlgCadUser.show();" style="margin: 5px;"/>
<p:commandButton id="btnEditar" value="Editar" disabled="#{gerenciamentoUserMB.btnEditar}" update=":formEditUser:dialogEditUser" oncomplete="dlgEditUser.show();" style="margin: 5px;"/>
<p:commandButton id="btnExcluir" value="Excluir" disabled="#{gerenciamentoUserMB.btnExluir}" update=":formExcluirUser:confirmDialogExluirUser" oncomplete="confirExclusaoUser.show();" style="margin: 5px;"/>
<p:commandButton id="btnVisualizar" value="Visualizar" disabled="#{gerenciamentoUserMB.btnVisualizar}" update=":formVisuUser:pngVisualizar" oncomplete="dlgVisuUser.show();" style="margin: 5px;"/>
</fieldset>
</h:form>
<!-- Formulário onde o usuário podera visualizar os detalhes de um determinado
usuário-->
<h:form id="formVisuUser">
<p:dialog header="Visualizar Detalhes do Usuário" widgetVar="dlgVisuUser" resizable="false" id="dlgVisuUser" modal="true">
<h:inputHidden value="#{gerenciamentoUserMB.usuario.senha}" id="idSenha"/>
<h:panelGrid id="pngVisualizar" columns="2" cellpadding="4" >
<h:outputLabel value="Login:" style="float: right;"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.login}" disabled="true" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Senha:" style="float: right;"/>
<p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" disabled="true" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Nome:" style="float: right;"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.nome}" disabled="true" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Telefone:" style="float: right;"/>
<p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="true" mask="(99) 9999-9999" style="width: 220px;font-weight:bold; "/>
</h:panelGrid>
<p:separator/>
<p:commandButton value="Ok" disabled="true" />
<p:commandButton value="Cancelar" onclick="dlgVisuUser.hide();"/>
</p:dialog>
</h:form>
<!-- Formulário onde o usuário poderá cadastrar um determinado usuário-->
<h:form id="formCadUser">
<p:dialog header="Cadastrar Usuário" widgetVar="dlgCadUser" resizable="false" id="dialogCadUser" modal="true">
<p:messages id="msgTelaCadUser" autoUpdate="true"/>
<h:panelGrid id="pngEdit" columns="2" cellpadding="4">
<h:outputLabel value="Login:" style="float: left; font-weight: bold"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.login}" required="true" requiredMessage="O campo Login é obrigatório" disabled="false" style="width: 395px;font-weight:bold; "/>
<h:outputLabel value="Senha:" style="float: left;font-weight: bold"/>
<p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" required="true" requiredMessage="O campo Senha é obrigatório" disabled="false" feedback="true" promptLabel="Senha" weakLabel="Fraca" goodLabel="Boa" strongLabel="Excelente" style="width: 395px;font-weight:bold; "/>
<h:outputLabel value="Nome:" style="float: left;font-weight: bold"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.nome}" required="true" requiredMessage="O campo Nome é obrigatório" disabled="false" style="width: 395px;font-weight:bold; "/>
<h:outputLabel value="Telefone:" style="float: left;font-weight: bold"/>
<p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="false" mask="(99)9999-9999" style="width: 395px; font-weight:bold; "/>
</h:panelGrid>
<p:separator/>
<h:panelGrid columns="2">
<p:fieldset legend="Grupos">
<p:pickList id="pListPermissoes" value="#{gerenciamentoUserMB.userGrupos}" var="userGrupos" converter="convertString2Grupo"
itemLabel="#{userGrupos.nome}" itemValue="#{userGrupos.idGrupo}">
</p:pickList>
</p:fieldset>
<p:fieldset legend="Permissões" toggleable="true" style="height: 245px; width: 450px;">
<div id="divPermissoes" style="height: 210px; overflow: auto !important;" >
<p:tree value="#{gerenciamentoUserMB.nodeRoot}" var="node" id="checkboxTree"
selectionMode="checkbox"
selection="#{gerenciamentoUserMB.selectedNodes}"
style="overflow: auto !important; width: 95%; margin: 0 auto;">
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
</div>
</p:fieldset>
</h:panelGrid>
<p:separator/>
<p:commandButton value="OK" action="#{gerenciamentoUserMB.salvar}" update="formCadUser:dialogCadUser" oncomplete="handleCadUserRequest(xhr, status, args);" style="width: 100px !important; margin-left: 2px;"/>
<p:commandButton value="Cancelar" onclick="dlgCadUser.hide();" style="width: 100px !important; margin-left: 20px;"/>
</p:dialog>
<script type="text/javascript">
function handleCadUserRequest(xhr, status, args) {
if (args.validationFailed || !args.FECHAR || args.FECHAR == undefined) {
dlgCadUser.show();
} else {
dlgCadUser.hide();
}
}
</script>
</h:form>
<!-- Formulário onde o usuário podera editar os detalhes de um determinado
usuário-->
<h:form id="formEditUser">
<p:dialog header="Editar Usuário" widgetVar="dlgEditUser" resizable="false" id="dialogEditUser" modal="true" >
<p:messages id="msgTeladitUser" autoUpdate="true"/>
<h:inputHidden value="#{gerenciamentoUserMB.usuario.idUsuario}" id="idUser"/>
<h:inputHidden value="#{gerenciamentoUserMB.usuario.senha}" id="idSenha"/>
<h:panelGrid id="pngEdit" columns="2" cellpadding="4" >
<h:outputLabel value="Login:" style="float: right;"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.login}" required="true" requiredMessage="O campo Login é obrigatório" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Senha:" style="float: right;"/>
<p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" required="true" requiredMessage="O campo Senha é obrigatório" disabled="false" feedback="true" promptLabel="Senha" weakLabel="Fraca" goodLabel="Boa" strongLabel="Excelente" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Nome:" style="float: right;"/>
<p:inputText value="#{gerenciamentoUserMB.usuario.nome}" required="true" requiredMessage="O campo Nome é obrigatório" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Telefone:" style="float: right;"/>
<p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="false" mask="(99)9999-9999" style="width: 220px;font-weight:bold; "/>
</h:panelGrid>
<p:separator/>
<p:fieldset legend="Grupos">
<p:pickList id="pListPermissoes" value="#{gerenciamentoUserMB.userGrupos}" var="userGrupos" converter="convertString2Grupo"
itemLabel="#{userGrupos.nome}" itemValue="#{userGrupos.idGrupo}">
</p:pickList>
</p:fieldset>
<p:separator/>
<p:commandButton value="OK" action="#{gerenciamentoUserMB.editar}" oncomplete="handleEditUserRequest(xhr, status, args);"/>
<p:commandButton value="Cancelar" action="#{gerenciamentoUserMB.cancela}" oncomplete="handleEditUserRequest(xhr, status, args);"/>
</p:dialog>
<script type="text/javascript">
function handleEditUserRequest(xhr, status, args) {
if (args.validationFailed || !args.FECHAR || args.FECHAR == undefined) {
dlgEditUser.show();
} else {
dlgEditUser.hide();
}
}
</script>
</h:form>
<!-- Dialog para confirmação de exclusão de um determindo usuário-->
<h:form id="formExcluirUser">
<p:confirmDialog id="confirmDialogExluirUser" message="Deseja realmente excluir o usuário #{gerenciamentoUserMB.usuario.nome}?"
header="Excluir Usuário" severity="alert" widgetVar="confirExclusaoUser">
<h:inputHidden value="#{gerenciamentoUserMB.usuario.idUsuario}"/>
<p:commandButton id="confirm" value="Sim" update=":formGerenciamentoUser:tableUsuarios :formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar :formGerenciamentoUser:growl" oncomplete="confirExclusaoUser.hide();"
actionListener="#{gerenciamentoUserMB.deletar(gerenciamentoUserMB.usuario.idUsuario)}" />
<p:commandButton id="decline" value="Não" onclick="confirExclusaoUser.hide();" type="button" />
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
Posta o método que está carregando a sua árvore ai.
Cara, só com o xhtml fica difícil de saber. Pode ser no teu managed bean.
Está lento na hora de carregar a página, ou depois que carrega ao abrir os nodos?
Especifique um pouco melhor e ponha o código que tu utiliza para gerar a tree.
Esta lento na hora de abrir a página, e tipo tenho um botão cadastrar que abre um dialog, quando clico demora uns 2 segundo para abrir o dialog.
Abaixo segue o código do MB:
@ManagedBean(name = "gerenciamentoUserMB")
@RequestScoped
public class GerenciamentoUserMB implements Serializable {
private List<Usuario> usuarios;
private DualListModel<Grupo> userGrupos;
private Usuario usuario;
private boolean btnEditar = true;
private boolean btnVisualizar = true;
private boolean btnExluir = true;
private boolean isFechaTela;
private TreeNode nodeRoot;
private TreeNode[] selectedNodes;
public GerenciamentoUserMB() {
this.usuario = new Usuario();
}
public String salvar() {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
InterfaceCadastroDao cadastroDao = new CadastroDaoImp();
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
InterfaceTipoPermissaoDao tipoCadastroDao = new TipoPermissaoDaoImp();
InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
FacesContext facesContext = FacesContext.getCurrentInstance();
RequestContext contextRequest = RequestContext.getCurrentInstance();
Properties properties = FacesContextUtil.getArquivoPropertiesConfAutLDAP();
boolean isLoginLDAP = new LDAP(properties).isUsuarioValido(this.usuario.getLogin());
this.usuario.setPermissoes(new HashSet<Permissao>());
// Verificando se o login já existe na base de dados
if (!usuarioDao.isLoginExiste(this.usuario.getLogin()) && isLoginLDAP) {
try {
for (Object grupo : this.userGrupos.getTarget()) {
this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
}
usuarioDao.salva(this.usuario);
for (TreeNode treeNode : selectedNodes) {
if (treeNode.isLeaf()) {
Permissao permissao = new Permissao();
permissao.setCadastro(cadastroDao.buscaPorNome(treeNode.getParent()));
permissao.setTipoPermissao(tipoCadastroDao.buscaPorNome(treeNode.getData()));
permissao.setUsuario(usuarioDao.getUsuarioByLogin(this.usuario.getLogin()));
permissaoDao.salva(permissao);
}
}
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi cadastrado com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario = new Usuario();
} catch (ErroSalvarDadosException ex) {
System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
} catch (HibernateException ex) {
System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
}
} else {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "O usuário com o login " + this.usuario.getLogin() + " já esta cadastrado no sistema ou não existe no AD", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
}
return null;
}
public String editar() {
FacesContext facesContext = FacesContext.getCurrentInstance();
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
RequestContext contextRequest = RequestContext.getCurrentInstance();
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
try {
for (Object grupo : this.userGrupos.getTarget()) {
this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
}
usuarioDao.edita(this.usuario);
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi alterado com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
} catch (ErroEditarRegistroBaseDadosException ex) {
System.out.println("Erro ao editar as dados do usuário " + this.usuario.getNome() + " na base de dados. Erro: " + ex);
facesContext.addMessage(null, new FacesMessage("Não foi possivel alterar os dados do usuário: " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formEditUser:dialogEditUser");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
}
return null;
}
public String deletar(Long idUsuario) {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
FacesContext facesContext = FacesContext.getCurrentInstance();
RequestContext contextRequest = RequestContext.getCurrentInstance();
this.usuario = usuarioDao.buscaPorID(idUsuario);
usuarioDao.exclui(this.usuario);
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi excluido com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario = new Usuario();
return null;
}
public DualListModel<Grupo> getGrupos() {
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
List<Grupo> grupos = new ArrayList<Grupo>();
List<Grupo> gruposAssociados = new ArrayList<Grupo>();
for (Grupo grupo : grupoDao.buscaTodos()) {
grupos.add(grupo);
}
this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
return userGrupos;
}
public String cancela() {
RequestContext context = RequestContext.getCurrentInstance();
context.update("formGerenciamentoUser:tableUsuarios");
context.addCallbackParam("FECHAR", true);
return null;
}
public void onRowSelect(SelectEvent event) {
this.btnEditar = false;
this.btnVisualizar = false;
this.btnExluir = false;
}
public void pageEvent(PageEvent event) {
this.btnEditar = true;
this.btnVisualizar = true;
this.btnExluir = true;
}
public List<Usuario> getUsuarios() {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
this.usuarios = usuarioDao.buscaTodos();
return usuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public boolean isBtnEditar() {
return btnEditar;
}
public DualListModel<Grupo> getUserGrupos() {
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
List<Grupo> grupos = new ArrayList<Grupo>();
List<Grupo> gruposAssociados = new ArrayList<Grupo>(5);
Set<Grupo> gruposByLogin;
if (this.usuario.getLogin() == null) {
for (Grupo grupo : grupoDao.buscaTodos()) {
grupos.add(grupo);
}
} else {
gruposByLogin = usuarioDao.getUsuarioByLogin(this.usuario.getLogin()).getGrupos();
for (Grupo grupo : gruposByLogin) {
gruposAssociados.add(grupo);
}
for (Grupo grupo : grupoDao.getGrupoByUsuario(gruposByLogin.toArray())) {
grupos.add(grupo);
}
}
this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
return userGrupos;
}
public void setUserGrupos(DualListModel<Grupo> userGrupos) {
this.userGrupos = userGrupos;
}
public void setBtnEditar(boolean btnEditar) {
this.btnEditar = btnEditar;
}
public boolean isBtnVisualizar() {
return btnVisualizar;
}
public void setBtnVisualizar(boolean btnVisualizar) {
this.btnVisualizar = btnVisualizar;
}
public boolean isBtnExluir() {
return btnExluir;
}
public void setBtnExluir(boolean btnExluir) {
this.btnExluir = btnExluir;
}
public boolean isIsFechaTela() {
return isFechaTela;
}
public void setIsFechaTela(boolean isFechaTela) {
this.isFechaTela = isFechaTela;
}
public TreeNode getNodeRoot() {
InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
this.nodeRoot = new DefaultTreeNode("root", null);
for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) {
TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot);
for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) {
TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai);
}
}
return nodeRoot;
}
public void setNodeRoot(TreeNode nodeRoot) {
this.nodeRoot = nodeRoot;
}
public TreeNode[] getSelectedNodes() {
return selectedNodes;
}
public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
}
}
Pessoal acho que resolvi, criei um método com a anotação @PostConstruct para carregar os elementos da tree e acabou a lentidão ele estava chamando o public TreeNode getNodeRoot() {
InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
this.nodeRoot = new DefaultTreeNode("root", null);
for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) {
TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot);
for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) {
TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai);
}
}
return nodeRoot;
}
varias vezes, vocês que são mais experientes em jsf saberiam me explicar porque esse método esta sendo chamado varias vezes? estou usando a versão mais nova do mojarra como implementação, abaixo segue meu bean alterado:
package com.arcelormittal.scer.controller.cadastro.usuarios;
import com.arcelormittal.scer.dao.impl.CadastroDaoImp;
import com.arcelormittal.scer.dao.impl.GrupoDaoImp;
import com.arcelormittal.scer.dao.impl.PermissaoDaoImp;
import com.arcelormittal.scer.dao.impl.TipoPermissaoDaoImp;
import com.arcelormittal.scer.dao.impl.UsuarioDaoImp;
import com.arcelormittal.scer.dao.interfaces.InterfaceCadastroDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceGrupoDao;
import com.arcelormittal.scer.dao.interfaces.InterfacePermissaoDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceTipoPermissaoDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceUsuarioDao;
import com.arcelormittal.scer.hibernate.pojos.Cadastro;
import com.arcelormittal.scer.hibernate.pojos.Grupo;
import com.arcelormittal.scer.hibernate.pojos.Permissao;
import com.arcelormittal.scer.hibernate.pojos.TipoPermissao;
import com.arcelormittal.scer.hibernate.pojos.Usuario;
import com.arcelormittal.scer.util.ErroEditarRegistroBaseDadosException;
import com.arcelormittal.scer.util.ErroSalvarDadosException;
import com.arcelormittal.scer.util.FacesContextUtil;
import com.arcelormittal.scer.util.LDAP;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.hibernate.HibernateException;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.data.PageEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.DualListModel;
import org.primefaces.model.TreeNode;
@ManagedBean(name = "gerenciamentoUserMB")
@RequestScoped
public class GerenciamentoUserMB implements Serializable {
private List<Usuario> usuarios;
private DualListModel<Grupo> userGrupos;
private Usuario usuario;
private boolean btnEditar = true;
private boolean btnVisualizar = true;
private boolean btnExluir = true;
private boolean isFechaTela;
private TreeNode nodeRoot;
private TreeNode[] selectedNodes;
public GerenciamentoUserMB() {
this.usuario = new Usuario();
}
public String salvar() {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
InterfaceCadastroDao cadastroDao = new CadastroDaoImp();
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
InterfaceTipoPermissaoDao tipoCadastroDao = new TipoPermissaoDaoImp();
InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
FacesContext facesContext = FacesContext.getCurrentInstance();
RequestContext contextRequest = RequestContext.getCurrentInstance();
Properties properties = FacesContextUtil.getArquivoPropertiesConfAutLDAP();
boolean isLoginLDAP = new LDAP(properties).isUsuarioValido(this.usuario.getLogin());
this.usuario.setPermissoes(new HashSet<Permissao>());
// Verificando se o login já existe na base de dados
if (!usuarioDao.isLoginExiste(this.usuario.getLogin()) && isLoginLDAP) {
try {
for (Object grupo : this.userGrupos.getTarget()) {
this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
}
usuarioDao.salva(this.usuario);
for (TreeNode treeNode : selectedNodes) {
if (treeNode.isLeaf()) {
Permissao permissao = new Permissao();
permissao.setCadastro(cadastroDao.buscaPorNome(treeNode.getParent()));
permissao.setTipoPermissao(tipoCadastroDao.buscaPorNome(treeNode.getData()));
permissao.setUsuario(usuarioDao.getUsuarioByLogin(this.usuario.getLogin()));
permissaoDao.salva(permissao);
}
}
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi cadastrado com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario = new Usuario();
} catch (ErroSalvarDadosException ex) {
System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
} catch (HibernateException ex) {
System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
}
} else {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "O usuário com o login " + this.usuario.getLogin() + " já esta cadastrado no sistema ou não existe no AD", null));
contextRequest.update("formCadUser:dialogCadUser");
this.isFechaTela = false;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario.setLogin(null);
}
return null;
}
public String editar() {
FacesContext facesContext = FacesContext.getCurrentInstance();
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
RequestContext contextRequest = RequestContext.getCurrentInstance();
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
try {
for (Object grupo : this.userGrupos.getTarget()) {
this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
}
usuarioDao.edita(this.usuario);
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi alterado com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
} catch (ErroEditarRegistroBaseDadosException ex) {
System.out.println("Erro ao editar as dados do usuário " + this.usuario.getNome() + " na base de dados. Erro: " + ex);
facesContext.addMessage(null, new FacesMessage("Não foi possivel alterar os dados do usuário: " + this.usuario.getNome() + " na base de dados.", null));
contextRequest.update("formEditUser:dialogEditUser");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
}
return null;
}
public String deletar(Long idUsuario) {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
FacesContext facesContext = FacesContext.getCurrentInstance();
RequestContext contextRequest = RequestContext.getCurrentInstance();
this.usuario = usuarioDao.buscaPorID(idUsuario);
usuarioDao.exclui(this.usuario);
facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi excluido com sucesso.", null));
contextRequest.update("formGerenciamentoUser:tableUsuarios");
contextRequest.update("formGerenciamentoUser:growl");
this.isFechaTela = true;
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
this.usuario = new Usuario();
return null;
}
@PostConstruct
public void carregaTree() {
Long ti = System.currentTimeMillis();
this.nodeRoot = new DefaultTreeNode("root", null);
for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) {
TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot);
for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) {
TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai);
}
}
Long ts = System.currentTimeMillis();
Long tf = ts - ti;
System.out.println("Tempo total carregamento arvore: " + tf);
}
public DualListModel<Grupo> getGrupos() {
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
List<Grupo> grupos = new ArrayList<Grupo>();
List<Grupo> gruposAssociados = new ArrayList<Grupo>();
for (Grupo grupo : grupoDao.buscaTodos()) {
grupos.add(grupo);
}
this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
return userGrupos;
}
public String cancela() {
RequestContext context = RequestContext.getCurrentInstance();
context.update("formGerenciamentoUser:tableUsuarios");
context.addCallbackParam("FECHAR", true);
return null;
}
public void onRowSelect(SelectEvent event) {
this.btnEditar = false;
this.btnVisualizar = false;
this.btnExluir = false;
}
public void pageEvent(PageEvent event) {
this.btnEditar = true;
this.btnVisualizar = true;
this.btnExluir = true;
}
public List<Usuario> getUsuarios() {
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
this.usuarios = usuarioDao.buscaTodos();
return usuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public boolean isBtnEditar() {
return btnEditar;
}
public DualListModel<Grupo> getUserGrupos() {
InterfaceGrupoDao grupoDao = new GrupoDaoImp();
InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
List<Grupo> grupos = new ArrayList<Grupo>();
List<Grupo> gruposAssociados = new ArrayList<Grupo>(5);
Set<Grupo> gruposByLogin;
if (this.usuario.getLogin() == null) {
for (Grupo grupo : grupoDao.buscaTodos()) {
grupos.add(grupo);
}
} else {
gruposByLogin = usuarioDao.getUsuarioByLogin(this.usuario.getLogin()).getGrupos();
for (Grupo grupo : gruposByLogin) {
gruposAssociados.add(grupo);
}
for (Grupo grupo : grupoDao.getGrupoByUsuario(gruposByLogin.toArray())) {
grupos.add(grupo);
}
}
this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
return userGrupos;
}
public void setUserGrupos(DualListModel<Grupo> userGrupos) {
this.userGrupos = userGrupos;
}
public void setBtnEditar(boolean btnEditar) {
this.btnEditar = btnEditar;
}
public boolean isBtnVisualizar() {
return btnVisualizar;
}
public void setBtnVisualizar(boolean btnVisualizar) {
this.btnVisualizar = btnVisualizar;
}
public boolean isBtnExluir() {
return btnExluir;
}
public void setBtnExluir(boolean btnExluir) {
this.btnExluir = btnExluir;
}
public boolean isIsFechaTela() {
return isFechaTela;
}
public void setIsFechaTela(boolean isFechaTela) {
this.isFechaTela = isFechaTela;
}
public TreeNode getNodeRoot() {
return nodeRoot;
}
public void setNodeRoot(TreeNode nodeRoot) {
this.nodeRoot = nodeRoot;
}
public TreeNode[] getSelectedNodes() {
return selectedNodes;
}
public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
}
}