/* Ara - capture species and specimen data
*
* Copyright (C) 2009 INBio (Instituto Nacional de Biodiversidad)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.inbio.ara.security;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import java.util.ArrayList;
import java.util.Locale;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;
import org.inbio.ara.AraSessionBean;
import org.inbio.ara.dto.security.SystemUserDTO;
import org.inbio.ara.util.AddRemoveList;
import org.inbio.ara.util.BundleHelper;
import org.inbio.ara.util.MessageBean;
/**
* <p>Page bean that corresponds to a similarly named JSP page. This
* class contains component definitions (and initialization code) for
* all components that you have defined on this page, as well as
* lifecycle methods and event handlers where you may add behavior
* to respond to incoming events.</p>
*
* @version ListUser.java
* @version Created on 23/09/2009, 04:03:15 PM
* @author esmata
*/
public class ListUser extends AbstractPageBean {
// <editor-fold defaultstate="collapsed" desc="Managed Component Definition">
/**
* <p>Automatically managed component initialization. <strong>WARNING:</strong>
* This method is automatically generated, so any user-specified code inserted
* here is subject to being replaced.</p>
*/
private void _init() throws Exception {
}
// </editor-fold>
//Contexto utilizado para obtener el current locale
private FacesContext context;
private Locale myLocale;
//Bindings de componentes graficos
private HtmlDataTable dataTableUser = new HtmlDataTable();
private HtmlInputHidden deleteConfirmationText = new HtmlInputHidden();
//Variable que contiene los datos de la paginacion para ser mostrados en la tabla
private String quantityTotal = new String();
/**
* <p>Construct a new Page bean instance.</p>
*/
public ListUser() {
}
/**
* <p>Callback method that is called whenever a page is navigated to,
* either directly via a URL, or indirectly via page navigation.
* Customize this method to acquire resources that will be needed
* for event handlers and lifecycle methods, whether or not this
* page is performing post back processing.</p>
*
* <p>Note that, if the current request is a postback, the property
* values of the components do <strong>not</strong> represent any
* values submitted with this request. Instead, they represent the
* property values that were saved for this view when it was rendered.</p>
*/
@Override
public void init() {
// Perform initializations inherited from our superclass
super.init();
// Perform application initialization that must complete
// *before* managed components are initialized
// TODO - add your own initialiation code here
// <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
// Initialize automatically managed components
// *Note* - this logic should NOT be modified
try {
_init();
} catch (Exception e) {
log("ListUser Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
}
// </editor-fold>
// Perform application initialization that must complete
// *after* managed components are initialized
// TODO - add your own initialization code here
}
/**
* <p>Callback method that is called after the component tree has been
* restored, but before any event processing takes place. This method
* will <strong>only</strong> be called on a postback request that
* is processing a form submit. Customize this method to allocate
* resources that will be required in your event handlers.</p>
*/
@Override
public void preprocess() {
}
/**
* <p>Callback method that is called just before rendering takes place.
* This method will <strong>only</strong> be called for the page that
* will actually be rendered (and not, for example, on a page that
* handled a postback and then navigated to a different page). Customize
* this method to allocate resources that will be required for rendering
* this page.</p>
*/
@Override
public void prerender() {
//Setting the confirmation text for deleting option
this.deleteConfirmationText.setValue(BundleHelper.getDefaultBundleValue
("delete_confirmation", this.getMyLocale()));
SystemUserSessionBean susb = this.getUserSessionBean();
//Inicializar el dataprovider la primera vez (si la paginaciĆ³n es nula)
if (susb.getPagination()==null) {
susb.initDataProvider();
}
//Actualizar los datos del paginador
else
susb.getPagination().refreshList();
}
/**
* <p>Callback method that is called after rendering is completed for
* this request, if <code>init()</code> was called (regardless of whether
* or not this was the page that was actually rendered). Customize this
* method to release resources acquired in the <code>init()</code>,
* <code>preprocess()</code>, or <code>prerender()</code> methods (or
* acquired during execution of an event handler).</p>
*/
@Override
public void destroy() {
}
protected SystemUserSessionBean getUserSessionBean() {
return (SystemUserSessionBean) getBean("security$SystemUserSessionBean");
}
/**
* <p>Return a reference to the scoped data bean.</p>
*
* @return reference to the scoped data bean
*/
protected AraSessionBean getAraSessionBean() {
return (AraSessionBean) getBean("AraSessionBean");
}
/**
* @return the quantityTotal
*/
public String getQuantityTotal() {
quantityTotal = this.getUserSessionBean().getQuantityTotal();
return quantityTotal;
}
/**
* @param quantityTotal the quantityTotal to set
*/
public void setQuantityTotal(String quantityTotal) {
this.quantityTotal = quantityTotal;
}
/**
* Metodo ejecutado por los botones de editar usuarios
* @return
*/
public String btnUserEdit(){
int n = this.getDataTableUser().getRowCount();
ArrayList<SystemUserDTO> selectedUsers = new ArrayList();
for (int i = 0; i < n; i++) { //Obtener elementos seleccionados
this.getDataTableUser().setRowIndex(i);
SystemUserDTO aux = (SystemUserDTO) this.getDataTableUser().getRowData();
if (aux.isSelected()) {
selectedUsers.add(aux);
}
}
if(selectedUsers == null || selectedUsers.size() == 0){
//En caso de que no se seleccione ningun elemento
MessageBean.setErrorMessageFromBundle("not_selected", this.getMyLocale());
return null;
}
else if(selectedUsers.size() == 1){ //En caso de que solo se seleccione un elemento
//Setear el currentUser con los datos del usuario seleccionado
SystemUserDTO selected = selectedUsers.get(0);
this.getUserSessionBean().setCurrentUser(selected);
//Setear los addremove components
this.getUserSessionBean().setArNomenclaturalsEdit(new AddRemoveList());
this.getUserSessionBean().setArTaxonsEdit(new AddRemoveList());
/*Indicar a la pantalla de edit que cargue 1 sola ves los datos
seleccionados de los AddRemove*/
this.getUserSessionBean().setFirstTime(true);
return "edit";
}
else{ //En caso de que sea seleccion multiple
MessageBean.setErrorMessageFromBundle("not_yet", this.getMyLocale());
return null;
}
}
/**
* Metodo ejecutado por el boton de crear usuario
* @return
*/
public String btnUserNew(){
//Setear el currentUser
this.getUserSessionBean().setCurrentUser(new SystemUserDTO());
return "new";
}
/**
* Metodo ejecutado por los botones de eliminar usuarios
* @return
*/
public String btnUserDelete(){
int n = this.getDataTableUser().getRowCount();
ArrayList<SystemUserDTO> selectedUsers = new ArrayList();
for (int i = 0; i < n; i++) { //Obtener elementos seleccionados
this.getDataTableUser().setRowIndex(i);
SystemUserDTO aux = (SystemUserDTO) this.getDataTableUser().getRowData();
if (aux.isSelected()) {
selectedUsers.add(aux);
}
}
if(selectedUsers == null || selectedUsers.size() == 0){
//En caso de que no se seleccione ningun elemento
MessageBean.setErrorMessageFromBundle("not_selected", this.getMyLocale());
return null;
}
else if(selectedUsers.size() == 1){ //En caso de que solo se seleccione un elemento
SystemUserDTO selected = selectedUsers.get(0);
try{
//Verify if user is administrator
if(this.getUserSessionBean().isAdmin(selected.getUserId())){
MessageBean.setErrorMessageFromBundle("imposible_to_delete", this.getMyLocale());
return null;
}
//Mandar a eliminar las entradas en user_taxon
this.getUserSessionBean().deleteUserTaxonsByUser(selected.getUserId());
//Mandar a eliminar las entradas de user_nomenclatural_group
this.getUserSessionBean().deleteNomenclaturalGroupsByUser(selected.getUserId());
//Mandar a eliminar la entidad correspondiente al dto
this.getUserSessionBean().deleteSystemUser(selected);
}
catch(Exception e){
MessageBean.setErrorMessageFromBundle("imposible_to_delete", this.getMyLocale());
System.out.print("mata"+e);
return null;
}
//Refresccar la lista
this.getUserSessionBean().getPagination().refreshList();
//Notificar al usuario
MessageBean.setSuccessMessageFromBundle("delete_user_success", this.getMyLocale());
return null;
}
else{ //En caso de que sea seleccion multiple
MessageBean.setErrorMessageFromBundle("not_yet", this.getMyLocale());
return null;
}
}
/**
* Metodo ejecutado por los botones de cambiar contrasenas
* @return
*/
public String btnUserChangePassword(){
int n = this.getDataTableUser().getRowCount();
ArrayList<SystemUserDTO> selectedUsers = new ArrayList();
for (int i = 0; i < n; i++) { //Obtener elementos seleccionados
this.getDataTableUser().setRowIndex(i);
SystemUserDTO aux = (SystemUserDTO) this.getDataTableUser().getRowData();
if (aux.isSelected()) {
selectedUsers.add(aux);
}
}
if(selectedUsers == null || selectedUsers.size() == 0){
//En caso de que no se seleccione ningun elemento
MessageBean.setErrorMessageFromBundle("not_selected", this.getMyLocale());
return null;
}
else if(selectedUsers.size() == 1){ //En caso de que solo se seleccione un elemento
//Setear el currentUser con los datos del usuario seleccionado
SystemUserDTO selected = selectedUsers.get(0);
this.getUserSessionBean().setCurrentUser(selected);
return "changePass";
}
else{ //En caso de que sea seleccion multiple
MessageBean.setErrorMessageFromBundle("not_yet", this.getMyLocale());
return null;
}
}
/**
* @return the dataTableUser
*/
public HtmlDataTable getDataTableUser() {
return dataTableUser;
}
/**
* @param dataTableUser the dataTableUser to set
*/
public void setDataTableUser(HtmlDataTable dataTableUser) {
this.dataTableUser = dataTableUser;
}
/**
* @return the myLocale
*/
public Locale getMyLocale() {
return this.getAraSessionBean().getCurrentLocale();
}
/**
* @return the deleteConfirmationText
*/
public HtmlInputHidden getDeleteConfirmationText() {
return deleteConfirmationText;
}
/**
* @param deleteConfirmationText the deleteConfirmationText to set
*/
public void setDeleteConfirmationText(HtmlInputHidden deleteConfirmationText) {
this.deleteConfirmationText = deleteConfirmationText;
}
}