package edu.ualberta.med.biobank.treeview.shipment;
import java.util.List;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.action.originInfo.OriginInfoDeleteAction;
import edu.ualberta.med.biobank.common.permission.shipment.OriginInfoReadPermission;
import edu.ualberta.med.biobank.common.permission.shipment.OriginInfoUpdatePermission;
import edu.ualberta.med.biobank.common.permission.shipment.ShipmentDeletePermission;
import edu.ualberta.med.biobank.common.wrappers.CenterWrapper;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.OriginInfoWrapper;
import edu.ualberta.med.biobank.common.wrappers.ProcessingEventWrapper;
import edu.ualberta.med.biobank.common.wrappers.ShipmentInfoWrapper;
import edu.ualberta.med.biobank.common.wrappers.listener.WrapperEvent;
import edu.ualberta.med.biobank.common.wrappers.listener.WrapperEvent.WrapperEventType;
import edu.ualberta.med.biobank.forms.ShipmentEntryForm;
import edu.ualberta.med.biobank.forms.ShipmentViewForm;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.model.OriginInfo;
import edu.ualberta.med.biobank.treeview.AbstractAdapterBase;
import edu.ualberta.med.biobank.treeview.AdapterBase;
import gov.nih.nci.system.applicationservice.ApplicationException;
public class ShipmentAdapter extends AdapterBase {
public ShipmentAdapter(AdapterBase parent, OriginInfoWrapper originInfo) {
super(parent, originInfo);
if (originInfo.getShipmentInfo() == null) {
throw new NullPointerException(
Messages.ShipmentAdapter_noShipment_error_msg);
}
setHasChildren(false);
}
@Override
public void init() {
try {
this.isDeletable =
SessionManager.getAppService().isAllowed(
new ShipmentDeletePermission(
((OriginInfoWrapper) getModelObject())
.getId(),
SessionManager.getUser().getCurrentWorkingCenter()
.getId()));
this.isReadable =
SessionManager.getAppService().isAllowed(
new OriginInfoReadPermission(getModelObject().getId()));
this.isEditable =
SessionManager.getAppService().isAllowed(
new OriginInfoUpdatePermission(
((OriginInfoWrapper) getModelObject())
.getReceiverSite()
.getId()));
} catch (ApplicationException e) {
BgcPlugin.openAsyncError("Permission Error",
"Unable to retrieve user permissions");
}
}
@Override
protected String getLabelInternal() {
OriginInfoWrapper originInfo = (OriginInfoWrapper) getModelObject();
ShipmentInfoWrapper shipmentInfo = originInfo.getShipmentInfo();
String label = ""; //$NON-NLS-1$
if (shipmentInfo.getReceivedAt() != null)
label += shipmentInfo.getFormattedDateReceived();
if (shipmentInfo.getWaybill() != null) {
label += " (" + shipmentInfo.getWaybill() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
return label;
}
@Override
public String getTooltipTextInternal() {
OriginInfoWrapper originInfo = (OriginInfoWrapper) getModelObject();
if (originInfo != null) {
CenterWrapper<?> center = originInfo.getCenter();
if (center != null)
return center.getName()
+ " - " + getTooltipText(Messages.ShipmentAdapter_tooltip_no_origin); //$NON-NLS-1$
}
return getTooltipText(Messages.ShipmentAdapter_tooltip_no_origin);
}
@Override
public void popupMenu(TreeViewer tv, Tree tree, Menu menu) {
addEditMenu(menu, Messages.ShipmentAdapter_shipment_label);
addViewMenu(menu, Messages.ShipmentAdapter_shipment_label);
addDeleteMenu(menu, Messages.ShipmentAdapter_shipment_label);
}
@Override
protected String getConfirmDeleteMessage() {
return Messages.ShipmentAdapter_delete_confirm;
}
@Override
public List<AbstractAdapterBase> search(Class<?> searchedClass,
Integer objectId) {
return findChildFromClass(searchedClass, objectId,
ProcessingEventWrapper.class);
}
@Override
protected AdapterBase createChildNode() {
return null;
}
@Override
protected AdapterBase createChildNode(Object child) {
return null;
}
@Override
protected List<? extends ModelWrapper<?>> getWrapperChildren()
throws Exception {
return null;
}
@Override
public String getEntryFormId() {
return ShipmentEntryForm.ID;
}
@Override
public String getViewFormId() {
return ShipmentViewForm.ID;
}
@Override
protected void additionalRefreshAfterDelete() {
WrapperEventType eventType = WrapperEventType.DELETE;
WrapperEvent event = new WrapperEvent(eventType, getModelObject());
getModelObject().notifyListeners(event);
getParent().getParent().getParent().performExpand();
}
@Override
public int compareTo(AbstractAdapterBase o) {
if (o instanceof ShipmentAdapter)
return internalCompareTo(o);
return 0;
}
@Override
public void runDelete() throws ApplicationException {
OriginInfoDeleteAction action =
new OriginInfoDeleteAction((OriginInfo)
getModelObject().getWrappedObject(),
SessionManager.getUser().getCurrentWorkingCenter()
.getWrappedObject());
SessionManager.getAppService().doAction(action);
}
}