package edu.ualberta.med.biobank.widgets.infotables;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MenuItem;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.formatters.NumberFormatter;
import edu.ualberta.med.biobank.common.permission.container.ContainerDeletePermission;
import edu.ualberta.med.biobank.common.permission.container.ContainerReadPermission;
import edu.ualberta.med.biobank.common.permission.container.ContainerUpdatePermission;
import edu.ualberta.med.biobank.common.wrappers.ContainerWrapper;
import edu.ualberta.med.biobank.gui.common.widgets.BgcLabelProvider;
import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableDoubleClickItemListener;
import edu.ualberta.med.biobank.model.Container;
import edu.ualberta.med.biobank.model.ContainerType;
import edu.ualberta.med.biobank.treeview.admin.ContainerAdapter;
import edu.ualberta.med.biobank.treeview.admin.SiteAdapter;
import gov.nih.nci.system.applicationservice.ApplicationException;
public class ContainerInfoTable extends InfoTableWidget<Container> {
private static class TableRowData {
Container container;
String label;
String typeNameShort;
String status;
String barcode;
Double temperature;
@Override
public String toString() {
return StringUtils.join(new String[] { label, typeNameShort,
status, barcode,
(temperature != null) ? temperature.toString() : "" }, "\t"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
private static final String[] HEADINGS = new String[] {
Messages.ContainerInfoTable_name_label,
Messages.ContainerInfoTable_type_label,
Messages.ContainerInfoTable_status_label,
Messages.ContainerInfoTable_barcode_label,
Messages.ContainerInfoTable_temperature_label };
private SiteAdapter siteAdapter;
public ContainerInfoTable(Composite parent, SiteAdapter site,
List<Container> containers) {
super(parent, containers, HEADINGS, 10, ContainerWrapper.class);
siteAdapter = site;
}
@Override
protected BgcLabelProvider getLabelProvider() {
return new BgcLabelProvider() {
@Override
public String getColumnText(Object element, int columnIndex) {
TableRowData item =
(TableRowData) ((BiobankCollectionModel) element).o;
if (item == null) {
if (columnIndex == 0) {
return Messages.infotable_loading_msg;
}
return ""; //$NON-NLS-1$
}
switch (columnIndex) {
case 0:
return item.label;
case 1:
return item.typeNameShort;
case 2:
return item.status;
case 3:
return item.barcode;
case 4:
NumberFormatter.format(item.temperature);
default:
return ""; //$NON-NLS-1$
}
}
};
}
@Override
public Object getCollectionModelObject(Object obj) throws Exception {
TableRowData info = new TableRowData();
Container container = (Container) obj;
info.container =
container;
info.label = info.container.getLabel();
ContainerType type = info.container.getContainerType();
if (type != null) {
info.typeNameShort = type.getNameShort();
}
info.status = info.container.getActivityStatus().getName();
info.barcode = info.container.getProductBarcode();
info.temperature = info.container.getTopContainer().getTemperature();
return info;
}
@Override
protected String getCollectionModelObjectToString(Object o) {
if (o == null)
return null;
return ((TableRowData) o).toString();
}
@Override
public Container getSelection() {
BiobankCollectionModel item = getSelectionInternal();
if (item == null)
return null;
return ((TableRowData) item.o).container;
}
@Override
protected BiobankTableSorter getComparator() {
return null;
}
@Override
public void addClickListener(
IInfoTableDoubleClickItemListener<Container> listener) {
doubleClickListeners.add(listener);
MenuItem mi = new MenuItem(getMenu(), SWT.PUSH);
mi.setText(Messages.ContainerInfoTable_edit_label);
mi.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Container selection = ContainerInfoTable.this
.getSelection();
if (selection != null) {
new ContainerAdapter(siteAdapter.getContainersGroupNode(),
new ContainerWrapper(SessionManager.getAppService(),
selection)).openEntryForm();
}
}
});
}
@Override
protected Boolean canEdit(Container target) throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new ContainerUpdatePermission(target.getId()));
}
@Override
protected Boolean canDelete(Container target) throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new ContainerDeletePermission(target.getId()));
}
@Override
protected Boolean canView(Container target) throws ApplicationException {
return SessionManager.getAppService().isAllowed(
new ContainerReadPermission(target.getId()));
}
}