Usuario con multiples roles
Last updated
Was this helpful?
Last updated
Was this helpful?
Usuario.java
@Getter
@Setter
public class Usuario {
@Id
private String username;
private String password;
private String nombre;
private String cedula;
private String celular;
private String cargo;
private String email;
@Referenced(documment = "Rol",
field = "idrol", javatype = "String", lazy = false,
repository = "com.avbravo.transporteejb.repository.RolRepository")
private List<Rol> rol;
private String activo;
@Embedded
List<UserInfo> userInfo;
public Usuario() {
}
@Override
public String toString() {
return "Usuario{" + "username=" + username + ", password=" + password + ", nombre=" + nombre + ", celular=" + celular + ", cargo=" + cargo + ", email=" + email + ", rol=" + rol + ", userInfo=" + userInfo + '}';
}
}
Rol.java
public class Rol {
@Id
private String idrol;
private String rol;
private String activo;
@Embedded
List<UserInfo> userInfo;
public Rol() {
}
@Override
public String toString() {
return "Rol{" + "idrol=" + idrol + ", rol=" + rol + '}';
}
}
El list.xhtml muestre todos los roles que posee en una columna.
Necesitamos usar un <p:repeat>, para recorrer el list de roles.
<b:dataTableColumn label="">
<p:panelGrid columns="2" styleClass="form-group ui-panelgrid-blank" layout="grid">
<p:repeat value="#{item.rol}" var="car">
<p:outputLabel value="#{car.idrol}"/>
</p:repeat>
</p:panelGrid>
</b:dataTableColumn>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<ui:composition template="/layout/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:b="http://bootsfaces.net/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:a="http://xmlns.jcp.org/jsf/composite/avbravo"
xmlns:e="http://xmlns.jcp.org/jsf/composite/extensions"
xmlns:c="http://xmlns.jcp.org/jsf">
<ui:define name="content">
<!--<h:outputStylesheet library="bsf" name="css/thumbnails.css"/>-->
<style>
.thumbnail { max-width: 100%; }
img.thumbnail:hover, img.thumbnail:focus {
border: 1px solid;
border-color: #428BCA;
}
</style>
<h1>#{msg['titlelist.usuario']}</h1>
<hr/>
<b:form id="form" prependId="false" rendered="#{loginController.loggedIn and applicationMenu.usuario.list}" onkeypress="if (event.keyCode == 13) {
return false;
}">
<b:growl id="msgs"/>
<b:panel title="#{app['label.search']}" id="content">
<!--<b:panelGrid colSpans="2,10" size="xs">-->
<b:panelGrid colSpans="1,4,1,6" columns="4" size="xs">
<p:outputLabel value="#{msg['field.username']}"/>
<e:autocompleteusuario listener="#{usuarioController.handleSelect}"
value="#{usuarioController.usuarioSelected}"
itemLabel=" #{p.username}"
field="username"
update=" :form:dataTable"/>
<p:outputLabel value="#{msg['field.nombre']}"/>
<e:autocompleteusuario listener="#{usuarioController.handleSelect}"
value="#{usuarioController.usuarioSelected}"
itemLabel=" #{p.nombre}"
field="nombre"
update=" :form:dataTable"/>
</b:panelGrid>
</b:panel>
<b:panel id="dataTable">
<a:paginator
clear="#{usuarioController.clear()}"
first="#{usuarioController.first()}"
back="#{usuarioController.back()}"
next="#{usuarioController.next()}"
last="#{usuarioController.last()}"
page="#{usuarioController.page}"
pages="#{usuarioController.pages}"
skip="ajax:usuarioController.skip(usuarioController.page)"
new="#{usuarioController.prepare('gonew',usuarioController.usuario)}"
printAll="#{usuarioController.printAll()}"
/>
<b:dataTable value="#{usuarioController.usuarioDataModel}"
var="item"
id="dataTable2"
paginated="false"
onpage="console.log('page');">
<b:dataTableColumn value="#{item.username}" label="#{msg['field.username']}"/>
<b:dataTableColumn value="#{item.nombre}" label="#{msg['field.nombre']}" />
<b:dataTableColumn label="">
<p:panelGrid columns="2" styleClass="form-group ui-panelgrid-blank" layout="grid">
<p:repeat value="#{item.rol}" var="car">
<p:outputLabel value="#{car.idrol}"/>
</p:repeat>
</p:panelGrid>
</b:dataTableColumn>
<b:dataTableColumn label="">
<a:column
edit="#{usuarioController.prepare('view',item)}"
delete="#{usuarioController.delete(item,false)}"
rendered="#{applicationMenu.usuario.delete}"
/>
</b:dataTableColumn>
</b:dataTable>
</b:panel>
</b:form>
<a:denegado renderedcondition="#{!loginController.loggedIn or !applicationMenu.usuario.list}" />
</ui:define>
</ui:composition>
Usaremos un autocomplete múltiple que permita seleccionar varios roles y almacenarlos en una lista de roles.
Pasos:
Parámetro multiple = true
Crear un mètodo en el controller para el completeMethod que filtre los entitys seleccionados previamente
public List<Rol> completeFiltrado(String query) {
List<Rol> suggestions = new ArrayList<>();
List<Rol> temp = new ArrayList<>();
try {
Boolean found = false;
query = query.trim();
if (query.length() < 1) {
return suggestions;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
temp = rolRepository.findRegex(field, query, true, new Document(field, 1));
if (rolList.isEmpty()) {
if (!temp.isEmpty()) {
suggestions = temp;
}
} else {
if (!temp.isEmpty()) {
for (Rol r : temp) {
found = false;
for(Rol r2:rolList){
if(r.getIdrol().equals(r2.getIdrol())){
found=true;
}
}
if(!found){
suggestions.add(r);
}
}
}
}
//suggestions= rolRepository.findRegex(field,query,true,new Document(field,1));
} catch (Exception e) {
JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
}
return suggestions;
}
Crear una lista de rol en el controller para que almacene todos los seleccionados.
<p:autoComplete dropdown="false"
multiple="true"
scrollHeight="250"
size="25"
emptyMessage="#{app['info.nohayregistros']}"
value="#{usuarioController.rolList}"
completeMethod="#{usuarioController.completeFiltrado}"
var="p"
required="true"
itemLabel="#{p.idrol}"
itemValue="#{p}" forceSelection="true">
<f:converter binding="#{rolConverter}"/>
<f:attribute name="field" value="idrol"/>
<p:ajax event="itemSelect" listener="#{rolController.handleSelect}"
/>
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.idrol']} #{p.idrol}" />
<h:outputText value="#{msg['field.rol']} #{p.rol}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
Código completo new.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<ui:composition template="/layout/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:b="http://bootsfaces.net/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:e="http://xmlns.jcp.org/jsf/composite/extensions"
xmlns:a="http://xmlns.jcp.org/jsf/composite/avbravo">
<ui:define name="content">
<!--<h:outputStylesheet library="bsf" name="css/thumbnails.css"/>-->
<style>
.thumbnail { max-width: 100%; }
img.thumbnail:hover, img.thumbnail:focus {
border: 1px solid;
border-color: #428BCA;
}
</style>
<h1>#{msg['titleview.usuario']}</h1>
<hr/>
<b:form id="form" prependId="false" rendered="#{loginController.loggedIn and applicationMenu.usuario.create}" onkeypress="if (event.keyCode == 13) {
return false;
}">
<h:panelGroup id="content" layout="block">
<a:messages id="msg"/>
<a:new label="#{msg['field.username']}"
value="#{usuarioController.usuario.username}"
isnew="#{usuarioController.isNew()}"
new="#{usuarioController.prepare('new',usuarioController.usuario)}"
rendererList="#{applicationMenu.usuario.list}"
list="#{usuarioController.prepare('golist',usuarioController.usuario)}"
/>
<b:panel title="#{app['title.data']}">
<b:panelGrid id="panel" colSpans="2,10" size="xs" rendered="#{usuarioController.writable}">
<p:outputLabel value="#{msg['field.nombre']}" />
<a:inputText value="#{usuarioController.usuario.nombre}" id="nombre" label="#{msg['field.nombre']}" />
<p:outputLabel value="#{msg['field.password']}" />
<a:password value="#{usuarioController.usuario.password}" id="password" label="#{msg['field.password']}" />
<p:outputLabel value="#{msg['field.passwordnuevorepetir']}" />
<a:password value="#{usuarioController.passwordnewrepeat}" id="passwordrepetido" label="#{msg['field.passwordnuevorepetir']}" />
<p:outputLabel value="#{msg['field.email']}" />
<a:email value="#{usuarioController.usuario.email}" id="email" label="#{msg['field.email']}" />
<p:outputLabel value="#{msg['field.celular']}" />
<a:inputText value="#{usuarioController.usuario.celular}" id="celular" span="4" label="#{msg['field.celular']}" />
<p:outputLabel value="#{msg['field.cargo']}" />
<a:inputText value="#{usuarioController.usuario.cargo}" id="cargo" label="#{msg['field.cargo']}" />
<p:outputLabel value="#{msg['field.rol']}" />
<p:autoComplete dropdown="false"
multiple="true"
scrollHeight="250"
size="25"
emptyMessage="#{app['info.nohayregistros']}"
value="#{usuarioController.rolList}"
completeMethod="#{usuarioController.completeFiltrado}"
var="p"
required="true"
itemLabel="#{p.idrol}"
itemValue="#{p}" forceSelection="true">
<f:converter binding="#{rolConverter}"/>
<f:attribute name="field" value="idrol"/>
<p:ajax event="itemSelect" listener="#{rolController.handleSelect}"
/>
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.idrol']} #{p.idrol}" />
<h:outputText value="#{msg['field.rol']} #{p.rol}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
<p:outputLabel value="#{msg['field.activo']}" />
<a:yesno value="#{usuarioController.usuario.activo}" id="activo" required="true"/>
<a:save rendered="#{usuarioController.writable and applicationMenu.usuario.create}"
save="#{usuarioController.save()}" />
</b:panelGrid>
</b:panel>
</h:panelGroup>
</b:form>
<a:denegado renderedcondition="#{!loginController.loggedIn or !applicationMenu.usuario.create}" />
<br/><br/><br/>
</ui:define>
</ui:composition>
Permite la ediciòn del usuario.
No mostrar el password del usuario
Usar el autocomplete multiple para seleccionar los roles
En el controller en el método prepare(), cargar el rolList con los que trae el usuario.
case "view":
if (item.length != 0) {
usuarioSelected = (Usuario) item[0];
rolList = usuario.getRol();
usuario = usuarioSelected;
loginController.put("username", usuario.getUsername());
}
Mètodo init() cargar el rolList con la lista que trae usuario.
if (id != null) {
Optional<Usuario> optional = usuarioRepository.find("username", id);
if (optional.isPresent()) {
usuario = optional.get();
rolList = usuario.getRol();
usuario.setPassword(JsfUtil.desencriptar(usuario.getPassword()));
usuarioSelected = usuario;
writable = true;
}
}
Còdigo completo view.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<ui:composition template="/layout/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:b="http://bootsfaces.net/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:e="http://xmlns.jcp.org/jsf/composite/extensions"
xmlns:a="http://xmlns.jcp.org/jsf/composite/avbravo">
<ui:define name="content">
<!--<h:outputStylesheet library="bsf" name="css/thumbnails.css"/>-->
<style>
.thumbnail { max-width: 100%; }
img.thumbnail:hover, img.thumbnail:focus {
border: 1px solid;
border-color: #428BCA;
}
</style>
<h1>#{msg['titleview.usuario']}</h1>
<hr/>
<b:form id="form" prependId="false" rendered="#{loginController.loggedIn and applicationMenu.usuario.query}" onkeypress="if (event.keyCode == 13) {
return false;
}">
<h:panelGroup id="content" layout="block">
<a:messages id="msg"/>
<b:panel title="#{app['title.data']}">
<b:panelGrid id="panel" colSpans="2,10" size="xs" rendered="#{usuarioController.writable}">
<p:outputLabel value="#{msg['field.username']}" />
<p:outputLabel value="#{usuarioController.usuario.username}" id="username" />
<p:outputLabel value="#{msg['field.nombre']}" />
<a:inputText value="#{usuarioController.usuario.nombre}" id="nombre" label="#{msg['field.nombre']}" />
<p:outputLabel value="#{msg['field.email']}" />
<a:email value="#{usuarioController.usuario.email}" id="email" label="#{msg['field.email']}" />
<p:outputLabel value="#{msg['field.celular']}" />
<a:inputText value="#{usuarioController.usuario.celular}" id="celular" span="4" label="#{msg['field.celular']}" />
<p:outputLabel value="#{msg['field.cargo']}" />
<a:inputText value="#{usuarioController.usuario.cargo}" id="cargo" label="#{msg['field.cargo']}" />
<p:outputLabel value="#{msg['field.rol']}" />
<p:autoComplete dropdown="false"
multiple="true"
scrollHeight="250"
size="25"
emptyMessage="#{app['info.nohayregistros']}"
value="#{usuarioController.rolList}"
completeMethod="#{usuarioController.completeFiltrado}"
var="p"
required="true"
itemLabel="#{p.idrol}"
itemValue="#{p}" forceSelection="true">
<f:converter binding="#{rolConverter}"/>
<f:attribute name="field" value="idrol"/>
<p:ajax event="itemSelect" listener="#{rolController.handleSelect}"
/>
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.idrol']} #{p.idrol}" />
<h:outputText value="#{msg['field.rol']} #{p.rol}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
<p:outputLabel value="#{msg['field.activo']}" />
<a:yesno value="#{usuarioController.usuario.activo}" id="activo" required="true"/>
</b:panelGrid>
<a:view
renderedDelete="#{applicationMenu.usuario.delete and usuarioController.writable }"
renderedEdit="#{applicationMenu.usuario.edit and usuarioController.writable}"
renderedList="#{applicationMenu.usuario.list and usuarioController.writable}"
edit="#{usuarioController.edit()}"
delete="#{usuarioController.delete(usuarioController.usuario,true)}"
print="#{usuarioController.print()}"
url="#{usuarioController.prepare('golist',usuarioController.usuario)}"
/>
</b:panel>
</h:panelGroup>
</b:form>
<a:denegado renderedcondition="#{!loginController.loggedIn or !applicationMenu.usuario.query}" />
<br/><br/><br/>
</ui:define>
</ui:composition>
Agregar lista de rol
//Para multiples roles
List<Rol> rolList = new ArrayList();
Agregar el repository
@Inject
RolRepository rolRepository;
Agregar el método para el autocomplete Filtrado
public List<Rol> completeFiltrado(String query) {
List<Rol> suggestions = new ArrayList<>();
List<Rol> temp = new ArrayList<>();
try {
Boolean found = false;
query = query.trim();
if (query.length() < 1) {
return suggestions;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
temp = rolRepository.findRegex(field, query, true, new Document(field, 1));
if (rolList.isEmpty()) {
if (!temp.isEmpty()) {
suggestions = temp;
}
} else {
if (!temp.isEmpty()) {
for (Rol r : temp) {
found = false;
for(Rol r2:rolList){
if(r.getIdrol().equals(r2.getIdrol())){
found=true;
}
}
if(!found){
suggestions.add(r);
}
}
}
}
//suggestions= rolRepository.findRegex(field,query,true,new Document(field,1));
} catch (Exception e) {
JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
}
return suggestions;
}
Codigo completo UsuarioController.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.avbravo.transporte.controller;
// <editor-fold defaultstate="collapsed" desc="imports">
import com.avbravo.avbravoutils.JsfUtil;
import com.avbravo.avbravoutils.printer.Printer;
import com.avbravo.ejbjmoordb.interfaces.IController;
import com.avbravo.ejbjmoordb.services.RevisionHistoryServices;
import com.avbravo.ejbjmoordb.services.UserInfoServices;
import com.avbravo.transporte.util.ResourcesFiles;
import com.avbravo.transporteejb.datamodel.UsuarioDataModel;
import com.avbravo.transporteejb.entity.Rol;
import com.avbravo.transporteejb.entity.Usuario;
import com.avbravo.transporteejb.repository.AutoincrementableRepository;
import com.avbravo.transporteejb.repository.RevisionHistoryRepository;
import com.avbravo.transporteejb.repository.RolRepository;
import com.avbravo.transporteejb.repository.UsuarioRepository;
import com.avbravo.transporteejb.services.LookupServices;
import com.avbravo.transporteejb.services.RolServices;
import com.avbravo.transporteejb.services.UsuarioServices;
import java.util.ArrayList;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import javax.annotation.PostConstruct;
import javax.faces.component.UIComponent;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.faces.context.FacesContext;
import org.bson.Document;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
// </editor-fold>
/**
*
* @authoravbravo
*/
@Named
@ViewScoped
public class UsuarioController implements Serializable, IController {
// <editor-fold defaultstate="collapsed" desc="fields">
private static final long serialVersionUID = 1L;
private String passwordnewrepeat;
// @Inject
//private transient ExternalContext externalContext;
private Boolean writable = false;
//DataModel
private UsuarioDataModel usuarioDataModel;
Integer page = 1;
Integer rowPage = 25;
List<Integer> pages = new ArrayList<>();
//Para multiples roles
List<Rol> rolList = new ArrayList();
//Entity
Usuario usuario;
Usuario usuarioSelected;
//List
List<Usuario> usuarioList = new ArrayList<>();
List<Usuario> usuarioFiltered = new ArrayList<>();
//Repository
@Inject
AutoincrementableRepository autoincrementableRepository;
@Inject
RevisionHistoryRepository revisionHistoryRepository;
@Inject
RolRepository rolRepository;
@Inject
UsuarioRepository usuarioRepository;
//Services
//Atributos para busquedas
@Inject
LookupServices lookupServices;
@Inject
RevisionHistoryServices revisionHistoryServices;
@Inject
UserInfoServices userInfoServices;
@Inject
UsuarioServices usuarioServices;
@Inject
RolServices rolServices;
@Inject
ResourcesFiles rf;
@Inject
Printer printer;
@Inject
LoginController loginController;
//List of Relations
//Repository of Relations
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="getter/setter">
public List<Integer> getPages() {
return usuarioRepository.listOfPage(rowPage);
}
public LookupServices getLookupServices() {
return lookupServices;
}
public RolRepository getRolRepository() {
return rolRepository;
}
public void setRolRepository(RolRepository rolRepository) {
this.rolRepository = rolRepository;
}
public List<Rol> getRolList() {
return rolList;
}
public void setRolList(List<Rol> rolList) {
this.rolList = rolList;
}
public String getPasswordnewrepeat() {
return passwordnewrepeat;
}
public void setPasswordnewrepeat(String passwordnewrepeat) {
this.passwordnewrepeat = passwordnewrepeat;
}
public void setLookupServices(LookupServices lookupServices) {
this.lookupServices = lookupServices;
}
public void setPages(List<Integer> pages) {
this.pages = pages;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public RolServices getRolServices() {
return rolServices;
}
public void setRolServices(RolServices rolServices) {
this.rolServices = rolServices;
}
public Integer getRowPage() {
return rowPage;
}
public void setRowPage(Integer rowPage) {
this.rowPage = rowPage;
}
public UsuarioServices getUsuarioServices() {
return usuarioServices;
}
public void setUsuarioServices(UsuarioServices usuarioServices) {
this.usuarioServices = usuarioServices;
}
public List<Usuario> getUsuarioList() {
return usuarioList;
}
public void setUsuarioList(List<Usuario> usuarioList) {
this.usuarioList = usuarioList;
}
public List<Usuario> getUsuarioFiltered() {
return usuarioFiltered;
}
public void setUsuarioFiltered(List<Usuario> usuarioFiltered) {
this.usuarioFiltered = usuarioFiltered;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Usuario getUsuarioSelected() {
return usuarioSelected;
}
public void setUsuarioSelected(Usuario usuarioSelected) {
this.usuarioSelected = usuarioSelected;
}
public UsuarioDataModel getUsuarioDataModel() {
return usuarioDataModel;
}
public void setUsuarioDataModel(UsuarioDataModel usuarioDataModel) {
this.usuarioDataModel = usuarioDataModel;
}
public Boolean getWritable() {
return writable;
}
public void setWritable(Boolean writable) {
this.writable = writable;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="constructor">
public UsuarioController() {
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="preRenderView()">
@Override
public String preRenderView(String action) {
//acciones al llamar el formulario despues del init
return "";
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="init">
@PostConstruct
public void init() {
try {
String action = loginController.get("usuario");
String id = loginController.get("username");
String pageSession = loginController.get("pageusuario");
//Search
loginController.put("searchusuario", "_init");
writable = false;
usuarioList = new ArrayList<>();
usuarioFiltered = new ArrayList<>();
usuario = new Usuario();
usuarioDataModel = new UsuarioDataModel(usuarioList);
if (id != null) {
Optional<Usuario> optional = usuarioRepository.find("username", id);
if (optional.isPresent()) {
usuario = optional.get();
rolList = usuario.getRol();
usuario.setPassword(JsfUtil.desencriptar(usuario.getPassword()));
usuarioSelected = usuario;
writable = true;
}
}
if (action != null && action.equals("gonew")) {
usuario = new Usuario();
usuarioSelected = usuario;
writable = false;
}
if (pageSession != null) {
page = Integer.parseInt(pageSession);
}
Integer c = usuarioRepository.sizeOfPage(rowPage);
page = page > c ? c : page;
move();
} catch (Exception e) {
JsfUtil.errorMessage("init() " + e.getLocalizedMessage());
}
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="reset">
@Override
public void reset() {
RequestContext.getCurrentInstance().reset(":form:content");
prepare("new");
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="prepare(String action, Object... item)">
@Override
public String prepare(String action, Object... item) {
String url = "";
try {
loginController.put("pageusuario", page.toString());
loginController.put("usuario", action);
switch (action) {
case "new":
usuario = new Usuario();
usuarioSelected = new Usuario();
writable = false;
break;
case "view":
if (item.length != 0) {
usuarioSelected = (Usuario) item[0];
rolList = usuario.getRol();
usuario = usuarioSelected;
loginController.put("username", usuario.getUsername());
}
url = "/pages/usuario/view.xhtml";
break;
case "golist":
url = "/pages/usuario/list.xhtml";
break;
case "gonew":
url = "/pages/usuario/new.xhtml";
break;
}
} catch (Exception e) {
JsfUtil.errorMessage("prepare() " + e.getLocalizedMessage());
}
return url;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="showAll">
@Override
public String showAll() {
try {
usuarioList = new ArrayList<>();
usuarioFiltered = new ArrayList<>();
usuarioList = usuarioRepository.findAll();
usuarioFiltered = usuarioList;
usuarioDataModel = new UsuarioDataModel(usuarioList);
} catch (Exception e) {
JsfUtil.errorMessage("showAll()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="isNew">
@Override
public String isNew() {
try {
writable = true;
if (JsfUtil.isVacio(usuario.getUsername())) {
writable = false;
return "";
}
Optional<Usuario> optional = usuarioRepository.findById(usuario);
if (optional.isPresent()) {
writable = false;
JsfUtil.warningMessage(rf.getAppMessage("warning.idexist"));
return "";
} else {
String id = usuario.getUsername();
usuario = new Usuario();
usuario.setUsername(id);
rolList = new ArrayList<>();
usuarioSelected = new Usuario();
}
} catch (Exception e) {
JsfUtil.errorMessage("isNew()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="save">
@Override
public String save() {
try {
Optional<Usuario> optional = usuarioRepository.findById(usuario);
if (optional.isPresent()) {
JsfUtil.warningMessage(rf.getAppMessage("warning.idexist"));
return null;
}
if (!usuario.getPassword().equals(passwordnewrepeat)) {
//password nuevo no coincide
JsfUtil.warningMessage(rf.getMessage("warning.passwordnocoinciden"));
return "";
}
usuario.setRol(rolList);
usuario.setPassword(JsfUtil.encriptar(usuario.getPassword()));
usuario.setUserInfo(userInfoServices.generateListUserinfo(loginController.getUsername(), "create"));
if (usuarioRepository.save(usuario)) {
revisionHistoryRepository.save(revisionHistoryServices.getRevisionHistory(usuario.getUsername(), loginController.getUsername(),
"create", "usuario", usuarioRepository.toDocument(usuario).toString()));
JsfUtil.successMessage(rf.getAppMessage("info.save"));
reset();
} else {
JsfUtil.successMessage("save() " + usuarioRepository.getException().toString());
}
} catch (Exception e) {
JsfUtil.errorMessage("save()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="edit">
@Override
public String edit() {
try {
usuario.setRol(rolList);
usuario.setPassword(JsfUtil.encriptar(usuario.getPassword()));
usuario.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(), "update"));
//guarda el contenido anterior
//guarda el contenido actualizado
revisionHistoryRepository.save(revisionHistoryServices.getRevisionHistory(usuario.getUsername(), loginController.getUsername(),
"update", "usuario", usuarioRepository.toDocument(usuario).toString()));
usuarioRepository.update(usuario);
JsfUtil.successMessage(rf.getAppMessage("info.update"));
} catch (Exception e) {
JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="delete(Object item, Boolean deleteonviewpage) ">
@Override
public String delete(Object item, Boolean deleteonviewpage) {
String path = "";
try {
usuario = (Usuario) item;
usuarioSelected = usuario;
if (usuarioRepository.delete("username", usuario.getUsername())) {
revisionHistoryRepository.save(revisionHistoryServices.getRevisionHistory(usuario.getUsername(), loginController.getUsername(), "delete", "usuario", usuarioRepository.toDocument(usuario).toString()));
JsfUtil.successMessage(rf.getAppMessage("info.delete"));
if (!deleteonviewpage) {
usuarioList.remove(usuario);
usuarioFiltered = usuarioList;
usuarioDataModel = new UsuarioDataModel(usuarioList);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pageusuario", page.toString());
} else {
usuario = new Usuario();
usuarioSelected = new Usuario();
writable = false;
}
}
} catch (Exception e) {
JsfUtil.errorMessage("delete() " + e.getLocalizedMessage());
}
// path = deleteonviewpage ? "/pages/usuario/list.xhtml" : "";
path = "";
return path;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="deleteAll">
@Override
public String deleteAll() {
if (usuarioRepository.deleteAll() != 0) {
JsfUtil.successMessage(rf.getAppMessage("info.delete"));
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="print">
@Override
public String print() {
try {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pageusuario", page.toString());
List<Usuario> list = new ArrayList<>();
list.add(usuario);
String ruta = "/resources/reportes/usuario/details.jasper";
HashMap parameters = new HashMap();
// parameters.put("P_parametro", "valor");
printer.imprimir(list, ruta, parameters);
} catch (Exception ex) {
JsfUtil.errorMessage("imprimir() " + ex.getLocalizedMessage());
}
return null;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="printAll">
@Override
public String printAll() {
try {
List<Usuario> list = new ArrayList<>();
list = usuarioRepository.findAll(new Document("username", 1));
String ruta = "/resources/reportes/usuario/all.jasper";
HashMap parameters = new HashMap();
// parameters.put("P_parametro", "valor");
printer.imprimir(list, ruta, parameters);
} catch (Exception ex) {
JsfUtil.errorMessage("imprimir() " + ex.getLocalizedMessage());
}
return null;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="handleSelect">
public void handleSelect(SelectEvent event) {
try {
usuarioList.removeAll(usuarioList);
usuarioList.add(usuarioSelected);
usuarioFiltered = usuarioList;
usuarioDataModel = new UsuarioDataModel(usuarioList);
loginController.put("searchusuario", "_autocomplete");
} catch (Exception ex) {
JsfUtil.errorMessage("handleSelect() " + ex.getLocalizedMessage());
}
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="last">
@Override
public String last() {
try {
page = usuarioRepository.sizeOfPage(rowPage);
move();
} catch (Exception e) {
JsfUtil.errorMessage("last() " + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="first">
@Override
public String first() {
try {
page = 1;
move();
} catch (Exception e) {
JsfUtil.errorMessage("first() " + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="next">
@Override
public String next() {
try {
if (page < (usuarioRepository.sizeOfPage(rowPage))) {
page++;
}
move();
} catch (Exception e) {
JsfUtil.errorMessage("next() " + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="back">
@Override
public String back() {
try {
if (page > 1) {
page--;
}
move();
} catch (Exception e) {
JsfUtil.errorMessage("back() " + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="skip(Integer page)">
@Override
public String skip(Integer page) {
try {
this.page = page;
move();
} catch (Exception e) {
JsfUtil.errorMessage("skip() " + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="move">
@Override
public void move() {
try {
Document doc;
switch (loginController.get("searchusuario")) {
case "_init":
usuarioList = usuarioRepository.findPagination(page, rowPage);
break;
case "_autocomplete":
//no se realiza ninguna accion
break;
case "username":
doc = new Document("username", usuario.getUsername());
usuarioList = usuarioRepository.findFilterPagination(doc, page, rowPage, new Document("username", -1));
break;
default:
usuarioList = usuarioRepository.findPagination(page, rowPage);
break;
}
usuarioFiltered = usuarioList;
usuarioDataModel = new UsuarioDataModel(usuarioList);
} catch (Exception e) {
JsfUtil.errorMessage("move() " + e.getLocalizedMessage());
}
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="clear">
@Override
public String clear() {
try {
loginController.put("searchusuario", "_init");
page = 1;
move();
} catch (Exception e) {
JsfUtil.errorMessage("clear()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="searchBy(String string)">
@Override
public String searchBy(String string) {
try {
loginController.put("searchusuario", string);
writable = true;
move();
} catch (Exception e) {
JsfUtil.errorMessage("searchBy()" + e.getLocalizedMessage());
}
return "";
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="completeFiltrado(String query)">
/**
* Se usa para los autocomplete filtrando
*
* @param query
* @return
*/
public List<Rol> completeFiltrado(String query) {
List<Rol> suggestions = new ArrayList<>();
List<Rol> temp = new ArrayList<>();
try {
Boolean found = false;
query = query.trim();
if (query.length() < 1) {
return suggestions;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
temp = rolRepository.findRegex(field, query, true, new Document(field, 1));
if (rolList.isEmpty()) {
if (!temp.isEmpty()) {
suggestions = temp;
}
} else {
if (!temp.isEmpty()) {
for (Rol r : temp) {
found = false;
for(Rol r2:rolList){
if(r.getIdrol().equals(r2.getIdrol())){
found=true;
}
}
if(!found){
suggestions.add(r);
}
}
}
}
//suggestions= rolRepository.findRegex(field,query,true,new Document(field,1));
} catch (Exception e) {
JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
}
return suggestions;
}
}