package edu.ualberta.med.biobank.treeview.patient; import java.util.List; import java.util.Map; 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.action.patient.PatientDeleteAction; import edu.ualberta.med.biobank.common.action.patient.PatientGetSimpleCollectionEventInfosAction; import edu.ualberta.med.biobank.common.action.patient.PatientGetSimpleCollectionEventInfosAction.SimpleCEventInfo; import edu.ualberta.med.biobank.common.action.patient.PatientSearchAction.SearchedPatientInfo; import edu.ualberta.med.biobank.common.permission.patient.PatientDeletePermission; import edu.ualberta.med.biobank.common.permission.patient.PatientReadPermission; import edu.ualberta.med.biobank.common.permission.patient.PatientUpdatePermission; import edu.ualberta.med.biobank.forms.PatientEntryForm; import edu.ualberta.med.biobank.forms.PatientViewForm; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.model.CollectionEvent; import edu.ualberta.med.biobank.model.Patient; import edu.ualberta.med.biobank.model.Study; import edu.ualberta.med.biobank.treeview.AbstractAdapterBase; import edu.ualberta.med.biobank.treeview.AbstractNewAdapterBase; import gov.nih.nci.system.applicationservice.ApplicationException; public class PatientAdapter extends AbstractNewAdapterBase { private Patient patient; private Study study; @SuppressWarnings("unused") private Long ceventsCount; public PatientAdapter(AbstractAdapterBase parent, SearchedPatientInfo pinfo) { super(parent, pinfo == null ? null : pinfo.patient.getId(), null, null, (pinfo == null || pinfo.ceventsCount == null) ? false : pinfo.ceventsCount > 0); setValue(pinfo); } @Override public void init() { try { this.isDeletable = SessionManager.getAppService().isAllowed( new PatientDeletePermission(patient.getId())); this.isReadable = SessionManager.getAppService().isAllowed( new PatientReadPermission(patient.getId())); this.isEditable = SessionManager.getAppService().isAllowed( new PatientUpdatePermission(patient.getId())); } catch (ApplicationException e) { BgcPlugin.openAsyncError(Messages.PatientAdapter_error, Messages.PatientAdapter_message); } } @Override protected String getLabelInternal() { if (patient == null) return "no patient - should not see this"; //$NON-NLS-1$ return patient.getPnumber(); } @Override public String getTooltipTextInternal() { if (patient != null && study != null) return study.getName() + " - " + getTooltipText(Messages.PatientAdapter_patient_label); //$NON-NLS-1$ return getTooltipText(Messages.PatientAdapter_patient_label); } @Override public void executeDoubleClick() { performExpand(); openViewForm(); } @Override public void popupMenu(TreeViewer tv, Tree tree, Menu menu) { addEditMenu(menu, Messages.PatientAdapter_patient_label); addViewMenu(menu, Messages.PatientAdapter_patient_label); addDeleteMenu(menu, Messages.PatientAdapter_patient_label); if (isEditable()) { MenuItem mi = new MenuItem(menu, SWT.PUSH); mi.setText(Messages.PatientAdapter_add_cevent_label); mi.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { SimpleCEventInfo cevent = new SimpleCEventInfo(); cevent.cevent = new CollectionEvent(); cevent.cevent.setPatient(patient); CollectionEventAdapter ceventAdapter = new CollectionEventAdapter( null, cevent); ceventAdapter.openEntryForm(); } }); } } @Override public List<AbstractAdapterBase> search(Class<?> searchedClass, Integer objectId) { return findChildFromClass(searchedClass, objectId, CollectionEvent.class); } @Override protected CollectionEventAdapter createChildNode() { return new CollectionEventAdapter(this, null); } @Override protected CollectionEventAdapter createChildNode(Object child) { Assert.isTrue(child instanceof SimpleCEventInfo); return new CollectionEventAdapter(this, (SimpleCEventInfo) child); } @Override protected Map<Integer, ?> getChildrenObjects() throws Exception { return SessionManager.getAppService().doAction( new PatientGetSimpleCollectionEventInfosAction(patient.getId())) .getMap(); } @Override public String getEntryFormId() { return PatientEntryForm.ID; } @Override public String getViewFormId() { return PatientViewForm.ID; } @Override protected String getConfirmDeleteMessage() { return Messages.PatientAdapter_delete_confirm_msg; } public Patient getPatient() { return patient; } @Override public int compareTo(AbstractAdapterBase o) { if (o instanceof PatientAdapter) return patient.getPnumber().compareTo( ((PatientAdapter) o).patient.getPnumber()); return 0; } @Override public void setValue(Object value) { if (value instanceof SearchedPatientInfo) { SearchedPatientInfo pinfo = (SearchedPatientInfo) value; this.patient = pinfo.patient; this.study = pinfo.study; this.ceventsCount = pinfo.ceventsCount; if (patient.getId() != null) { setId(patient.getId()); init(); } } } @Override protected void runDelete() throws Exception { SessionManager.getAppService().doAction( new PatientDeleteAction(patient)); } }