/* 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.gis; import com.sun.rave.web.ui.appbase.AbstractSessionBean; 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.gis.*; import org.inbio.ara.dto.inventory.GatheringObservationDTO; 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.facade.taxonomy.TaxonomyFacadeRemote; 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 SiteSessionBean.java * @version Created on 14/09/2009, 05:11:28 PM * @author mvargas */ public class SiteSessionBean extends AbstractSessionBean implements 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 GisFacadeRemote gisFacade; @EJB private SearchFacadeRemote searchFacade; @EJB private TaxonomyFacadeRemote taxonFacade; @EJB private InventoryFacadeRemote inventoryFacade; //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 //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; //Bandera que indica si el sitio es valido para ser persistido private boolean siteValid = true; //Value binding for drop downs de busquedas private Long selectedCountry = null; private Long selectedProvince = null; private Long selectedDiscarded; //Value binding for drop down de creacion de sitios private Long selectedType = null; private Long selectedBaseProjection = null; private Long selectedDeterminationMethod = null; private Long selectedOriginProjection = null; private Long selectedCountryId = null; private Long selectedProvinceId = null; private Long selectedProjection = null; private int selectedWgs84Format = 0; //Site DTO seleccionado por el usuario para editar private SiteDTO currentSiteDTO = new SiteDTO(); //SiteDTO que sera convertido en entidad y sera persistido private SiteDTO querySiteDTO = new SiteDTO(); //String que indica la consulta del usuario en la busqueda simple private String consultaSimple = new String(""); //Data provider para las coordenadas del sitio private List<SiteCoordinateDTO> coordinateDataProvider = new ArrayList<SiteCoordinateDTO>(); private Long INVALID_VALUE_ID = new Long(-1); /** * Le indica al prerender de la pantalla de edit que cargue los * datos actuales solamnete UNA vez * true = cargar datos * false = ignorar la carga de datos seleccionados */ private boolean firstTime = true; private boolean wgs84Projection = true; private List<GeoreferencedDTO> georeferencedSites = new ArrayList<GeoreferencedDTO>(); /** * <p>Construct a new session data bean instance.</p> */ public SiteSessionBean() { } /** * <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 setSelectedDiscarded(new Long(1)); // <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("SiteSessionBean 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() { } protected AraSessionBean getAraSessionBean() { return (AraSessionBean) getBean("AraSessionBean"); } //*************** Operaciones del data provider de coordenadas ***************** public boolean addElement(SiteCoordinateDTO object) { if (objectExists(object)==false) { this.getCoordinateDataProvider().add(object); return true; } else { return false; } } public boolean objectExists(SiteCoordinateDTO object) { //List<LifeStageSexSimple> tList = this.getList(); List<SiteCoordinateDTO> tList = this.getCoordinateDataProvider(); //Long newLifeStageId = object.getLifeStage().getId(); Double longitude = object.getLongitude(); //Long newSexId = object.getSex().getId(); Double latitude = object.getLatitude(); for (SiteCoordinateDTO tObject : tList) { if (tObject.getLongitude().compareTo(longitude)== 0) { if (tObject.getLatitude().compareTo(latitude)==0) { return true; } } } return false; } //****************************************************************************** /** * Guardar el nuevo sitio, sus coordenadas y division politica */ public void saveNewSite(){ this.getCurrentSiteDTO().setUserName(this.getAraSessionBean().getGlobalUserName()); SiteDTO newDTO = this.getGisFacade().saveNewSite(this.getCurrentSiteDTO(), this.getCoordinateDataProvider(), getGeoreferencedSitePKListForCreate()); this.setCurrentSiteDTO(newDTO); } /** * Actualizar el sitio, sus coordenadas y division politica */ public void updateNewSite(){ SiteDTO newDTO = this.getGisFacade().updateSite(this.getCurrentSiteDTO(), this.getCoordinateDataProvider(), getGeoreferencedSitePKListForCreate()); this.setCurrentSiteDTO(newDTO); } /** * Metodo para eliminar Localidades por su id * @param Id */ public void deleteSite(Long Id){ this.gisFacade.deleteSite(Id); } /** * Devuelve la lista de GeoreferencedSitePKDTO con el siteId en null. * @return */ public List<GeoreferencedSitePKDTO> getGeoreferencedSitePKListForCreate(){ List<GeoreferencedSitePKDTO> gsPKs = new ArrayList<GeoreferencedSitePKDTO>(); if (!getSelectedProvinceId().equals(INVALID_VALUE_ID)){ GeoreferencedSitePKDTO auxProvince = new GeoreferencedSitePKDTO(); auxProvince.setSiteId(null); auxProvince.setGeographicLayerId(getGisFacade().PROVINCE_LAYER); auxProvince.setGeographicSiteId(selectedProvinceId); auxProvince.setUserName(this.getAraSessionBean().getGlobalUserName()); gsPKs.add(auxProvince); } if (!getSelectedCountryId().equals(INVALID_VALUE_ID)){ GeoreferencedSitePKDTO auxCountry = new GeoreferencedSitePKDTO(); auxCountry.setSiteId(null); auxCountry.setGeographicLayerId(getGisFacade().COUNTRY_LAYER); auxCountry.setGeographicSiteId(selectedCountryId); auxCountry.setUserName(this.getAraSessionBean().getGlobalUserName()); gsPKs.add(auxCountry); } return gsPKs; } /** * Inicializar el data provider de especimenes */ public void initDataProvider() { this.setPagination(new PaginationControllerRemix(this.getGisFacade().countSites().intValue(), getQuantity(), this)); this.getPagination().firstResults(); } /** * * @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 quantity */ public //Entero que indica la cantidad de elementos que el usuario desea mostrar en los resultados int getQuantity() { return quantity; } /** * @param quantity the quantity to set */ public void setQuantity(int quantity) { this.quantity = quantity; } /** * @return the advancedSearch */ public boolean isAdvancedSearch() { return advancedSearch; } /** * 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); } } /** * Obtener los datos para el drop down de paises */ public List<GeographicLayerDTO> SetCountryDropDownData() { return this.gisFacade.getAllCountries(); } public List<String> getDefaultNameByGathObsId(Long gathObsId) { return this.taxonFacade.getDefaultNameByGathObsId(gathObsId); } public List<GatheringObservationDTO> getGathObsBySideId(Long siteId) { return this.inventoryFacade.getGathObsBySiteId(siteId); } /** * @param advancedSearch the advancedSearch to set */ public void setAdvancedSearch(boolean advancedSearch) { this.advancedSearch = advancedSearch; } /** * @return the gisFacade */ public GisFacadeRemote getGisFacade() { return gisFacade; } /** * @param gisFacade the gisFacade to set */ public void setGisFacade(GisFacadeRemote gisFacade) { this.gisFacade = gisFacade; } /** * @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 currentSiteDTO */ public SiteDTO getCurrentSiteDTO() { return currentSiteDTO; } /** * @param currentSiteDTO the currentSiteDTO to set */ public void setCurrentSiteDTO(SiteDTO currentSiteDTO) { this.currentSiteDTO = currentSiteDTO; } /** * @return the querySiteDTO */ public SiteDTO getQuerySiteDTO() { return querySiteDTO; } /** * @param querySiteDTO the querySiteDTO to set */ public void setQuerySiteDTO(SiteDTO querySiteDTO) { this.querySiteDTO = querySiteDTO; } /** * @return the queryMode */ public boolean isQueryMode() { return queryMode; } /** * @param queryMode the queryMode to set */ public void setQueryMode(boolean queryMode) { this.queryMode = queryMode; } /** * @return the selectedDiscarded */ public Long getSelectedDiscarded() { return selectedDiscarded; } /** * @param selectedDiscarded the selectedDiscarded to set */ public void setSelectedDiscarded(Long selectedDiscarded) { this.selectedDiscarded = selectedDiscarded; } /** * @return the queryModeSimple */ public boolean isQueryModeSimple() { return queryModeSimple; } /** * @param queryModeSimple the queryModeSimple to set */ public void setQueryModeSimple(boolean queryModeSimple) { this.queryModeSimple = queryModeSimple; } /** * @return the consultaSimple */ public String getConsultaSimple() { return consultaSimple; } /** * @param consultaSimple the consultaSimple to set */ public void setConsultaSimple(String consultaSimple) { this.consultaSimple = consultaSimple; } /** * @return the siteValid */ public boolean isSiteValid() { return siteValid; } /** * @param siteValid the siteValid to set */ public void setSiteValid(boolean siteValid) { this.siteValid = siteValid; } /** * @return the searchFacade */ public SearchFacadeRemote getSearchFacade() { return searchFacade; } /** * @param searchFacade the searchFacade to set */ public void setSearchFacade(SearchFacadeRemote searchFacade) { this.searchFacade = searchFacade; } /** * @return the selectedType */ public Long getSelectedType() { return selectedType; } /** * @param selectedType the selectedType to set */ public void setSelectedType(Long selectedType) { this.selectedType = selectedType; } /** * @return the selectedBaseProjection */ public Long getSelectedBaseProjection() { return selectedBaseProjection; } /** * @param selectedBaseProjection the selectedBaseProjection to set */ public void setSelectedBaseProjection(Long selectedBaseProjection) { this.selectedBaseProjection = selectedBaseProjection; } /** * @return the selectedDeterminationMethod */ public Long getSelectedDeterminationMethod() { return selectedDeterminationMethod; } /** * @param selectedDeterminationMethod the selectedDeterminationMethod to set */ public void setSelectedDeterminationMethod(Long selectedDeterminationMethod) { this.selectedDeterminationMethod = selectedDeterminationMethod; } /** * @return the selectedOriginProjection */ public Long getSelectedOriginProjection() { return selectedOriginProjection; } /** * @param selectedOriginProjection the selectedOriginProjection to set */ public void setSelectedOriginProjection(Long selectedOriginProjection) { this.selectedOriginProjection = selectedOriginProjection; } /** * @return the coordinateDataProvider */ public List<SiteCoordinateDTO> getCoordinateDataProvider() { return coordinateDataProvider; } /** * @param coordinateDataProvider the coordinateDataProvider to set */ public void setCoordinateDataProvider(List<SiteCoordinateDTO> coordinateDataProvider) { this.coordinateDataProvider = coordinateDataProvider; } /** * @return the selectedCountryId */ public Long getSelectedCountryId() { return selectedCountryId; } /** * @param selectedCountryId the selectedCountryId to set */ public void setSelectedCountryId(Long selectedCountryId) { this.selectedCountryId = selectedCountryId; } /** * @return the selectedProvinceId */ public Long getSelectedProvinceId() { return selectedProvinceId; } /** * @param selectedProvinceId the selectedProvinceId to set */ public void setSelectedProvinceId(Long selectedProvinceId) { this.selectedProvinceId = selectedProvinceId; } /** * @return the firstTime */ public boolean isFirstTime() { return firstTime; } /** * @param firstTime the firstTime to set */ public void setFirstTime(boolean firstTime) { this.firstTime = firstTime; } /** * @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) { if(isQueryMode()){ //En caso de que sea busqueda avanzada getPagination().setTotalResults(getSearchFacade().countSitesByCriteria(getQuerySiteDTO()).intValue()); return searchFacade.searchSiteByCriteria(getQuerySiteDTO(), firstResult, maxResults); } else if(isQueryModeSimple()){ //En caso de que sea busqueda simple getPagination().setTotalResults(getSearchFacade().countSitesByCriteria(getConsultaSimple()).intValue()); return searchFacade.searchSiteByCriteria(getConsultaSimple(), firstResult, maxResults); } else { //Valores defaul getPagination().setTotalResults(getGisFacade().countSites().intValue()); return gisFacade.getAllSitePaginated(firstResult, maxResults); } } /** * @return the selectedProjection */ public Long getSelectedProjection() { return selectedProjection; } /** * @param selectedProjection the selectedProjection to set */ public void setSelectedProjection(Long selectedProjection) { this.selectedProjection = selectedProjection; } /** * @return the wgs84Projection */ public boolean isWgs84Projection() { return wgs84Projection; } /** * @param wgs84Projection the wgs84Projection to set */ public void setWgs84Projection(boolean wgs84Projection) { this.wgs84Projection = wgs84Projection; } public String[] getReprojection(float valueX, float valueY, Long projectionSRID, Long reprojectioSRID) { String reprojection = this.getGisFacade().getReprojection(valueX, valueY, projectionSRID, reprojectioSRID); if(reprojection == null) { return null; } else { reprojection = reprojection.substring(reprojection.indexOf("(")+1, reprojection.length()-1); return reprojection.split(" "); } } /** * @return the selectedWgs84Format */ public int getSelectedWgs84Format() { return selectedWgs84Format; } /** * @param selectedWgs84Format the selectedWgs84Format to set */ public void setSelectedWgs84Format(int selectedWgs84Format) { this.selectedWgs84Format = selectedWgs84Format; } public void getGeoreferencedSitesByCoordinates() { this.setGeoreferencedSites(this.gisFacade.getGeoreferencedSitesByCoordinates(this.getCoordinateDataProvider(), this.getSelectedType())); } /** * @return the georeferencedSites */ public List<GeoreferencedDTO> getGeoreferencedSites() { return georeferencedSites; } /** * @param georeferencedSites the georeferencedSites to set */ public void setGeoreferencedSites(List<GeoreferencedDTO> georeferencedSites) { this.georeferencedSites = georeferencedSites; } }