// $HeadURL$ // $Id$ // // Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College. // // Screensaver is an open-source project developed by the ICCB-L and NSRB labs // at Harvard Medical School. This software is distributed under the terms of // the GNU General Public License. package edu.harvard.med.screensaver.ui.users; import java.util.ArrayList; import java.util.List; import com.google.common.base.Joiner; import org.apache.log4j.Logger; import edu.harvard.med.screensaver.db.SortDirection; import edu.harvard.med.screensaver.db.Criterion.Operator; import edu.harvard.med.screensaver.model.users.ScreeningRoomUser; import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn; import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBean; import edu.harvard.med.screensaver.ui.arch.view.aspects.UICommand; import edu.harvard.med.screensaver.util.StringUtils; /** * @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a> */ public class ScreenerFinder extends AbstractBackingBean { private static final Logger log = Logger.getLogger(ScreenerFinder.class); private String _lastNamePattern; private String _firstNamePattern; private ScreenerSearchResults _screenerSearchResults; /** * @motivation for CGLIB2 */ protected ScreenerFinder() { } public ScreenerFinder(ScreenerSearchResults screenerSearchResults) { _screenerSearchResults = screenerSearchResults; _screenerSearchResults.searchAll(); } // public instance methods public String getLastNamePattern() { return _lastNamePattern; } public void setLastNamePattern(String lastNamePattern) { _lastNamePattern = lastNamePattern; } public String getFirstNamePattern() { return _firstNamePattern; } public void setFirstNamePattern(String firstNamePattern) { _firstNamePattern = firstNamePattern; } public String getFullNamePattern() { List<String> nameParts = new ArrayList<String>(); if (!StringUtils.isEmpty(_lastNamePattern)) { nameParts.add(_lastNamePattern + "*"); } else if (!StringUtils.isEmpty(_firstNamePattern)) { nameParts.add("*"); } if (!StringUtils.isEmpty(_firstNamePattern)) { nameParts.add(_firstNamePattern + "*"); } return Joiner.on(", ").join(nameParts); } @SuppressWarnings("unchecked") @UICommand public String findScreenerByNamePattern() { String pattern = getFullNamePattern(); if (!StringUtils.isEmpty(pattern)) { _screenerSearchResults.searchAll("Screeners matching " + pattern); // potentially poor performance, but "correct", as it always searches latest additions and changes to users TableColumn<ScreeningRoomUser,String> column = (TableColumn<ScreeningRoomUser,String>) _screenerSearchResults.getColumnManager().getColumn("Name"); //Note: the assumption is that alphabetic sort when searching on name is desired _screenerSearchResults.getColumnManager().setSortColumn(column); _screenerSearchResults.getColumnManager().setSortDirection(SortDirection.ASCENDING); column.resetCriteria().setOperatorAndValue(Operator.TEXT_LIKE, pattern); if (_screenerSearchResults.getRowCount() == 0) { showMessage("users.noUserWithMatchingName", pattern); resetSearchFields(); // if we don't reset now, and the user decides to not search again, the search criteria remain in the input fields } else if (_screenerSearchResults.getRowCount() == 1) { _screenerSearchResults.getRowsPerPageSelector().setSelection(1); resetSearchFields(); } else { _screenerSearchResults.getRowsPerPageSelector().setSelection(_screenerSearchResults.getRowsPerPageSelector().getDefaultSelection()); resetSearchFields(); } return BROWSE_SCREENERS; } else { showMessage("users.screenerNameRequired"); } return REDISPLAY_PAGE_ACTION_RESULT; } private void resetSearchFields() { _firstNamePattern = null; _lastNamePattern = null; } }