/* 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.inventory; import com.sun.rave.web.ui.appbase.AbstractPageBean; import com.sun.webui.jsf.component.DropDown; import com.sun.webui.jsf.component.Table; import com.sun.webui.jsf.component.TextField; import com.sun.webui.jsf.component.Label; import com.sun.webui.jsf.model.Option; import com.sun.webui.jsf.model.OptionTitle; import com.sun.webui.jsf.model.SingleSelectOptionsList; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; import javax.faces.FacesException; import javax.faces.component.html.HtmlCommandButton; import javax.faces.component.html.HtmlDataTable; import javax.faces.component.html.HtmlColumn; import javax.faces.component.html.HtmlInputText; import javax.faces.component.html.HtmlPanelGrid; import javax.faces.context.FacesContext; import javax.faces.component.html.HtmlInputHidden; import org.inbio.ara.AraSessionBean; import org.inbio.ara.dto.inventory.IdentificationDTO; import org.inbio.ara.dto.inventory.IdentificationStatusDTO; import org.inbio.ara.dto.inventory.IdentificationTypeDTO; import org.inbio.ara.dto.inventory.IdentifierDTO; import org.inbio.ara.dto.inventory.PersonDTO; import org.inbio.ara.dto.inventory.TaxonDTO; import org.inbio.ara.dto.inventory.TaxonomicalRangeDTO; import org.inbio.ara.label.LabelSessionBean; import org.inbio.ara.persistence.gathering.CollectionProtocolValuesEntity; import org.inbio.ara.persistence.gathering.ProtocolAtributeEntity; 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 ListIdentification.java * @version Created on 09/07/2009, 03:09:43 PM * @author esmata */ public class ListIdentification extends AbstractPageBean { public static final long ROOT_TAXONOMICAL_RANGE_ID = 1L; // <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> //Bindings para la tabla que se utiliza para listar los especimenes private Table identificationTable = new Table(); //Contexto utilizado para obtener el current locale private FacesContext context; private Locale myLocale; //Componentes graficos utilizados para las busquedas de especimenes private HtmlPanelGrid gridpAdvancedSearch = new HtmlPanelGrid(); private HtmlPanelGrid gridpReIdentify = new HtmlPanelGrid(); private HtmlInputText txSearch = new HtmlInputText(); private HtmlCommandButton btnSeach = new HtmlCommandButton(); private HtmlCommandButton btnAdvSeach = new HtmlCommandButton(); private HtmlCommandButton btnReIdentify = new HtmlCommandButton(); private TextField txCatalogNumber = new TextField(); private TextField txGathObsDetail = new TextField(); private TextField txGathObsDetCollector = new TextField(); private TextField txTaxonName = new TextField(); private TextField txIdentifierName = new TextField(); // DropDown private DropDown ddStatus = new DropDown(); // Datos de la lista SingleSelectOptionsList ddStatusData = new SingleSelectOptionsList(); //objeto selecionado. private Long ddStatusSelected = null; // Datos para asignar a los dropdown private DropDown ddType = new DropDown(); // Datos de la lista private SingleSelectOptionsList ddTypeData = new SingleSelectOptionsList(); // opción selecionada. private Long ddTypeSelected = null; // Datos para asignar a los dropdown private DropDown ddTaxonomicalRange = new DropDown(); // Datos de la lista private SingleSelectOptionsList ddTaxonomicalRangeData = new SingleSelectOptionsList(); // opción selecionada. private Long ddTaxonomicalRangeSelected = null; //Data table binding para la tabla que muetra los especimnes private HtmlDataTable dataTableIdentifications = new HtmlDataTable(); private DropDown ddValidatorsData = new DropDown(); private Long ddValidatorSelected = null; private HtmlInputHidden deleteConfirmationText = new HtmlInputHidden(); private HtmlColumn gathObsDetailColumn = new HtmlColumn(); private HtmlColumn collectorGathObsDetailColumn = new HtmlColumn(); private HtmlColumn catgNumberColumnFirst = new HtmlColumn(); private HtmlColumn catgNumberColumnLast = new HtmlColumn(); private Label lbGathObsDetail = new Label(); private Label lbGathObsDetCollector = new Label(); private boolean proceedSearch = false; /** * <p>Construct a new Page bean instance.</p> */ public ListIdentification() { } /** * <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 // <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("ListIdentification Initialization Failure", e); throw e instanceof FacesException ? (FacesException) e : new FacesException(e); } // </editor-fold> // Perform application initialization that must complete // *after* managed components are initialize } /** * <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() { System.out.println("*********** HIZO PRERENDER ***********"); IdentificationSessionBean isb = this.getIdentificationSessionBean(); //Load required data long inicioT = System.currentTimeMillis(); this.setStatusData(); this.setTypeData(); //this.setTaxonomicLevelData(); //this.loadValidatorData(); //this.loadAddRemoveData(false); this.getDeleteConfirmationText().setValue(BundleHelper.getDefaultBundleValue("delete_confirmation", this.getMyLocale())); //------------------------------ Control de GUI ------------------------------- if (isb.isAdvancedSearch()) { //Muestra el panel de busqueda avanzada this.gridpAdvancedSearch.setRendered(true); } //Verifica si esta re-identificando y muestra el panel else if (isb.isReIdentify()) { //Muestra el panel de reidentificacion this.gridpReIdentify.setRendered(true); } Long currentColl = this.getAraSessionBean().getGlobalCollectionId(); boolean useDetail = this.getIdentificationSessionBean().matchCollectionProtocol(currentColl, ProtocolAtributeEntity.USE_GATHERING_DETAIL.getId(), CollectionProtocolValuesEntity.TRUE_VALUE.getValue()); this.gathObsDetailColumn.setRendered(useDetail); this.txGathObsDetail.setRendered(useDetail); this.lbGathObsDetail.setRendered(useDetail); this.txGathObsDetCollector.setRendered(useDetail); this.lbGathObsDetCollector.setRendered(useDetail); this.catgNumberColumnFirst.setRendered(!useDetail); this.catgNumberColumnLast.setRendered(useDetail); this.collectorGathObsDetailColumn.setRendered(useDetail); //-------------------------- Control de Paginador ------------------------------ //Inicializar el dataprovider la primera vez (si la paginación es nula) //long inicioT = System.currentTimeMillis(); long finalT; if (isb.getPagination()==null) { System.out.println("Entro donde la paginacion es nula"); isb.initDataProvider(); } //Actualizar los datos del paginador else { System.out.println("Entro donde la paginacion NO es nula"); if(!isProceedSearch()) { isb.getPagination().refreshList(); this.proceedSearch = false; } } //finalT = System.currentTimeMillis(); //System.out.println("Tiempo al finalizar el prerender = "+(finalT-inicioT)); //finalT=inicioT; } /** * <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() { } /** * Load the Types information from the database into a dropdown component. */ public void setTypeData() { IdentificationSessionBean isb = this.getIdentificationSessionBean(); Option[] allOptionsInArray = null; String optionTitle = null; Option option = null; List<IdentificationTypeDTO> aITList = isb.getIdentificationTypeList(); ArrayList<Option> allOptions = new ArrayList<Option>(); // retrieve the default (no type) option from the properties file. optionTitle = BundleHelper.getDefaultBundleValue("drop_down_default", getMyLocale()); option = new OptionTitle(optionTitle); allOptions.add(option); // Populate the options on the dropdown for (IdentificationTypeDTO itDTO : aITList) { option = new Option(itDTO.getIdentificationTypeKey(), itDTO.getName()); allOptions.add(option); } //Sets the elements in the SingleSelectedOptionList Object allOptionsInArray = new Option[allOptions.size()]; this.ddTypeData.setOptions(allOptions.toArray(allOptionsInArray)); } /** * Load the Identification Status information from the database to a * DropDown component */ public void setStatusData() { IdentificationSessionBean isb = this.getIdentificationSessionBean(); Option[] allOptionsInArray = null; String optionTitle = null; Option option = null; List<IdentificationStatusDTO> aITList = isb.getIdentificationStatusList(); ArrayList<Option> allOptions = new ArrayList<Option>(); // retrieve the default (No Status) option from the properties file. optionTitle = BundleHelper.getDefaultBundleValue("drop_down_default", getMyLocale()); option = new OptionTitle(optionTitle); allOptions.add(option); // Populate the options on the dropdown for (IdentificationStatusDTO isDTO : aITList) { option = new Option(isDTO.getIdentificationStatusKey(), isDTO.getName()); allOptions.add(option); } //Sets the elements in the SingleSelectedOptionList Object allOptionsInArray = new Option[allOptions.size()]; this.ddStatusData.setOptions(allOptions.toArray(allOptionsInArray)); } /** * Show the advance search area. * @return null */ public String btnAdvSeachAction() { IdentificationSessionBean isb = this.getIdentificationSessionBean(); boolean advanced = isb.isAdvancedSearch(); // sets all the necesary flags isb.setReIdentify(false); if (advanced == false) { //Mostrar panel de busqueda avanzada isb.setAdvancedSearch(true); this.gridpReIdentify.setRendered(false); //Deshabilitar busqueda simple this.txSearch.setRendered(false); this.btnSeach.setRendered(false); this.btnReIdentify.setRendered(false); //Cambia el text del boton de busqueda avanzada this.btnAdvSeach.setValue( BundleHelper.getDefaultBundleValue("advanced_search_specimen_back", getMyLocale())); } else if (advanced == true) { isb.setAdvancedSearch(false); //Ocultar el panel this.gridpAdvancedSearch.setRendered(false); this.gridpReIdentify.setRendered(false); //Habilitar busqueda simple this.txSearch.setRendered(true); this.btnSeach.setRendered(true); this.btnReIdentify.setRendered(true); //Cambia el text del boton de busqueda avanzada this.btnAdvSeach.setValue( BundleHelper.getDefaultBundleValue("advanced_search_specimen", getMyLocale())); } return null; } /** * Show/Hide the Re-Identification box * @return null */ public String btnReIdentifyAction() { IdentificationSessionBean isb = this.getIdentificationSessionBean(); List<IdentificationDTO> identList = this.selectedDataTableIdenfications(); System.out.println("Los catalog numbre son: "); for(IdentificationDTO idDTO : identList) { System.out.println(idDTO.getCatalogNumber()); } isb.setSelectedIdentifications(identList); boolean reIdentify = isb.isReIdentify(); isb.setSpecimenBarcodeList(new Option[0]); isb.setAdvancedSearch(false); isb.setResetReidentification(true); return "new"; } /** * Process and execute the text of the search box. Results end being paginated * in the interface. * @return null */ public String btnSearchAction() { String userImput = ""; int totalResults = 0; IdentificationSessionBean isb = this.getIdentificationSessionBean(); // sets all the necesary flags isb.setAdvancedSearch(false); isb.setReIdentify(false); if (txSearch.getValue() != null) { userImput = this.txSearch.getValue().toString(); } userImput = userImput.trim(); if (userImput.length() == 0) { //Se desabilitan las banderas de busqueda simple y avanzada isb.setQueryModeSimple(false); isb.setQueryMode(false); } else { //Setear el string para consulta simple del SessionBean isb.setConsultaSimple(userImput); //Indicarle al SessionBean que el paginador debe "trabajar" en modo busqueda simple isb.setQueryModeSimple(true); //Desabilitar la bandera de busqueda avanzada isb.setQueryMode(false); } isb.getPagination().firstResults(); return null; } /** * Process and execute the parameters of an advance search, results are returned * paginated * @return null */ public String btnProceedSearcAction() { String indentifiersString = ""; IdentificationDTO consulta = new IdentificationDTO(); List<IdentifierDTO> identifierList = new ArrayList(); IdentificationSessionBean isb = this.getIdentificationSessionBean(); // retrieve the necesary values from the interface bindings. String catalogNumber = (String) txCatalogNumber.getValue(); String taxonName = (String) txTaxonName.getValue(); String gathObsDetail = (String)txGathObsDetail.getValue(); String gathObsDetCollector = (String)txGathObsDetCollector.getValue(); this.proceedSearch = true; if (catalogNumber != null && !catalogNumber.isEmpty()) { consulta.setCatalogNumber(catalogNumber); } if (gathObsDetail != null && !gathObsDetail.isEmpty()) { consulta.setGathObsDetailNumber(gathObsDetail); } if (gathObsDetCollector != null && !gathObsDetCollector.isEmpty()) { consulta.setCollectorNameGathObsDetail(gathObsDetCollector); } if (taxonName != null && !taxonName.isEmpty()) { consulta.setTaxonString(taxonName); } consulta.setStatusId(this.ddStatusSelected); consulta.setTypeId(this.ddTypeSelected); indentifiersString = (String) txIdentifierName.getValue(); if (indentifiersString != null && !indentifiersString.isEmpty()) { String[] tokens = indentifiersString.split(" "); for (String token : tokens) { identifierList.add(new IdentifierDTO(token)); } consulta.setIdentifiers(identifierList); } //Setear el SpecimenDTO del SessionBean utilizado para realizar la consulta isb.setQueryIdentificationDTO(consulta); //Indicarle al SessionBean que el paginador debe "trabajar" en modo busqueda avanzada isb.setQueryMode(true); //Desabilitar la bandera de busqueda simple isb.setQueryModeSimple(false); //Finalmente se inicializa el data provider del paginador con los resultados de la consulta isb.getPagination().firstResults(); this.getTxSearch().setValue(""); return null; } /** * Return a list of the selected identifications of the Table (selected by checkbox). * @return List<IdentificationDTO> */ public List<IdentificationDTO> selectedDataTableIdenfications(){ IdentificationDTO aIdentification = null; ArrayList<IdentificationDTO> selectedIdentifications = new ArrayList<IdentificationDTO>(); int rowCount = this.getDataTableIdentifications().getRowCount(); for (int i = 0; i < rowCount; i++) { //Obtener elementos seleccionados this.getDataTableIdentifications().setRowIndex(i); aIdentification = (IdentificationDTO) this.getDataTableIdentifications().getRowData(); if (aIdentification.isSelected()) { selectedIdentifications.add(aIdentification); } } return selectedIdentifications; } /** * @return the quantityTotal */ public String getQuantityTotal() { IdentificationSessionBean isb = this.getIdentificationSessionBean(); return isb.getQuantityTotal(); } /** * <p>Return a reference to the scoped data bean.</p> * * @return reference to the scoped data bean */ protected IdentificationSessionBean getIdentificationSessionBean() { return (IdentificationSessionBean) getBean("inventory$IdentificationSessionBean"); } /** * <p>Return a reference to the scoped data bean.</p> * * @return reference to the scoped data bean */ protected AraSessionBean getAraSessionBean() { return (AraSessionBean) getBean("AraSessionBean"); } // <editor-fold defaultstate="collapsed" desc="Getters y Setters"> public HtmlCommandButton getBtnAdvSeach() { return btnAdvSeach; } public void setBtnAdvSeach(HtmlCommandButton btnAdvSeach) { this.btnAdvSeach = btnAdvSeach; } public HtmlCommandButton getBtnSeach() { return btnSeach; } public void setBtnSeach(HtmlCommandButton btnSeach) { this.btnSeach = btnSeach; } public HtmlDataTable getDataTableIdentifications() { return dataTableIdentifications; } public void setDataTableIdentifications(HtmlDataTable dataTableIdentifications) { this.dataTableIdentifications = dataTableIdentifications; } public HtmlPanelGrid getGridpAdvancedSearch() { return gridpAdvancedSearch; } public void setGridpAdvancedSearch(HtmlPanelGrid gridpAdvancedSearch) { this.gridpAdvancedSearch = gridpAdvancedSearch; } public HtmlPanelGrid getGridpReIdentify() { return gridpReIdentify; } public void setGridpReIdentify(HtmlPanelGrid gridpReIdentify) { this.gridpReIdentify = gridpReIdentify; } public Table getIdentificationTable() { return identificationTable; } public void setIdentificationTable(Table identificationTable) { this.identificationTable = identificationTable; } /** * @return the myLocale */ public Locale getMyLocale() { return this.getAraSessionBean().getCurrentLocale(); } public void setMyLocale(Locale myLocale) { this.myLocale = myLocale; } public HtmlInputText getTxSearch() { return txSearch; } public void setTxSearch(HtmlInputText txSearch) { this.txSearch = txSearch; } public HtmlCommandButton getBtnReIdentify() { return btnReIdentify; } public void setBtnReIdentify(HtmlCommandButton btnReIdentify) { this.btnReIdentify = btnReIdentify; } public TextField getTxCatalogNumber() { return txCatalogNumber; } public void setTxCatalogNumber(TextField txCatalogNumber) { this.txCatalogNumber = txCatalogNumber; } public TextField getTxIdentifierName() { return txIdentifierName; } public void setTxIdentifierName(TextField txIdentifierName) { this.txIdentifierName = txIdentifierName; } public TextField getTxTaxonName() { return txTaxonName; } public void setTxTaxonName(TextField txTaxonName) { this.txTaxonName = txTaxonName; } public DropDown getDdStatus() { return ddStatus; } public void setDdStatus(DropDown ddStatus) { this.ddStatus = ddStatus; } public DropDown getDdType() { return ddType; } public void setDdType(DropDown ddType) { this.ddType = ddType; } public SingleSelectOptionsList getDdStatusData() { return ddStatusData; } public void setDdStatusData(SingleSelectOptionsList ddStatusData) { this.ddStatusData = ddStatusData; } public SingleSelectOptionsList getDdTypeData() { return ddTypeData; } public void setDdTypeData(SingleSelectOptionsList ddTypeData) { this.ddTypeData = ddTypeData; } public Long getDdStatusSelected() { return ddStatusSelected; } public void setDdStatusSelected(Long ddStatusSelected) { this.ddStatusSelected = ddStatusSelected; } public Long getDdTypeSelected() { return ddTypeSelected; } public void setDdTypeSelected(Long ddTypeSelected) { this.ddTypeSelected = ddTypeSelected; } public SingleSelectOptionsList getDdTaxonomicalRangeData() { return ddTaxonomicalRangeData; } public void setDdTaxonomicalRangeData(SingleSelectOptionsList ddTaxonomicalRangeData) { this.ddTaxonomicalRangeData = ddTaxonomicalRangeData; } public DropDown getDdTaxonomicalRange() { return ddTaxonomicalRange; } public void setDdTaxonomicalRange(DropDown ddTaxonomicalRange) { this.ddTaxonomicalRange = ddTaxonomicalRange; } public Long getDdTaxonomicalRangeSelected() { return ddTaxonomicalRangeSelected; } public void setDdTaxonomicalRangeSelected(Long ddTaxonomicalRangeSelected) { this.ddTaxonomicalRangeSelected = ddTaxonomicalRangeSelected; } public Long getDdValidatorSelected() { return ddValidatorSelected; } public void setDdValidatorSelected(Long ddValidatorSelected) { this.ddValidatorSelected = ddValidatorSelected; } public DropDown getDdValidatorsData() { return ddValidatorsData; } public void setDdValidatorsData(DropDown ddValidatorsData) { this.ddValidatorsData = ddValidatorsData; } /** * @return the deleteConfirmationText */ public HtmlInputHidden getDeleteConfirmationText() { return deleteConfirmationText; } public void setDeleteConfirmationText(HtmlInputHidden deleteConfirmationText) { this.deleteConfirmationText = deleteConfirmationText; } // </editor-fold> /** * @return the txGathObsDetail */ public TextField getTxGathObsDetail() { return txGathObsDetail; } /** * @param txGathObsDetail the txGathObsDetail to set */ public void setTxGathObsDetail(TextField txGathObsDetail) { this.txGathObsDetail = txGathObsDetail; } /** * @return the proceedSearch */ public boolean isProceedSearch() { return proceedSearch; } /** * @param proceedSearch the proceedSearch to set */ public void setProceedSearch(boolean proceedSearch) { this.proceedSearch = proceedSearch; } /** * @return the gathObsDetailColumn */ public HtmlColumn getGathObsDetailColumn() { return gathObsDetailColumn; } /** * @param gathObsDetailColumn the gathObsDetailColumn to set */ public void setGathObsDetailColumn(HtmlColumn gathObsDetailColumn) { this.gathObsDetailColumn = gathObsDetailColumn; } /** * @return the lbGathObsDetail */ public Label getLbGathObsDetail() { return lbGathObsDetail; } /** * @param lbGathObsDetail the lbGathObsDetail to set */ public void setLbGathObsDetail(Label lbGathObsDetail) { this.lbGathObsDetail = lbGathObsDetail; } /** * @return the catgNumberColumnFirst */ public HtmlColumn getCatgNumberColumnFirst() { return catgNumberColumnFirst; } /** * @param catgNumberColumnFirst the catgNumberColumnFirst to set */ public void setCatgNumberColumnFirst(HtmlColumn catgNumberColumnFirst) { this.catgNumberColumnFirst = catgNumberColumnFirst; } /** * @return the catgNumberColumnLast */ public HtmlColumn getCatgNumberColumnLast() { return catgNumberColumnLast; } /** * @param catgNumberColumnLast the catgNumberColumnLast to set */ public void setCatgNumberColumnLast(HtmlColumn catgNumberColumnLast) { this.catgNumberColumnLast = catgNumberColumnLast; } /** * @return the collectorGathObsDetailColumn */ public HtmlColumn getCollectorGathObsDetailColumn() { return collectorGathObsDetailColumn; } /** * @param collectorGathObsDetailColumn the collectorGathObsDetailColumn to set */ public void setCollectorGathObsDetailColumn(HtmlColumn collectorGathObsDetailColumn) { this.collectorGathObsDetailColumn = collectorGathObsDetailColumn; } /** * @return the lbGathObsDetCollector */ public Label getLbGathObsDetCollector() { return lbGathObsDetCollector; } /** * @param lbGathObsDetCollector the lbGathObsDetCollector to set */ public void setLbGathObsDetCollector(Label lbGathObsDetCollector) { this.lbGathObsDetCollector = lbGathObsDetCollector; } /** * @return the txGathObsDetCollector */ public TextField getTxGathObsDetCollector() { return txGathObsDetCollector; } /** * @param txGathObsDetCollector the txGathObsDetCollector to set */ public void setTxGathObsDetCollector(TextField txGathObsDetCollector) { this.txGathObsDetCollector = txGathObsDetCollector; } }