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.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 org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.IHandlerService; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.wrappers.ClinicWrapper; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.common.wrappers.UserWrapper; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.server.applicationservice.BiobankApplicationService; import edu.ualberta.med.biobank.treeview.AbstractAdapterBase; import edu.ualberta.med.biobank.treeview.AdapterBase; import gov.nih.nci.system.applicationservice.ApplicationException; public class SessionAdapter extends AdapterBase { private static final String LOGOUT_COMMAND_ID = "edu.ualberta.med.biobank.commands.logout"; //$NON-NLS-1$ public static final int CLINICS_BASE_NODE_ID = 0; public static final int SITES_NODE_ID = 1; public static final int STUDIES_NODE_ID = 2; public static final int RESEARCH_GROUPS_BASE_NODE_ID = 3; private BiobankApplicationService appService; private UserWrapper user; private String serverName; public SessionAdapter(AdapterBase parent, BiobankApplicationService appService, int sessionId, String serverName, UserWrapper user) { super(parent, null); this.appService = appService; setId(sessionId); if (user.getLogin().isEmpty()) { setLabel(serverName); } else { setLabel(serverName + " [" + user.getLogin() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ } this.serverName = serverName; this.user = user; addSubNodes(); } private void addSubNodes() { if (!SessionManager.getInstance().isConnected()) return; addChild(new StudyMasterGroup(this, STUDIES_NODE_ID)); addChild(new ClinicMasterGroup(this, CLINICS_BASE_NODE_ID)); ResearchGroupMasterGroup rgroups = new ResearchGroupMasterGroup(this, RESEARCH_GROUPS_BASE_NODE_ID); addChild(rgroups); rgroups.performExpand(); SiteGroup siteGroup = new SiteGroup(this, SITES_NODE_ID); addChild(siteGroup); siteGroup.performExpand(); } @Override public void rebuild() { removeAll(); addSubNodes(); } @Override public BiobankApplicationService getAppService() { return appService; } public void resetAppService() { appService = null; } @Override protected String getLabelInternal() { return ""; //$NON-NLS-1$ } @Override public String getTooltipTextInternal() { if (appService != null) { return Messages.SessionAdapter_current_session_label + appService.getServerVersion(); } return ""; //$NON-NLS-1$ } private SiteGroup getSitesGroupNode() { SiteGroup adapter = (SiteGroup) getChild(SITES_NODE_ID); Assert.isNotNull(adapter); return adapter; } private StudyMasterGroup getStudiesGroupNode() { StudyMasterGroup adapter = (StudyMasterGroup) getChild(STUDIES_NODE_ID); Assert.isNotNull(adapter); return adapter; } private ClinicMasterGroup getClinicGroupNode() { ClinicMasterGroup adapter = (ClinicMasterGroup) getChild(CLINICS_BASE_NODE_ID); Assert.isNotNull(adapter); return adapter; } private ResearchGroupMasterGroup getResearchGroupGroupNode() { ResearchGroupMasterGroup adapter = (ResearchGroupMasterGroup) getChild(RESEARCH_GROUPS_BASE_NODE_ID); Assert.isNotNull(adapter); return adapter; } @Override public void popupMenu(TreeViewer tv, Tree tree, Menu menu) { MenuItem mi = new MenuItem(menu, SWT.PUSH); mi.setText(Messages.SessionAdapter_logout_label); mi.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { IHandlerService handlerService = (IHandlerService) PlatformUI .getWorkbench().getService(IHandlerService.class); try { handlerService.executeCommand(LOGOUT_COMMAND_ID, null); } catch (Exception ex) { throw new RuntimeException(LOGOUT_COMMAND_ID + " not found"); //$NON-NLS-1$ } } }); } public UserWrapper getUser() { return user; } public String getServerName() { return serverName; } @Override public List<AbstractAdapterBase> search(Class<?> searchedClass, Integer objectId) { return searchChildren(searchedClass, objectId); } @Override protected AdapterBase createChildNode() { return new SiteAdapter(this, null); } @Override protected AdapterBase createChildNode(Object child) { return null; } @Override protected List<? extends ModelWrapper<?>> getWrapperChildren() { return null; } @Override public String getEntryFormId() { return null; } @Override public String getViewFormId() { return null; } public List<ClinicWrapper> getClinicCollection() { try { return ClinicWrapper.getAllClinics(appService); } catch (ApplicationException e) { BgcPlugin.openAsyncError(Messages.SessionAdapter_load_error_title, e); } return null; } public void addStudy() { StudyMasterGroup g = getStudiesGroupNode(); if (g != null) { g.addStudy(); } } public void addClinic() { ClinicMasterGroup g = getClinicGroupNode(); if (g != null) { g.addClinic(); } } public void addSite() { SiteGroup s = getSitesGroupNode(); if (s != null) s.addSite(); } public void addResearchGroup() { ResearchGroupMasterGroup g = getResearchGroupGroupNode(); if (g != null) { g.addResearchGroup(); } } @Override public int compareTo(AbstractAdapterBase o) { return 0; } }