package edu.ualberta.med.biobank.widgets.infotables;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Composite;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.formatters.DateFormatter;
import edu.ualberta.med.biobank.common.permission.dispatch.DispatchDeletePermission;
import edu.ualberta.med.biobank.common.permission.dispatch.DispatchReadPermission;
import edu.ualberta.med.biobank.common.permission.dispatch.DispatchUpdatePermission;
import edu.ualberta.med.biobank.common.wrappers.DispatchWrapper;
import edu.ualberta.med.biobank.gui.common.widgets.BgcLabelProvider;
import edu.ualberta.med.biobank.model.Dispatch;
import gov.nih.nci.system.applicationservice.ApplicationException;
public class DispatchInfoTable extends InfoTableWidget<DispatchWrapper> {
private List<DispatchWrapper> dispatches;
protected static class TableRowData {
DispatchWrapper dispatch;
String sender;
Date dispatchTime;
String receiver;
Date dateReceived;
String waybill;
String dstatus;
@Override
public String toString() {
return StringUtils
.join(
new String[] { sender,
DateFormatter.formatAsDate(dispatchTime), receiver,
DateFormatter.formatAsDate(dateReceived), waybill,
dstatus }, "\t"); //$NON-NLS-1$
}
}
private static final String[] HEADINGS = new String[] {
Messages.DispatchInfoTable_sender_label,
Messages.DispatchInfoTable_time_label,
Messages.DispatchInfoTable_receiver_label,
Messages.DispatchInfoTable_received_label,
Messages.DispatchInfoTable_waybill_label,
Messages.DispatchInfoTable_state_label };
private boolean editMode = false;
public DispatchInfoTable(Composite parent,
List<Dispatch> dispatchesRaw) {
super(parent, null, HEADINGS, 15, DispatchWrapper.class);
this.dispatches = new ArrayList<DispatchWrapper>();
for (Dispatch dispatch : dispatchesRaw) {
dispatches.add(new DispatchWrapper(SessionManager.getAppService(),
dispatch));
}
setList(dispatches);
}
@Override
protected boolean isEditMode() {
return editMode;
}
@Override
protected BgcLabelProvider getLabelProvider() {
return new BgcLabelProvider() {
@Override
public String getColumnText(Object element, int columnIndex) {
TableRowData info =
(TableRowData) ((BiobankCollectionModel) element).o;
if (info == null) {
if (columnIndex == 0) {
return Messages.infotable_loading_msg;
}
return ""; //$NON-NLS-1$
}
switch (columnIndex) {
case 0:
return info.sender;
case 1:
return DateFormatter.formatAsDate(info.dispatchTime);
case 2:
return info.receiver;
case 3:
return DateFormatter.formatAsDate(info.dateReceived);
case 4:
return info.waybill;
case 5:
return info.dstatus;
default:
return ""; //$NON-NLS-1$
}
}
};
}
@Override
public TableRowData getCollectionModelObject(Object obj) throws Exception {
TableRowData info = new TableRowData();
info.dispatch = (DispatchWrapper) obj;
info.sender = info.dispatch.getSenderCenter().getNameShort();
info.dispatchTime =
info.dispatch.getShipmentInfo() == null ? null : info.dispatch
.getShipmentInfo().getPackedAt();
info.receiver = info.dispatch.getReceiverCenter().getNameShort();
info.dateReceived =
info.dispatch.getShipmentInfo() == null ? null : info.dispatch
.getShipmentInfo().getReceivedAt();
info.dstatus = info.dispatch.getStateDescription();
info.waybill =
info.dispatch.getShipmentInfo() == null ? null : info.dispatch
.getShipmentInfo().getWaybill();
return info;
}
@Override
protected String getCollectionModelObjectToString(Object o) {
if (o == null)
return null;
TableRowData r = (TableRowData) o;
return r.toString();
}
public void setSelection(DispatchWrapper selected) {
if (selected == null)
return;
for (BiobankCollectionModel item : model) {
TableRowData info = (TableRowData) item.o;
if (info.dispatch.equals(selected)) {
getTableViewer().setSelection(new StructuredSelection(item),
true);
}
}
}
@Override
public DispatchWrapper getSelection() {
BiobankCollectionModel item = getSelectionInternal();
if (item == null)
return null;
TableRowData row = (TableRowData) item.o;
Assert.isNotNull(row);
return row.dispatch;
}
@Override
protected BiobankTableSorter getComparator() {
return null;
}
public void reloadCollection() {
reloadCollection(dispatches);
}
@Override
protected Boolean canEdit(DispatchWrapper target)
throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new DispatchUpdatePermission(target.getId()));
}
@Override
protected Boolean canDelete(DispatchWrapper target)
throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new DispatchDeletePermission(target.getId()));
}
@Override
protected Boolean canView(DispatchWrapper target)
throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new DispatchReadPermission(target.getId()));
}
}