// $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.libraries;
import java.util.SortedSet;
import com.google.common.base.Joiner;
import org.apache.log4j.Logger;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.db.LibrariesDAO;
import edu.harvard.med.screensaver.io.libraries.PlateWellListParser;
import edu.harvard.med.screensaver.io.libraries.PlateWellListParserResult;
import edu.harvard.med.screensaver.model.libraries.WellKey;
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.Pair;
/**
*
* @author <a mailto="john_sullivan@hms.harvard.edu">John Sullivan</a>
* @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a>
*/
public class WellFinder extends AbstractBackingBean
{
private static final Logger log = Logger.getLogger(WellFinder.class);
private GenericEntityDAO _dao;
private LibrariesDAO _librariesDao;
private WellSearchResults _wellsBrowser;
private WellCopyVolumeSearchResults _wellCopyVolumesBrowser;
private int _maxQueryInputItems;
private String _plateWellList;
/**
* @motivation for CGLIB2
*/
protected WellFinder()
{
}
public WellFinder(GenericEntityDAO dao,
LibrariesDAO librariesDao,
WellSearchResults wellsBrowser,
WellCopyVolumeSearchResults wellCopyVolumesBrowser)
{
_dao = dao;
_librariesDao = librariesDao;
_wellsBrowser = wellsBrowser;
_wellCopyVolumesBrowser = wellCopyVolumesBrowser;
}
public String getPlateWellList()
{
return _plateWellList;
}
public void setPlateWellList(String plateWellList)
{
_plateWellList = plateWellList;
}
@UICommand
public String findWells()
{
PlateWellListParserResult result = PlateWellListParser.parseWellsFromPlateWellList(_plateWellList);
// display parse errors before proceeding with successfully parsed wells
for (Pair<Integer,String> error : result.getErrors()) {
showMessage("libraries.plateWellListParseError", error.getSecond());
}
SortedSet<WellKey> keysToShow = result.getParsedWellKeys();
if(result.getParsedWellKeys().size() > getMaxQueryInputItems()) {
showMessage("maxQueryInputSizeReached", result.getParsedWellKeys().size(), getMaxQueryInputItems());
keysToShow = result.getFirst(getMaxQueryInputItems());
}
getCurrentScreensaverUser().logActivity("searching for wells: " +
Joiner.on(", ").join(keysToShow));
_wellsBrowser.searchWells(keysToShow, "Well Search Results");
if (_wellsBrowser.getRowCount() == 1) {
_wellsBrowser.getRowsPerPageSelector().setSelection(1);
}
resetSearchFields();
return BROWSE_WELLS;
}
@UICommand
public String findWellVolumes()
{
PlateWellListParserResult parseResult = PlateWellListParser.parseWellsFromPlateWellList(_plateWellList);
// display parse errors before proceeding with successfully parsed wells
for (Pair<Integer,String> error : parseResult.getErrors()) {
showMessage("libraries.plateWellListParseError", error.getSecond());
}
SortedSet<WellKey> keysToShow = parseResult.getParsedWellKeys();
if(parseResult.getParsedWellKeys().size() > getMaxQueryInputItems()) {
showMessage("maxQueryInputSizeReached", parseResult.getParsedWellKeys().size(), getMaxQueryInputItems());
keysToShow = parseResult.getFirst(getMaxQueryInputItems());
}
_wellCopyVolumesBrowser.searchWells(keysToShow);
resetSearchFields();
return BROWSE_WELL_VOLUMES;
}
private void resetSearchFields()
{
_plateWellList = null;
}
public void setMaxQueryInputItems(int _maxQueryInputItems)
{
this._maxQueryInputItems = _maxQueryInputItems;
}
public int getMaxQueryInputItems()
{
return _maxQueryInputItems;
}
}