package edu.ualberta.med.biobank.treeview.admin; 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.custom.BusyIndicator; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Tree; import org.springframework.remoting.RemoteConnectFailureException; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.site.SiteGetTopContainersAction; import edu.ualberta.med.biobank.common.permission.container.ContainerCreatePermission; import edu.ualberta.med.biobank.common.wrappers.ContainerTypeWrapper; import edu.ualberta.med.biobank.common.wrappers.ContainerWrapper; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.common.wrappers.SiteWrapper; import edu.ualberta.med.biobank.gui.common.BgcLogger; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.treeview.AbstractAdapterBase; import edu.ualberta.med.biobank.treeview.AdapterBase; import edu.ualberta.med.biobank.treeview.listeners.AdapterChangedEvent; import gov.nih.nci.system.applicationservice.ApplicationException; public class ContainerGroup extends AdapterBase { private static BgcLogger LOGGER = BgcLogger.getLogger(ContainerGroup.class .getName()); private List<Container> topContainers = null; private boolean createAllowed; public ContainerGroup(SiteAdapter parent, int id) { super(parent, id, Messages.ContainerGroup_containers_node_label, true); try { this.createAllowed = SessionManager.getAppService().isAllowed( new ContainerCreatePermission(parent.getId())); } catch (ApplicationException e) { BgcPlugin.openAsyncError("Error", "Unable to retrieve permissions"); } } @Override protected String getLabelInternal() { return null; } @Override public void executeDoubleClick() { performExpand(); } @Override public void performExpand() { final SiteAdapter siteAdapter = (SiteAdapter) getParent(); BusyIndicator.showWhile(Display.getDefault(), new Runnable() { @Override public void run() { try { topContainers = SessionManager .getAppService() .doAction( new SiteGetTopContainersAction(siteAdapter .getId())).getList(); ContainerGroup.super.performExpand(); } catch (Exception e) { String text = getClass().getName(); if (getModelObject() != null) { text = getModelObject().toString(); } LOGGER.error( "Error while loading children of node " + text, e); //$NON-NLS-1$ } } }); } @Override public void popupMenu(TreeViewer tv, Tree tree, Menu menu) { if (createAllowed) { MenuItem mi = new MenuItem(menu, SWT.PUSH); mi.setText(Messages.ContainerGroup_add_label); mi.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { addContainer(ContainerGroup.this .getParentFromClass(SiteAdapter.class), false); } }); } } @Override public String getTooltipTextInternal() { return null; } @Override public List<AbstractAdapterBase> search(Class<?> searchedClass, Integer objectId) { return findChildFromClass(searchedClass, objectId, ContainerTypeWrapper.class); } @Override protected AdapterBase createChildNode() { return new ContainerAdapter(this, null); } @Override protected AdapterBase createChildNode(Object child) { Assert.isTrue(child instanceof ContainerWrapper); return new ContainerAdapter(this, (ContainerWrapper) child); } @Override protected List<? extends ModelWrapper<?>> getWrapperChildren() throws Exception { final SiteAdapter siteAdapter = (SiteAdapter) getParent(); topContainers = SessionManager.getAppService().doAction( new SiteGetTopContainersAction(siteAdapter.getId())).getList(); return ModelWrapper.wrapModelCollection(SessionManager.getAppService(), topContainers, ContainerWrapper.class); } @Override public void notifyListeners(AdapterChangedEvent event) { getParent().notifyListeners(event); } public void addContainer(SiteAdapter siteAdapter, boolean hasPreviousForm) { try { SiteWrapper site = (SiteWrapper) siteAdapter.getModelObject(); List<ContainerTypeWrapper> top = ContainerTypeWrapper .getTopContainerTypesInSite(SessionManager.getAppService(), site); if (top.size() == 0) { BgcPlugin.openError(Messages.ContainerGroup_create_error_title, Messages.ContainerGroup_create_error_msg); } else { ContainerWrapper c = new ContainerWrapper( SessionManager.getAppService()); c.setSite(site); ContainerAdapter adapter = new ContainerAdapter( siteAdapter.getContainersGroupNode(), c); adapter.openEntryForm(hasPreviousForm); } } catch (final RemoteConnectFailureException exp) { BgcPlugin.openRemoteConnectErrorMessage(exp); } catch (Exception e) { LOGGER.error("BioBankFormBase.createPartControl Error", e); //$NON-NLS-1$ } } @Override public String getEntryFormId() { return null; } @Override public String getViewFormId() { return null; } @Override public int compareTo(AbstractAdapterBase o) { return 0; } }