/*
* Ara - Capture Species and Specimen Data
*
* Copyright © 2009 INBio (Instituto Nacional de Biodiversidad).
* Heredia, Costa Rica.
*
* 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 com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.model.Option;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.faces.FacesException;
import javax.faces.context.FacesContext;
import javax.faces.convert.CharacterConverter;
import org.inbio.ara.AraSessionBean;
import org.inbio.ara.dto.inventory.TaxonDTO;
import org.inbio.ara.dto.security.NomenclaturalGroupDTO;
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 EditUser.java
* @version Created on 23/09/2009, 05:24:10 PM
* @author esmata
*/
public class EditUser 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;
//Binding de los componentes graficos
private TextField txFullname = new TextField();
private TextField txUsename = new TextField();
private CharacterConverter characterConverter1 = new CharacterConverter();
public CharacterConverter getCharacterConverter1() {
return characterConverter1;
}
public void setCharacterConverter1(CharacterConverter cc) {
this.characterConverter1 = cc;
}
private CharacterConverter characterConverter2 = new CharacterConverter();
public CharacterConverter getCharacterConverter2() {
return characterConverter2;
}
public void setCharacterConverter2(CharacterConverter cc) {
this.characterConverter2 = cc;
}
/**
* <p>Construct a new Page bean instance.</p>
*/
public EditUser() {
}
/**
* <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("EditUser 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() {
SystemUserSessionBean usb = this.getUserSessionBean();
//Cargar datos de los add remove
loadAddRemoveData();
if(this.getUserSessionBean().isFirstTime()){
//Cargar datos de los campos de texto
this.txFullname.setText(usb.getCurrentUser().getFullname());
this.txUsename.setText(usb.getCurrentUser().getUsername());
//Cargar datos seleccionados de los add remove
loadAddRemoveSelectedData();
this.getUserSessionBean().setFirstTime(false);
}
}
/**
* <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");
}
/**
* Metodo encargado de cargar los datos de los distintos add remove de la
* ventana de editar usuario, carga las opciones dispinibles disponibles
*/
private void loadAddRemoveData(){
SystemUserSessionBean usb = this.getUserSessionBean();
//Cargar datos del add remove de taxones (Disponibles)
if (usb.getArTaxonsEdit().getAvailableOptions() == null ||
usb.getArTaxonsEdit().getAvailableOptions().length == 0) {
List<TaxonDTO> taxonList = usb.getTaxonsData();
List<Option> list = new ArrayList<Option>();
for (TaxonDTO myDTO : taxonList) {
list.add(new Option(myDTO.getTaxonKey(), myDTO.getCurrentName()));
}
usb.getArTaxonsEdit().setAvailableOptions(list.toArray(new Option[list.size()]));
}
//Cargar los datos del add remove de grupos nomenclaturales (Disponibles)
if (usb.getArNomenclaturalsEdit().getAvailableOptions() == null ||
usb.getArNomenclaturalsEdit().getAvailableOptions().length == 0) {
List<NomenclaturalGroupDTO> nomenclaturalList = usb.getAllNomenclaturalGroup();
List<Option> list = new ArrayList<Option>();
for (NomenclaturalGroupDTO myDTO : nomenclaturalList) {
list.add(new Option(myDTO.getNomenclaturalGroupId(), myDTO.getName()));
}
usb.getArNomenclaturalsEdit().setAvailableOptions(list.toArray
(new Option[list.size()]));
}
//Setea los labels del componente add remove
usb.getArTaxonsEdit().setLbTitle(BundleHelper.getDefaultBundleValue
("taxons", this.getMyLocale()));
usb.getArTaxonsEdit().setLbAvailable(BundleHelper.getDefaultBundleValue
("available", this.getMyLocale()));
usb.getArTaxonsEdit().setLbSelected(BundleHelper.getDefaultBundleValue
("selected", this.getMyLocale()));
usb.getArNomenclaturalsEdit().setLbTitle(BundleHelper.getDefaultBundleValue
("nomenclatural_groups", this.getMyLocale()));
usb.getArNomenclaturalsEdit().setLbAvailable(BundleHelper.getDefaultBundleValue
("available", this.getMyLocale()));
usb.getArNomenclaturalsEdit().setLbSelected(BundleHelper.getDefaultBundleValue
("selected", this.getMyLocale()));
}
/**
* Metodo encargado de cargar los datos de los distintos add remove de la
* ventana de editar usuario, carga los seleccionados segun el
* currenUserDTO para edicion
*/
private void loadAddRemoveSelectedData(){
SystemUserSessionBean usb = this.getUserSessionBean();
Long user = usb.getCurrentUser().getUserId();
//Cargar datos del add remove de taxones (Seleccionados)
List<TaxonDTO> taxonList = usb.getTaxonListByUser(user);
List<Long> list = new ArrayList<Long>();
for (TaxonDTO myDTO : taxonList) {
list.add(myDTO.getTaxonKey());
}
usb.getArTaxonsEdit().setSelectedOptions(list.toArray(new Long[list.size()]));
//Cargar los datos del add remove de grupos nomenclaturales (Seleccionados)
List<NomenclaturalGroupDTO> nomenclaturalList =
usb.getNomenclaturalGroupListByUser(user);
List<Long> listN = new ArrayList<Long>();
for (NomenclaturalGroupDTO myDTO : nomenclaturalList) {
listN.add(myDTO.getNomenclaturalGroupId());
}
usb.getArNomenclaturalsEdit().setSelectedOptions
(listN.toArray(new Long[listN.size()]));
}
/**
* @return the myLocale
*/
public Locale getMyLocale() {
return this.getAraSessionBean().getCurrentLocale();
}
/**
* @return the txFullname
*/
public TextField getTxFullname() {
return txFullname;
}
/**
* @param txFullname the txFullname to set
*/
public void setTxFullname(TextField txFullname) {
this.txFullname = txFullname;
}
/**
* @return the txUsename
*/
public TextField getTxUsename() {
return txUsename;
}
/**
* @param txUsename the txUsename to set
*/
public void setTxUsename(TextField txUsename) {
this.txUsename = txUsename;
}
/**
* Metodo ejecutado por el boton de editar usuario
* @return
*/
public String btnSaveUser_action() {
SystemUserSessionBean usb = this.getUserSessionBean();
//Obtener nuevos valores
String fullName=null,userName=null;
fullName = (String)this.getTxFullname().getText();
userName = (String)this.getTxUsename().getText();
//Setear el DTO con los nuevos valores
usb.getCurrentUser().setFullname(fullName);
usb.getCurrentUser().setUsername(userName);
try{
//Persistir el DTO
usb.updateSystemUser();
//Obtener las listas de taxones y grupos
Long[] taxonList = usb.getArTaxonsEdit().getSelectedOptions();
Long[] nomenclaturalList = usb.getArNomenclaturalsEdit().
getSelectedOptions();
//Borrar de la bd dichas listas
usb.deleteNomenclaturalGroupsByUser(usb.getCurrentUser().getUserId());
usb.deleteUserTaxonsByUser(usb.getCurrentUser().getUserId());
//Actualizar en la bd dichas listas
Long user = usb.getCurrentUser().getUserId();
Long secuence = new Long(1);
int arrayLength = 0;
if(taxonList != null){
arrayLength = taxonList.length;
for(int i = 0; i < arrayLength; i++){
usb.saveUserTaxon(taxonList[i],user, secuence);
secuence++;
}
}
if(nomenclaturalList != null){
arrayLength = nomenclaturalList.length;
for(int i = 0; i < arrayLength; i++){
usb.saveUserNomenclaturalGroup
(nomenclaturalList[i],user, secuence);
secuence++;
}
}
}
catch(Exception e){
MessageBean.setErrorMessageFromBundle("error", this.getMyLocale());
return null;
}
//Refrescar el data provider del paginador
this.getUserSessionBean().getPagination().refreshList();
//Notificar al usuario
MessageBean.setSuccessMessageFromBundle("updated_succes",
this.getMyLocale());
return null;
}
}