package edu.ualberta.med.biobank.treeview.shipment;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Tree;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.permission.shipment.OriginInfoReadPermission;
import edu.ualberta.med.biobank.common.permission.shipment.OriginInfoUpdatePermission;
import edu.ualberta.med.biobank.common.wrappers.ClinicWrapper;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.OriginInfoWrapper;
import edu.ualberta.med.biobank.common.wrappers.ShipmentInfoWrapper;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.treeview.AbstractAdapterBase;
import edu.ualberta.med.biobank.treeview.AbstractTodayNode;
import edu.ualberta.med.biobank.treeview.AdapterBase;
import edu.ualberta.med.biobank.treeview.admin.ClinicAdapter;
import edu.ualberta.med.biobank.views.SpecimenTransitView;
import gov.nih.nci.system.applicationservice.ApplicationException;
public class ShipmentTodayNode extends AbstractTodayNode<OriginInfoWrapper> {
private Boolean readAllowed;
private Boolean addAllowed;
public ShipmentTodayNode(AdapterBase parent, int id) {
super(parent, id);
setLabel(Messages.ShipmentTodayNode_today_label);
try {
this.readAllowed = false;
this.addAllowed = false;
if (SessionManager.getUser().getCurrentWorkingCenter() != null) {
this.readAllowed =
SessionManager.getAppService().isAllowed(
new OriginInfoReadPermission(SessionManager.getUser()
.getCurrentWorkingCenter().getWrappedObject()));
this.addAllowed =
SessionManager.getAppService().isAllowed(
new OriginInfoUpdatePermission(SessionManager.getUser()
.getCurrentWorkingCenter().getId()));
}
} catch (ApplicationException e) {
BgcPlugin.openAsyncError(Messages.ShipmentTodayNode_0,
Messages.ShipmentTodayNode_1);
}
}
@Override
protected AdapterBase createChildNode(Object child) {
Assert.isTrue(child instanceof ClinicWrapper);
return new ClinicAdapter(this, (ClinicWrapper) child);
}
@Override
protected AdapterBase createChildNode() {
return new ClinicAdapter(this, null);
}
@Override
protected List<OriginInfoWrapper> getTodayElements()
throws ApplicationException {
if (SessionManager.getInstance().isConnected()
&& SessionManager.getUser().getCurrentWorkingCenter() != null
&& readAllowed)
return OriginInfoWrapper.getTodayShipments(SessionManager
.getAppService(), SessionManager.getUser()
.getCurrentWorkingCenter());
return null;
}
@Override
protected boolean isParentTo(ModelWrapper<?> parent, ModelWrapper<?> child) {
if (child instanceof OriginInfoWrapper) {
return parent.equals(((OriginInfoWrapper) child).getCenter());
}
return false;
}
@Override
public List<AbstractAdapterBase> search(Class<?> searchedClass,
Integer objectId) {
return findChildFromClass(searchedClass, objectId, ClinicWrapper.class);
}
@Override
protected void addChild(OriginInfoWrapper child) {
SpecimenTransitView.addToNode(this, child);
}
@Override
public void popupMenu(TreeViewer tv, Tree tree, Menu menu) {
if (addAllowed) {
MenuItem mi = new MenuItem(menu, SWT.PUSH);
mi.setText(Messages.ShipmentTodayNode_add_label);
mi.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
addShipment();
}
});
}
}
protected void addShipment() {
OriginInfoWrapper shipment = new OriginInfoWrapper(
SessionManager.getAppService());
ShipmentInfoWrapper shipmentInfo = new ShipmentInfoWrapper(
SessionManager.getAppService());
shipment.setShipmentInfo(shipmentInfo);
ShipmentAdapter shipNode = new ShipmentAdapter(SpecimenTransitView
.getCurrent().getSearchedNode(), shipment);
shipNode.openEntryForm();
}
}