/* * 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.inventory; import com.sun.rave.web.ui.appbase.AbstractSessionBean; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.faces.FacesException; import org.inbio.ara.AraSessionBean; import org.inbio.ara.dto.agent.CollectionDTO; import org.inbio.ara.dto.gis.GeographicLayerDTO; import org.inbio.ara.dto.gis.SiteDTO; import org.inbio.ara.dto.inventory.GatheringObservationDTO; import org.inbio.ara.dto.inventory.PersonDTO; import org.inbio.ara.dto.inventory.ProjectDTO; import org.inbio.ara.dto.inventory.SelectionListDTO; import org.inbio.ara.facade.agent.AdminFacadeRemote; import org.inbio.ara.facade.gis.GisFacadeRemote; import org.inbio.ara.facade.inventory.InventoryFacadeRemote; import org.inbio.ara.facade.search.SearchFacadeRemote; import org.inbio.ara.util.AddRemoveList; import org.inbio.ara.util.PaginationControllerRemix; import org.inbio.ara.util.PaginationCoreInterface; /** * <p>Session scope data bean for your application. Create properties * here to represent cached data that should be made available across * multiple HTTP requests for an individual user.</p> * * <p>An instance of this class will be created for you automatically, * the first time your application evaluates a value binding expression * or method binding expression that references a managed bean using * this class.</p> * * @version GatheringSessionBean.java * @version Created on 17/08/2009, 05:14:08 PM * @author esmata */ public class GatheringSessionBean extends AbstractSessionBean implements Serializable, PaginationCoreInterface { // <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> //Injections @EJB private InventoryFacadeRemote inventoryFacade; @EJB private GisFacadeRemote gisFacade; @EJB private SearchFacadeRemote searchFacade; @EJB private AdminFacadeRemote adminFacade; //Objeto que controla la paginacion de la informacion de passport private PaginationControllerRemix pagination = null; //Entero que indica la cantidad de elementos que el usuario desea mostrar en los resultados private int quantity = 10; //Por defecto se mostraran 10 elementos //Value binding para los drop downs private Long selectedCountry = null; private Long selectedProvince = null; private Long selectedExposition = null; private Long selectedLocality = null; private Long selectedResponsible = null; //Bandera para saber si se utiliza o no detalles de recoleccion private boolean useDetail = false; //Bandera para saber si se activo el panel de busqueda avanzada private boolean advancedSearch = false; //Bandera para indicarle al paginador que trabaje en modo busqueda avanzada private boolean queryMode = false; //Bandera para indicarle al paginador que trabaje en modo busqueda simple private boolean queryModeSimple = false; //Gatthering observation DTO utilizado para realizar las consultas private GatheringObservationDTO queryGatheringDTO = new GatheringObservationDTO(); //String que indica la consulta del usuario en la busqueda simple private String consultaSimple = new String(""); //Objeto AddRemoveList para manejar los valores del tab de colectores (ventana new gathering) private AddRemoveList arCollectors = new AddRemoveList(); //Objeto AddRemoveList para manejar los valores del tab de proyectos (ventana new gathering) private AddRemoveList arProjects = new AddRemoveList(); //Objeto AddRemoveList para manejar los valores del tab de colecciones (ventana new gathering) private AddRemoveList arCollections = new AddRemoveList(); //Objeto AddRemoveList para manejar los valores del tab de colectores (ventana edit gathering) private AddRemoveList arCollectorsEdit = new AddRemoveList(); //Objeto AddRemoveList para manejar los valores del tab de proyectos (ventana edit gathering) private AddRemoveList arProjectsEdit = new AddRemoveList(); //Objeto AddRemoveList para manejar los valores del tab de colecciones (ventana edit gathering) private AddRemoveList arCollectionsEdit = new AddRemoveList(); //Current GatheringObservationDTO utilizado en la ventana de edicion private GatheringObservationDTO currentGatheringDTO = new GatheringObservationDTO(); /* Variables para almacenar los datos de los drop downs y de los add remove, esto * con el fin de no recalcularlos cada vez que se cambia de tab */ private List<SelectionListDTO> expositionData = null; private List<PersonDTO> responsibleData = null; private List<SiteDTO> localityData = null; private List<CollectionDTO> collectionData = null; private List<PersonDTO> colectorData = null; private List<ProjectDTO> projectData = null; /** * Bandera muy importante para el correcto funcionamiento de los * AddRemove components de la pantalla de editar * Le indica al prerender de la pantalla de edit que cargue los * datos seleccionados de los AddRemove solamnete UNA vez * true = cargar datos * false = ignorar la carga de datos seleccionados */ private boolean firstTime = true; /** * <p>Construct a new session data bean instance.</p> */ public GatheringSessionBean() { } /** * <p>This method is called when this bean is initially added to * session scope. Typically, this occurs as a result of evaluating * a value binding or method binding expression, which utilizes the * managed bean facility to instantiate this bean and store it into * session scope.</p> * * <p>You may customize this method to initialize and cache data values * or resources that are required for the lifetime of a particular * user session.</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("GatheringSessionBean 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>This method is called when the session containing it is about to be * passivated. Typically, this occurs in a distributed servlet container * when the session is about to be transferred to a different * container instance, after which the <code>activate()</code> method * will be called to indicate that the transfer is complete.</p> * * <p>You may customize this method to release references to session data * or resources that can not be serialized with the session itself.</p> */ @Override public void passivate() { } /** * <p>This method is called when the session containing it was * reactivated.</p> * * <p>You may customize this method to reacquire references to session * data or resources that could not be serialized with the * session itself.</p> */ @Override public void activate() { } /** * <p>This method is called when this bean is removed from * session scope. Typically, this occurs as a result of * the session timing out or being terminated by the application.</p> * * <p>You may customize this method to clean up resources allocated * during the execution of the <code>init()</code> method, or * at any later time during the lifetime of the application.</p> */ @Override public void destroy() { } /** * Obtener los datos para los drop downs de listas de seleccion */ public List<SelectionListDTO> setSelectionListDropDownData(Long selectionListEntityId, Long collection) { return this.inventoryFacade.getAllSelectionListElementsByCollection(selectionListEntityId, collection); } /** * La idea de este metodo es poder preguntar si determinado protocolo esta activado o no * para una determinada colleccion * @param collectionId * @param protocolAtributeId * @param value corresponde a alguno de los valores posibles para saber si el protocolo esta * "activado" o "desactivado" * @return */ public boolean matchCollectionProtocol(Long collectionId, Long protocolAtributeId, String value) { return this.inventoryFacade.matchCollectionProtocol(collectionId, protocolAtributeId, value); } /** * Obtener los datos para el drop down de exposition */ public List<SelectionListDTO> setExpositionDropDownData(Long selectionListEntityId, Long collection) { /*if (this.getExpositionData() == null) { this.setExpositionData(setSelectionListDropDownData(selectionListEntityId, collection)); return this.getExpositionData(); } else { return this.getExpositionData(); }*/ return setSelectionListDropDownData(selectionListEntityId, collection); } /** * Obtener los datos para el drop down de colecciones */ public List<CollectionDTO> SetCollectionDropDownData() { /*if (this.getCollectionData() == null) { this.setCollectionData(adminFacade.getAllCollections()); return this.getCollectionData(); } else { return this.getCollectionData(); }*/ return adminFacade.getAllCollections(); } /** * Obtener los datos para el drop down de responsables */ public List<PersonDTO> SetResponsibleDropDownData() { /*if (this.getResponsibleData() == null) { this.setResponsibleData(inventoryFacade.getAllResponsibles()); return this.getResponsibleData(); } else { return this.getResponsibleData(); }*/ return inventoryFacade.getAllResponsibles(); } /** * Obtener los datos para el drop down de colectores */ public List<PersonDTO> SetColectorsDropDownData() { /*if (this.getColectorData() == null) { this.setColectorData(inventoryFacade.getAllColectors()); return this.getColectorData(); } else { return this.getColectorData(); }*/ return inventoryFacade.getAllColectors(); } /** * Obtener los datos para el drop down de proyectos */ public List<ProjectDTO> SetProjectsDropDownData() { /*if (this.getProjectData() == null) { this.setProjectData(inventoryFacade.getAllProjects()); return this.getProjectData(); } else { return this.getProjectData(); }*/ return inventoryFacade.getAllProjects(); } /** * Obtener los datos para el drop down de sitios */ public List<SiteDTO> SetSitesDropDownData() { /*if (this.getLocalityData() == null) { this.setLocalityData(gisFacade.getAllSites()); return this.getLocalityData(); } else { return this.getLocalityData(); }*/ return gisFacade.getAllSites(); } /** * Inicializar el data provider de especimenes */ public void initDataProvider() { Long collectionId = getAraSessionBean().getGlobalCollectionId(); this.setPagination(new PaginationControllerRemix(getInventoryFacade().countGatheringObservations(collectionId).intValue(), getQuantity(), this)); this.getPagination().firstResults(); } /** * Obtener los datos para el drop down de paises */ public List<GeographicLayerDTO> SetCountryDropDownData() { return this.getGisFacade().getAllCountries(); } /** * Metodo ejecutado por el drop down de paises para calcular las provincias correspondientes */ public List<GeographicLayerDTO> SetProvincesDropDownData() { if (this.getSelectedCountry() == null) { return null; } else { Long countryid = new Long(this.getSelectedCountry()); return this.gisFacade.getProvincesByCountry(countryid); } } /** * @return un String que contiene el detalle de la paginacion */ public String getQuantityTotal() { int actualPage = this.getPagination().getActualPage(); int resultsPerPage = this.getPagination().getResultsPerPage(); int totalResults = this.getPagination().getTotalResults(); return " " + (actualPage + 1) + " - " + (actualPage + resultsPerPage) + " | " + totalResults + " "; } /** * @return the advancedSearch */ public boolean isAdvancedSearch() { return advancedSearch; } /** * @param advancedSearch the advancedSearch to set */ public void setAdvancedSearch(boolean advancedSearch) { this.advancedSearch = advancedSearch; } /** * @return the inventoryFacade */ public InventoryFacadeRemote getInventoryFacade() { return inventoryFacade; } /** * @param inventoryFacade the inventoryFacade to set */ public void setInventoryFacade(InventoryFacadeRemote inventoryFacade) { this.inventoryFacade = inventoryFacade; } /** * @return the quantity */ public int getQuantity() { return quantity; } /** * @param quantity the quantity to set */ public void setQuantity(int quantity) { this.quantity = quantity; } /** * @return the selectedCountry */ public Long getSelectedCountry() { return selectedCountry; } /** * @param selectedCountry the selectedCountry to set */ public void setSelectedCountry(Long selectedCountry) { this.selectedCountry = selectedCountry; } /** * @return the selectedProvince */ public Long getSelectedProvince() { return selectedProvince; } /** * @param selectedProvince the selectedProvince to set */ public void setSelectedProvince(Long selectedProvince) { this.selectedProvince = selectedProvince; } /** * @return the gisFacade */ public GisFacadeRemote getGisFacade() { return gisFacade; } /** * @param gisFacade the gisFacade to set */ public void setGisFacade(GisFacadeRemote gisFacade) { this.gisFacade = gisFacade; } /** * @return the queryGatheringDTO */ public GatheringObservationDTO getQueryGatheringDTO() { return queryGatheringDTO; } /** * @param queryGatheringDTO the queryGatheringDTO to set */ public void setQueryGatheringDTO(GatheringObservationDTO queryGatheringDTO) { this.queryGatheringDTO = queryGatheringDTO; } /** * @return the queryMode */ public boolean isQueryMode() { return queryMode; } /** * @param queryMode the queryMode to set */ public void setQueryMode(boolean queryMode) { this.queryMode = queryMode; } /** * @return the queryModeSimple */ public boolean isQueryModeSimple() { return queryModeSimple; } /** * @param queryModeSimple the queryModeSimple to set */ public void setQueryModeSimple(boolean queryModeSimple) { this.queryModeSimple = queryModeSimple; } /** * @return the searchFacade */ public SearchFacadeRemote getSearchFacade() { return searchFacade; } /** * @param searchFacade the searchFacade to set */ public void setSearchFacade(SearchFacadeRemote searchFacade) { this.searchFacade = searchFacade; } /** * @return the consultaSimple */ public String getConsultaSimple() { return consultaSimple; } /** * @param consultaSimple the consultaSimple to set */ public void setConsultaSimple(String consultaSimple) { this.consultaSimple = consultaSimple; } /** * @return the arCollectors */ public AddRemoveList getArCollectors() { return arCollectors; } /** * @param arCollectors the arCollectors to set */ public void setArCollectors(AddRemoveList arCollectors) { this.arCollectors = arCollectors; } /** * @return the arProjects */ public AddRemoveList getArProjects() { return arProjects; } /** * @param arProjects the arProjects to set */ public void setArProjects(AddRemoveList arProjects) { this.arProjects = arProjects; } /** * @return the arCollections */ public AddRemoveList getArCollections() { return arCollections; } /** * @param arCollections the arCollections to set */ public void setArCollections(AddRemoveList arCollections) { this.arCollections = arCollections; } /** * @return the arCollectorsEdit */ public AddRemoveList getArCollectorsEdit() { return arCollectorsEdit; } /** * @param arCollectorsEdit the arCollectorsEdit to set */ public void setArCollectorsEdit(AddRemoveList arCollectorsEdit) { this.arCollectorsEdit = arCollectorsEdit; } /** * @return the arProjectsEdit */ public AddRemoveList getArProjectsEdit() { return arProjectsEdit; } /** * @param arProjectsEdit the arProjectsEdit to set */ public void setArProjectsEdit(AddRemoveList arProjectsEdit) { this.arProjectsEdit = arProjectsEdit; } /** * @return the arCollectionsEdit */ public AddRemoveList getArCollectionsEdit() { return arCollectionsEdit; } /** * @param arCollectionsEdit the arCollectionsEdit to set */ public void setArCollectionsEdit(AddRemoveList arCollectionsEdit) { this.arCollectionsEdit = arCollectionsEdit; } /** * @return the selectedExposition */ public Long getSelectedExposition() { return selectedExposition; } /** * @param selectedExposition the selectedExposition to set */ public void setSelectedExposition(Long selectedExposition) { this.selectedExposition = selectedExposition; } /** * @return the selectedResponsible */ public Long getSelectedResponsible() { return selectedResponsible; } /** * @param selectedResponsible the selectedResponsible to set */ public void setSelectedResponsible(Long selectedResponsible) { this.selectedResponsible = selectedResponsible; } /** * @return the selectedLocality */ public Long getSelectedLocality() { return selectedLocality; } /** * @param selectedLocality the selectedLocality to set */ public void setSelectedLocality(Long selectedLocality) { this.selectedLocality = selectedLocality; } /** * @return the currentGatheringDTO */ public //Current GatheringObservationDTO utilizado en la ventana de edicion GatheringObservationDTO getCurrentGatheringDTO() { return currentGatheringDTO; } /** * @param currentGatheringDTO the currentGatheringDTO to set */ public void setCurrentGatheringDTO(GatheringObservationDTO currentGatheringDTO) { this.currentGatheringDTO = currentGatheringDTO; } /** * @return the expositionData */ public /* Variables para almacenar los datos de los drop downs y de los add remove, esto * con el fin de no recalcularlos cada vez que se cambia de tab */ List<SelectionListDTO> getExpositionData() { return expositionData; } /** * @param expositionData the expositionData to set */ public void setExpositionData(List<SelectionListDTO> expositionData) { this.expositionData = expositionData; } /** * @return the responsibleData */ public List<PersonDTO> getResponsibleData() { return responsibleData; } /** * @param responsibleData the responsibleData to set */ public void setResponsibleData(List<PersonDTO> responsibleData) { this.responsibleData = responsibleData; } /** * @return the localityData */ public List<SiteDTO> getLocalityData() { return localityData; } /** * @param localityData the localityData to set */ public void setLocalityData(List<SiteDTO> localityData) { this.localityData = localityData; } /** * @return the collectionData */ public List<CollectionDTO> getCollectionData() { return collectionData; } /** * @param collectionData the collectionData to set */ public void setCollectionData(List<CollectionDTO> collectionData) { this.collectionData = collectionData; } /** * @return the colectorData */ public List<PersonDTO> getColectorData() { return colectorData; } /** * @param colectorData the colectorData to set */ public void setColectorData(List<PersonDTO> colectorData) { this.colectorData = colectorData; } /** * @return the projectData */ public List<ProjectDTO> getProjectData() { return projectData; } /** * @param projectData the projectData to set */ public void setProjectData(List<ProjectDTO> projectData) { this.projectData = projectData; } /** * @return the useDetail */ public boolean isUseDetail() { return useDetail; } /** * @param useDetail the useDetail to set */ public void setUseDetail(boolean useDetail) { this.useDetail = useDetail; } /** * @return the firstTime */ public boolean isFirstTime() { return firstTime; } /** * @param firstTime the firstTime to set */ public void setFirstTime(boolean firstTime) { this.firstTime = firstTime; } /** * Para evitar que retorne null al data provider del paginador * @param l lista retornada para el paginador * @return */ public List myReturn(List l) { if (l == null) { return new ArrayList<GatheringObservationDTO>(); } else { return l; } } /** * <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 pagination */ public PaginationControllerRemix getPagination() { return pagination; } /** * @param pagination the pagination to set */ public void setPagination(PaginationControllerRemix pagination) { this.pagination = pagination; } public List getResults(int firstResult, int maxResults) { Long collectionId = getAraSessionBean().getGlobalCollectionId(); List<GatheringObservationDTO> auxResult = new ArrayList<GatheringObservationDTO>(); if (isQueryMode()) { //En caso de que sea busqueda avanzada //Set the collectionId into the DTO //It is a mandatory filter GatheringObservationDTO gdto = getQueryGatheringDTO(); gdto.setCollectionId(collectionId); //Used to filter by collection try { getPagination().setTotalResults(getSearchFacade().countGathObsByCriteria(gdto).intValue()); return myReturn(searchFacade.searchGathObsByCriteria(gdto, firstResult, maxResults)); } catch (Exception e) { return auxResult; } } else if (isQueryModeSimple()) { //En caso de que sea busqueda simple try { getPagination().setTotalResults(getSearchFacade().countGathObsByCriteria(getConsultaSimple(),collectionId).intValue()); return myReturn(searchFacade. searchGathObsByCriteria(getConsultaSimple(), collectionId, firstResult, maxResults)); } catch (Exception e) { return auxResult; } } else //Valores default { try { getPagination().setTotalResults(getInventoryFacade().countGatheringObservations(collectionId).intValue()); return myReturn(getInventoryFacade().getAllGatheringObservationPaginated(firstResult, maxResults, collectionId)); } catch (Exception e) { return auxResult; } } } public List<PersonDTO> getPersonByFilterProfile(Long profileId, String filter) { return this.getInventoryFacade().getPersonByFilterProfile(profileId, filter); } public String getSiteDescriptionById(Long siteId) { return gisFacade.getSiteDescriptionById(siteId); } public String getPersonById(Long personId) { return inventoryFacade.getPersonById(personId); } }