From d6258880a5bcbcf01a6beae327404503b3ed28e7 Mon Sep 17 00:00:00 2001 From: Patrick Plitzner Date: Tue, 15 Dec 2015 08:16:00 +0100 Subject: [PATCH] Filter out disabled commands --- .../taxeditor/view/CdmViewerContextMenu.java | 75 +++++++++++-------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerContextMenu.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerContextMenu.java index baae7e71c..59082ad86 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerContextMenu.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerContextMenu.java @@ -43,67 +43,78 @@ public class CdmViewerContextMenu extends CompoundContributionItem { if(selection instanceof IStructuredSelection){ Object firstElement = ((IStructuredSelection) selection).getFirstElement(); Map availableViewers = CdmViewerUtil.getAvailableViewers(firstElement); - //if only one viewer/command is available then show only this one - if(availableViewers.size()==1){ - //else show a list of possible viewers/commands - Entry entry = availableViewers.entrySet().iterator().next(); - final String commandId = entry.getKey(); + Map enabledCommands = getEnabledCommands(availableViewers); + + //check if only one or multiple viewers/commands are available + if(enabledCommands.size()==1){ + Entry entry = enabledCommands.entrySet().iterator().next(); + final Command command = entry.getKey(); String viewerName = entry.getValue(); + MenuItem addItem = new MenuItem(menu, SWT.CASCADE); addItem.setText(String.format("Open (%s)", viewerName)); - addItem.addSelectionListener(new CommandInvoker(commandId, firstElement)) ; + addItem.addSelectionListener(new CommandInvoker(command, firstElement)) ; } - else if (availableViewers.size()>1){ - //else show a list of possible viewers/commands + else if(enabledCommands.size()>1){ MenuItem addItem = new MenuItem(menu, SWT.CASCADE); addItem.setText("Open in..."); Menu addMenu = new Menu(menu); addItem.setMenu(addMenu); - for(Entry entry:availableViewers.entrySet()){ - final String commandId = entry.getKey(); + for(Entry entry:enabledCommands.entrySet()){ + final Command command = entry.getKey(); String viewerName = entry.getValue(); + MenuItem menuItem = new MenuItem(addMenu, SWT.NONE); menuItem.setText(viewerName); - menuItem.addSelectionListener(new CommandInvoker(commandId, firstElement)) ; + menuItem.addSelectionListener(new CommandInvoker(command, firstElement)) ; } } } } + } }; return contributionItems; } + private Map getEnabledCommands(Map availableViewers) { + Map enabledCommands = new HashMap(); + for(Entry entry:availableViewers.entrySet()){ + final String commandId = entry.getKey(); + ICommandService commandService = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = commandService.getCommand(commandId); + if(command.isEnabled()){ + enabledCommands.put(command, entry.getValue()); + } + } + return enabledCommands; + } + private final class CommandInvoker extends SelectionAdapter { - private final String commandId; + private final Command command; private final Object selectedObject; - private CommandInvoker(String commandId, Object selectedObject) { - this.commandId = commandId; + private CommandInvoker(Command command, Object selectedObject) { + this.command = command; this.selectedObject = selectedObject; } @Override public void widgetSelected(SelectionEvent e) { - ICommandService commandService = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); - - Command command = commandService.getCommand(commandId); - if(command.isEnabled()) { - IHandlerService handlerService = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class); - Map params = new HashMap(); - if(selectedObject instanceof ICdmBase){ - params.put(commandId+".uuid", ((ICdmBase) selectedObject).getUuid()); - } - ParameterizedCommand parameterizedCommand = ParameterizedCommand.generateCommand(command, params); - try { - handlerService.executeCommand(parameterizedCommand, null); - } catch (NotDefinedException nde) { - throw new RuntimeException("Could not find open command: " + commandId); - } catch (Exception exception) { - MessagingUtils.error(getClass(), "An exception occured while trying execute "+commandId, exception); - } - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection(); + IHandlerService handlerService = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class); + Map params = new HashMap(); + if(selectedObject instanceof ICdmBase){ + params.put(command.getId()+".uuid", ((ICdmBase) selectedObject).getUuid()); + } + ParameterizedCommand parameterizedCommand = ParameterizedCommand.generateCommand(command, params); + try { + handlerService.executeCommand(parameterizedCommand, null); + } catch (NotDefinedException nde) { + throw new RuntimeException("Could not find open command: " + command.getId()); + } catch (Exception exception) { + MessagingUtils.error(getClass(), "An exception occured while trying execute "+command.getId(), exception); } + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection(); } } -- 2.34.1