package edu.ualberta.med.biobank.handlers; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.WorkbenchException; import org.eclipse.ui.console.IConsoleConstants; import edu.ualberta.med.biobank.BiobankPlugin; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.wrappers.UserWrapper; import edu.ualberta.med.biobank.forms.input.FormInput; import edu.ualberta.med.biobank.gui.common.handlers.LogoutSensitiveHandler; import edu.ualberta.med.biobank.rcp.perspective.LinkAssignPerspective; import edu.ualberta.med.biobank.treeview.AdapterBase; /** * Open a form in patient administration like scan link, scan assign or cabinet * like/assign */ public abstract class LinkAssignCommonHandler extends LogoutSensitiveHandler implements IHandler { public Object openLinkAssignPerspective(String editorId, AdapterBase adapter) throws ExecutionException { IWorkbench workbench = BiobankPlugin.getDefault().getWorkbench(); try { if (workbench.getActiveWorkbenchWindow().getActivePage() .closeAllEditors(true)) { workbench.showPerspective(LinkAssignPerspective.ID, workbench.getActiveWorkbenchWindow()); IWorkbenchPage page = workbench.getActiveWorkbenchWindow() .getActivePage(); // open the editor AdapterBase.openForm(new FormInput(adapter), editorId, true); hideConsoleViewIcons(page); } } catch (WorkbenchException e) { throw new ExecutionException( Messages.LinkAssignCommonHandler_link_assign_open_error_msg, e); } return null; } @Override public boolean isEnabled() { return canUserPerformAction(SessionManager.getUser()); } protected abstract boolean canUserPerformAction(UserWrapper user); private void hideConsoleViewIcons(IWorkbenchPage activePage) { // Remove buttons in the console view toolbar // TODO can we do something nicer ? IViewPart viewPart = activePage .findView(IConsoleConstants.ID_CONSOLE_VIEW); if (viewPart != null) { IViewSite viewSite = viewPart.getViewSite(); IActionBars actionBars = viewSite.getActionBars(); IToolBarManager toolBarManager = actionBars.getToolBarManager(); IContributionItem[] contributionItems = toolBarManager.getItems(); contributionItems = toolBarManager.getItems(); for (int i = 0; i < contributionItems.length; i++) if (i >= 2) toolBarManager.remove(contributionItems[i]); } } }