// $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.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDate;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.model.VolumeUnit;
import edu.harvard.med.screensaver.model.activities.Activity;
import edu.harvard.med.screensaver.model.cherrypicks.LabCherryPick;
import edu.harvard.med.screensaver.model.libraries.WellVolumeAdjustment;
import edu.harvard.med.screensaver.model.meta.PropertyPath;
import edu.harvard.med.screensaver.model.users.ScreensaverUser;
import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.DateEntityColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.FixedDecimalEntityColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.IntegerEntityColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.TextEntityColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.UserNameColumn;
import edu.harvard.med.screensaver.ui.arch.searchresults.EntityBasedEntitySearchResults;
import edu.harvard.med.screensaver.ui.cherrypickrequests.CherryPickRequestViewer;
import edu.harvard.med.screensaver.ui.users.UserViewer;
public class WellVolumeAdjustmentSearchResults extends EntityBasedEntitySearchResults<WellVolumeAdjustment,Integer>
{
private CherryPickRequestViewer _cherryPickRequestViewer;
private UserViewer _userViewer;
private GenericEntityDAO _dao;
/**
* @motivation for CGLIB2
*/
protected WellVolumeAdjustmentSearchResults()
{
}
public WellVolumeAdjustmentSearchResults(CherryPickRequestViewer cherryPickRequestViewer,
UserViewer userViewer,
GenericEntityDAO dao)
{
_cherryPickRequestViewer = cherryPickRequestViewer;
_userViewer = userViewer;
_dao = dao;
}
@Override
protected List<? extends TableColumn<WellVolumeAdjustment,?>> buildColumns()
{
List<TableColumn<WellVolumeAdjustment,?>> columns = new ArrayList<TableColumn<WellVolumeAdjustment,?>>();
columns.add(new DateEntityColumn<WellVolumeAdjustment>(
WellVolumeAdjustment.wellVolumeCorrectionActivity.toProperty("dateOfActivity"),
"Date", "The date the volume adjustment was made", TableColumn.UNGROUPED) {
@Override
protected LocalDate getDate(WellVolumeAdjustment wva)
{
Activity activity = wva.getRelatedActivity();
if (activity != null) {
return activity.getDateOfActivity();
}
if (wva.getLabCherryPick() != null) {
// TODO: this should really be the date that liquid allocation was made, but we're not currently recording that
return wva.getLabCherryPick().getCherryPickRequest().getDateRequested();
}
return null;
}
});
List<PropertyPath<WellVolumeAdjustment>> performedByPropertyPaths = new ArrayList<PropertyPath<WellVolumeAdjustment>>();
performedByPropertyPaths.add(WellVolumeAdjustment.wellVolumeCorrectionActivity.to(Activity.performedBy).toProperty("lastName"));
performedByPropertyPaths.add(WellVolumeAdjustment.wellVolumeCorrectionActivity.to(Activity.performedBy).toProperty("firstName"));
columns.add(new UserNameColumn<WellVolumeAdjustment,ScreensaverUser>(
WellVolumeAdjustment.wellVolumeCorrectionActivity.to(Activity.performedBy),
"Performed By", "The person that performed the volume adjustment", TableColumn.UNGROUPED, _userViewer) {
@Override
protected ScreensaverUser getUser(WellVolumeAdjustment wva)
{
Activity activity = wva.getRelatedActivity();
if (activity != null) {
return activity.getPerformedBy();
}
return null;
}
});
columns.add(new TextEntityColumn<WellVolumeAdjustment>(
WellVolumeAdjustment.copy.toProperty("name"),
"Copy", "The name of the library plate copy", TableColumn.UNGROUPED) {
@Override
public String getCellValue(WellVolumeAdjustment wva) { return wva.getCopy().getName(); }
});
columns.add(new FixedDecimalEntityColumn<WellVolumeAdjustment>(
WellVolumeAdjustment.volume,
"Volume", "The volume adjustment amount", TableColumn.UNGROUPED) {
@Override
public BigDecimal getCellValue(WellVolumeAdjustment wva) { return wva.getVolume().getValue(VolumeUnit.MICROLITERS); }
});
columns.add(new IntegerEntityColumn<WellVolumeAdjustment>(
WellVolumeAdjustment.labCherryPick.to(LabCherryPick.cherryPickRequest).toProperty("cherryPickRequestNumber"),
"Cherry Pick Request", "The cherry pick request that made the volume adjustment", TableColumn.UNGROUPED) {
@Override
public Integer getCellValue(WellVolumeAdjustment wva) { return wva.getLabCherryPick() == null ? null : wva.getLabCherryPick().getCherryPickRequest().getCherryPickRequestNumber(); }
@Override
public boolean isCommandLink() { return true; }
@Override
public Object cellAction(WellVolumeAdjustment entity) { return _cherryPickRequestViewer.viewEntity(entity.getLabCherryPick().getCherryPickRequest()); }
});
columns.add(new IntegerEntityColumn<WellVolumeAdjustment>(
WellVolumeAdjustment.wellVolumeCorrectionActivity.toProperty("activityId"),
"Admin Adjustment", "The well volume correction activity that made the volume adjustment", TableColumn.UNGROUPED) {
@Override
public Integer getCellValue(WellVolumeAdjustment wva) { return wva.getWellVolumeCorrectionActivity() == null ? null : wva.getWellVolumeCorrectionActivity().getEntityId(); }
});
return columns;
}
@Override
public void searchAll()
{
throw new UnsupportedOperationException("not implemented");
}
}