package edu.ualberta.med.biobank.treeview.processing; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.osgi.util.NLS; 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.processingEvent.ProcessingEventDeleteAction; import edu.ualberta.med.biobank.common.formatters.NumberFormatter; import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventDeletePermission; import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventReadPermission; import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventUpdatePermission; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.common.wrappers.ProcessingEventWrapper; import edu.ualberta.med.biobank.forms.ProcessingEventEntryForm; import edu.ualberta.med.biobank.forms.ProcessingEventViewForm; import edu.ualberta.med.biobank.gui.common.BgcLogger; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.model.ProcessingEvent; import edu.ualberta.med.biobank.treeview.AbstractAdapterBase; import edu.ualberta.med.biobank.treeview.AdapterBase; import gov.nih.nci.system.applicationservice.ApplicationException; public class ProcessingEventAdapter extends AdapterBase { private static BgcLogger logger = BgcLogger .getLogger(ProcessingEventAdapter.class.getName()); public ProcessingEventAdapter(AdapterBase parent, ProcessingEventWrapper pEvent) { super(parent, pEvent); } @Override public void init() { try { ProcessingEventWrapper pevent = (ProcessingEventWrapper) getModelObject(); this.isDeletable = SessionManager.getAppService().isAllowed( new ProcessingEventDeletePermission(pevent.getId())); this.isReadable = SessionManager.getAppService() .isAllowed( new ProcessingEventReadPermission(pevent.getId())); this.isEditable = SessionManager.getAppService().isAllowed( new ProcessingEventUpdatePermission(pevent.getId())); } catch (ApplicationException e) { BgcPlugin.openAsyncError("Permission Error", "Unable to retrieve user permissions"); } } @Override public void executeDoubleClick() { performExpand(); openViewForm(); } @Override protected String getLabelInternal() { ProcessingEventWrapper pevent = (ProcessingEventWrapper) getModelObject(); Assert.isNotNull(pevent, "processing event is null"); //$NON-NLS-1$ String worksheet = pevent.getWorksheet(); String name = pevent.getFormattedCreatedAt() + (worksheet == null ? "" : " - #" + pevent.getWorksheet()); //$NON-NLS-1$ //$NON-NLS-2$ long count = -1; try { count = pevent.getSpecimenCount(true); } catch (Exception e) { logger.error("Problem counting specimens", e); //$NON-NLS-1$ } return name + " [" + NumberFormatter.format(count) + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } @Override public String getTooltipTextInternal() { ProcessingEventWrapper pevent = (ProcessingEventWrapper) getModelObject(); if (pevent == null) return Messages.ProvessingEventAdapter_tooltiptext; return NLS.bind(Messages.ProvessingEventAdapter_tooltiptext_withdate, pevent.getFormattedCreatedAt()); } @Override public void popupMenu(TreeViewer tv, Tree tree, Menu menu) { addEditMenu(menu, Messages.ProcessingEventAdapter_pevent_label); addViewMenu(menu, Messages.ProcessingEventAdapter_pevent_label); addDeleteMenu(menu, Messages.ProcessingEventAdapter_pevent_label); } @Override protected String getConfirmDeleteMessage() { return Messages.ProcessingEventAdapter_deleteMsg; } @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 getViewFormId() { return ProcessingEventViewForm.ID; } @Override public String getEntryFormId() { return ProcessingEventEntryForm.ID; } @Override public int compareTo(AbstractAdapterBase o) { if (o instanceof ProcessingEventAdapter) return internalCompareTo(o); return 0; } @Override public void runDelete() throws Exception { ProcessingEventDeleteAction action = new ProcessingEventDeleteAction((ProcessingEvent) getModelObject() .getWrappedObject()); SessionManager.getAppService().doAction(action); } }