// $HeadURL:
// svn+ssh://ant4@orchestra.med.harvard.edu/svn/iccb/screensaver/trunk/src/edu/harvard/med/screensaver/ui/libraries/WellVolumeSearchResults.java
// $
// $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.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.apache.log4j.Logger;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.model.Volume;
import edu.harvard.med.screensaver.model.libraries.WellVolume;
import edu.harvard.med.screensaver.ui.arch.datatable.column.ColumnType;
import edu.harvard.med.screensaver.ui.arch.datatable.column.IntegerColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.SetColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.TextColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.VolumeColumn;
import edu.harvard.med.screensaver.ui.arch.searchresults.EntityBasedEntitySearchResults;
import edu.harvard.med.screensaver.ui.cherrypickrequests.CherryPickRequestViewer;
/**
* Aggregates WellVolumeAdjustments into WellVolumes, and provides these
* WellVolumes as a SearchResult. Underlying data is set via methods
* {@link WellCopyVolumeSearchResults}.
*
* @see WellCopyVolumeSearchResults
*/
public class WellVolumeSearchResults extends EntityBasedEntitySearchResults<WellVolume,String>
{
private static Logger log = Logger.getLogger(WellVolumeSearchResults.class);
private GenericEntityDAO _dao;
private LibraryViewer _libraryViewer;
private WellViewer _wellViewer;
private CherryPickRequestViewer _cherryPickRequestViewer;
//private TextColumn<Well> _maxRemainingVolumeColumn;
/**
* @motivation for CGLIB2
*/
protected WellVolumeSearchResults() {}
public WellVolumeSearchResults(GenericEntityDAO dao,
LibraryViewer libraryViewer,
WellViewer wellViewer,
CherryPickRequestViewer cherryPickRequestViewer)
{
_dao = dao;
_libraryViewer = libraryViewer;
_wellViewer = wellViewer;
_cherryPickRequestViewer = cherryPickRequestViewer;
}
@Override
protected List<? extends TableColumn<WellVolume,?>> buildColumns()
{
List<TableColumn<WellVolume,?>> columns = new ArrayList<TableColumn<WellVolume,?>>();
columns.add(new TextColumn<WellVolume>("Library",
"The library containing the well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
return wellVolume.getWell().getLibrary().getLibraryName();
}
@Override
public boolean isCommandLink()
{
return true;
}
@Override
public Object cellAction(WellVolume wellVolume)
{
return _libraryViewer.viewEntity(wellVolume.getWell().getLibrary());
}
});
columns.add(new IntegerColumn<WellVolume>("Plate",
"The number of the plate the well is located on", TableColumn.UNGROUPED) {
@Override
public Integer getCellValue(WellVolume wellVolume)
{
return wellVolume.getWell().getPlateNumber();
}
});
columns.add(new TextColumn<WellVolume>("Well",
"The plate coordinates of the well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
return wellVolume.getWell().getWellName();
}
@Override
public boolean isCommandLink()
{
return true;
}
@Override
public Object cellAction(WellVolume wellVolume)
{
return _wellViewer.viewEntity(wellVolume.getWell());
}
});
columns.add(new SetColumn<WellVolume,String>("Copies",
"The copies of this well", TableColumn.UNGROUPED, ColumnType.TEXT_SET) {
@Override
public Set<String> getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) {
return Sets.newTreeSet(Arrays.asList(new String[] {"[no active copies]"} ));
}
return Sets.newTreeSet(wellVolume.getActiveWellInfo().getCopiesList());
}
});
columns.add(new VolumeColumn<WellVolume>("Total Initial Copy Volume",
"The sum of initial volumes from all copies of this well", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getTotalInitialVolume();
}
});
columns.add(new VolumeColumn<WellVolume>("Consumed Volume",
"The cumulative volume already used from this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getConsumedVolume();
}
});
columns.add(new VolumeColumn<WellVolume>("Max Remaining Volume",
"The maximum remaining volume of this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getMaxWellCopyVolume().getRemainingVolume();
}
});
columns.add(new TextColumn<WellVolume>("Max Remaining Volume Copy",
"The copy with the maximum remaining volume of this well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getMaxWellCopyVolume().getCopy().getName();
}
});
columns.add(new VolumeColumn<WellVolume>("Min Remaining Volume",
"The minimum remaining volume of this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getMinWellCopyVolume().getRemainingVolume();
}
});
columns.add(new TextColumn<WellVolume>("Min Remaining Volume Copy",
"The copy with the minimum remaining volume of this well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
if( wellVolume.getActiveWellInfo().isEmpty()) return null;
return wellVolume.getActiveWellInfo().getMinWellCopyVolume().getCopy().getName();
}
});
// Retired column info (hidden by default) //
TableColumn<WellVolume,?> c = new SetColumn<WellVolume,String>("Copies (Retired)",
"The retired copies of this well", TableColumn.UNGROUPED, ColumnType.TEXT_SET) {
@Override
public Set<String> getCellValue(WellVolume wellVolume)
{
return Sets.newTreeSet(wellVolume.getRetiredWellInfo().getCopiesList());
}
};
c.setVisible(false);
columns.add(c);
c = new VolumeColumn<WellVolume>("Total Initial Copy Volume (Retired)",
"The sum of initial volumes from all copies of this well", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getTotalInitialVolume();
}
};
c.setVisible(false);
columns.add(c);
c = new VolumeColumn<WellVolume>("Consumed Volume (Retired)",
"The cumulative volume already used from this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getConsumedVolume();
}
};
c.setVisible(false);
columns.add(c);
c = new VolumeColumn<WellVolume>("Max Remaining Volume (Retired)",
"The maximum remaining volume of this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getMaxWellCopyVolume().getRemainingVolume();
}
};
c.setVisible(false);
columns.add(c);
c = new TextColumn<WellVolume>("Max Remaining Volume Copy (Retired)",
"The copy with the maximum remaining volume of this well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getMaxWellCopyVolume().getCopy().getName();
}
};
c.setVisible(false);
columns.add(c);
c = new VolumeColumn<WellVolume>("Min Remaining Volume (Retired)",
"The minimum remaining volume of this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Volume getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getMinWellCopyVolume().getRemainingVolume();
}
};
c.setVisible(false);
columns.add(c);
c = new TextColumn<WellVolume>("Min Remaining Volume Copy (Retired)",
"The copy with the minimum remaining volume of this well", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolume wellVolume)
{
return wellVolume.getRetiredWellInfo().getMinWellCopyVolume().getCopy().getName();
}
};
c.setVisible(false);
columns.add(c);
// done - retired hidden columns - //
columns.add(new IntegerColumn<WellVolume>("Withdrawals/Adjustments",
"The number of withdrawals and administrative adjustments made from this well, across all copies", TableColumn.UNGROUPED) {
@Override
public Integer getCellValue(WellVolume wellVolume)
{
return wellVolume.getWellVolumeAdjustmentCount();
}
@Override
public boolean isCommandLink()
{
return getRowData().getWellVolumeAdjustmentCount() > 0;
}
@Override
public Object cellAction(WellVolume wellVolume)
{
return null;
// return showRowDetail();
}
});
// TableColumnManager<Well> columnManager = getColumnManager();
// columnManager.addCompoundSortColumns(columnManager.getColumn("Library"),
// columnManager.getColumn("Plate"), columnManager.getColumn("Well"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Plate"),
// columnManager.getColumn("Well"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Well"),
// columnManager.getColumn("Plate"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Copies"),
// columnManager.getColumn("Plate"), columnManager.getColumn("Well"),
// columnManager.getColumn("Copies"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Initial
// Volume"), columnManager.getColumn("Plate"), columnManager.getColumn("Well"),
// columnManager.getColumn("Copies"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Consumed
// Volume"), columnManager.getColumn("Plate"), columnManager.getColumn("Well"),
// columnManager.getColumn("Copies"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Max Remaining
// Volume"), columnManager.getColumn("Plate"), columnManager.getColumn("Well"),
// columnManager.getColumn("Copies"));
// columnManager.addCompoundSortColumns(columnManager.getColumn("Min Remaining
// Volume"), columnManager.getColumn("Plate"), columnManager.getColumn("Well"),
// columnManager.getColumn("Copies"));
return columns;
}
@Override
public void searchAll()
{
// TODO Auto-generated method stub
}
// @Override
// protected void makeRowDetail(WellVolume wv)
// {
// List<WellVolumeAdjustment> wvas = new
// ArrayList<WellVolumeAdjustment>(wv.getWellVolumeAdjustments().size());
// for (WellVolumeAdjustment wva : wv.getWellVolumeAdjustments()) {
// WellVolumeAdjustment wva2 = _dao.reloadEntity(wva,
// true,
// "well",
// "copy",
// "labCherryPick.wellVolumeAdjustments",
// "labCherryPick.cherryPickRequest",
// "labCherryPick.assayPlate.cherryPickLiquidTransfer",
// "wellVolumeCorrectionActivity.performedBy");
// wvas.add(wva2);
// }
// getRowDetail().setContents(wvas);
//
// }
}