package edu.ualberta.med.biobank.widgets.infotables; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo; import edu.ualberta.med.biobank.common.formatters.DateFormatter; import edu.ualberta.med.biobank.common.formatters.NumberFormatter; import edu.ualberta.med.biobank.common.permission.specimen.SpecimenDeletePermission; import edu.ualberta.med.biobank.common.permission.specimen.SpecimenReadPermission; import edu.ualberta.med.biobank.common.permission.specimen.SpecimenUpdatePermission; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.widgets.BgcLabelProvider; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.OriginInfo; import edu.ualberta.med.biobank.model.ProcessingEvent; import gov.nih.nci.system.applicationservice.ApplicationException; public class NewSpecimenInfoTable extends InfoTableWidget<SpecimenInfo> { public static enum ColumnsShown { PEVENT_SOURCE_SPECIMENS(new String[] { Messages.SpecimenInfoTable_inventoryid_label, Messages.SpecimenInfoTable_type_label, Messages.SpecimenInfoTable_position_label, Messages.SpecimenInfoTable_time_drawn_label, Messages.SpecimenInfoTable_quantity_ml_label, Messages.SpecimenInfoTable_status_label, Messages.SpecimenInfoTable_study_label, Messages.SpecimenInfoTable_pnumber_label, Messages.SpecimenInfoTable_origin_center_label, Messages.SpecimenInfoTable_current_center_label, Messages.SpecimenInfoTable_comments_label }) { @Override public String getColumnValue(SpecimenInfo row, int columnIndex) { switch (columnIndex) { case 0: return row.specimen.getInventoryId(); case 1: return row.specimen.getSpecimenType().getNameShort(); case 2: return row.getPositionString(true, true); case 3: return DateFormatter.formatAsDateTime(row.specimen .getCreatedAt()); case 4: return NumberFormatter.format(row.specimen.getQuantity()); case 5: return row.specimen.getActivityStatus().getName(); case 6: return row.specimen.getCollectionEvent().getPatient() .getStudy().getNameShort(); case 7: return row.specimen.getCollectionEvent().getPatient() .getPnumber(); case 8: OriginInfo oi = row.specimen.getOriginInfo(); return oi == null ? "" : oi.getCenter().getNameShort(); //$NON-NLS-1$ case 9: return row.specimen.getCurrentCenter().getNameShort(); case 10: return row.comment; default: return ""; //$NON-NLS-1$ } } @Override public Image getColumnImage(SpecimenInfo row, int columnIndex) { if (columnIndex == 5 && ActivityStatus.FLAGGED == row.specimen .getActivityStatus()) return BgcPlugin.getDefault().getImageRegistry() .get(BgcPlugin.IMG_ERROR); return null; } }, CEVENT_SOURCE_SPECIMENS(new String[] { Messages.SpecimenInfoTable_inventoryid_label, Messages.SpecimenInfoTable_type_label, Messages.SpecimenInfoTable_position_label, Messages.SpecimenInfoTable_time_drawn_label, Messages.NewSpecimenInfoTable_quantity_label, Messages.SpecimenInfoTable_status_label, Messages.SpecimenInfoTable_worksheet_label, Messages.SpecimenInfoTable_origin_center_label, Messages.SpecimenInfoTable_current_center_label, Messages.SpecimenInfoTable_comments_label }) { @Override public String getColumnValue(SpecimenInfo row, int columnIndex) { switch (columnIndex) { case 0: return row.specimen.getInventoryId(); case 1: return row.specimen.getSpecimenType().getNameShort(); case 2: return row.getPositionString(true, true); case 3: return DateFormatter.formatAsDateTime(row.specimen .getCreatedAt()); case 4: return NumberFormatter.format(row.specimen.getQuantity()); case 5: return row.specimen.getActivityStatus().getName(); case 6: ProcessingEvent pe = row.specimen.getProcessingEvent(); return pe == null ? "" : pe.getWorksheet(); //$NON-NLS-1$ case 7: OriginInfo oi = row.specimen.getOriginInfo(); return oi == null ? "" : oi.getCenter().getNameShort(); //$NON-NLS-1$ case 8: return row.specimen.getCurrentCenter().getNameShort(); case 9: return row.comment; default: return ""; //$NON-NLS-1$ } } @Override public Image getColumnImage(SpecimenInfo row, int columnIndex) { // FIXME retrieve this info as an enum in SpecimenInfo ? if (columnIndex == 5 && ActivityStatus.FLAGGED == row.specimen .getActivityStatus()) return BgcPlugin.getDefault().getImageRegistry() .get(BgcPlugin.IMG_ERROR); return null; } }, CEVENT_ALIQUOTED_SPECIMENS(new String[] { Messages.SpecimenInfoTable_inventoryid_label, Messages.SpecimenInfoTable_type_label, Messages.SpecimenInfoTable_position_label, Messages.NewSpecimenInfoTable_source_worksheet_label, Messages.SpecimenInfoTable_created_label, Messages.SpecimenInfoTable_quantity_ml_label, Messages.SpecimenInfoTable_status_label, Messages.SpecimenInfoTable_origin_center_label, Messages.SpecimenInfoTable_current_center_label, Messages.SpecimenInfoTable_comments_label }) { @Override public String getColumnValue(SpecimenInfo row, int columnIndex) { switch (columnIndex) { case 0: return row.specimen.getInventoryId(); case 1: return row.specimen.getSpecimenType().getNameShort(); case 2: return row.getPositionString(true, true); case 3: return row.specimen.getParentSpecimen() .getProcessingEvent().getWorksheet(); case 4: return DateFormatter.formatAsDateTime(row.specimen .getCreatedAt()); case 5: return NumberFormatter.format(row.specimen.getQuantity()); case 6: return row.specimen.getActivityStatus().getName(); case 7: return row.specimen.getOriginInfo().getCenter() .getNameShort(); case 8: return row.specimen.getCurrentCenter().getNameShort(); case 9: return row.comment; default: return ""; //$NON-NLS-1$ } } @Override public Image getColumnImage(SpecimenInfo row, int columnIndex) { // FIXME retrieve this info as an enum in SpecimenInfo ? if (columnIndex == 5 && ActivityStatus.FLAGGED == row.specimen .getActivityStatus()) return BgcPlugin.getDefault().getImageRegistry() .get(BgcPlugin.IMG_ERROR); return null; } }; private String[] headings; private ColumnsShown(String[] headings) { this.headings = headings; } public String[] getheadings() { return headings; } public abstract String getColumnValue(SpecimenInfo row, int columnIndex); public abstract Image getColumnImage(SpecimenInfo row, int columnIndex); } private ColumnsShown currentColumnsShowns; public NewSpecimenInfoTable(Composite parent, List<SpecimenInfo> specimenCollection, ColumnsShown columnsShown, int rowsPerPage) { super(parent, specimenCollection, columnsShown.getheadings(), rowsPerPage, SpecimenInfo.class); this.currentColumnsShowns = columnsShown; } @Override protected BgcLabelProvider getLabelProvider() { return new BgcLabelProvider() { @Override public Image getColumnImage(Object element, int columnIndex) { SpecimenInfo info = (SpecimenInfo) ((BiobankCollectionModel) element).o; if (info == null) { return null; } return currentColumnsShowns.getColumnImage(info, columnIndex); } @Override public String getColumnText(Object element, int columnIndex) { SpecimenInfo info = (SpecimenInfo) ((BiobankCollectionModel) element).o; if (info == null) { if (columnIndex == 0) { return Messages.infotable_loading_msg; } return ""; //$NON-NLS-1$ } return currentColumnsShowns.getColumnValue(info, columnIndex); } }; } @Override protected String getCollectionModelObjectToString(Object o) { if (o == null) return null; SpecimenInfo r = (SpecimenInfo) o; return r.toString(); } @Override public SpecimenInfo getSelection() { BiobankCollectionModel item = getSelectionInternal(); if (item == null) return null; SpecimenInfo row = (SpecimenInfo) item.o; Assert.isNotNull(row); return row; } @Override protected BiobankTableSorter getComparator() { return new BiobankTableSorter() { private static final long serialVersionUID = 1L; @Override public int compare(Object o1, Object o2) { if (o1 instanceof SpecimenInfo && o2 instanceof SpecimenInfo) { SpecimenInfo s1 = (SpecimenInfo) o1; SpecimenInfo s2 = (SpecimenInfo) o2; return s1.specimen.getInventoryId().compareTo( s2.specimen.getInventoryId()); } return super.compare(01, o2); } }; } @Override protected Boolean canEdit(SpecimenInfo target) throws ApplicationException { return target != null && SessionManager.getAppService().isAllowed( new SpecimenUpdatePermission(target.specimen.getId())); } @Override protected Boolean canDelete(SpecimenInfo target) throws ApplicationException { return target != null && SessionManager.getAppService().isAllowed( new SpecimenDeletePermission(target.specimen.getId())); } @Override protected Boolean canView(SpecimenInfo target) throws ApplicationException { return target != null && SessionManager.getAppService().isAllowed( new SpecimenReadPermission(target.specimen.getId())); } }