Revision 8e0d364a
Added by Patrick Plitzner almost 9 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerContextMenu.java | ||
---|---|---|
3 | 3 |
import java.util.Map; |
4 | 4 |
import java.util.Map.Entry; |
5 | 5 |
|
6 |
import org.eclipse.core.commands.Command; |
|
7 |
import org.eclipse.core.commands.common.NotDefinedException; |
|
6 | 8 |
import org.eclipse.jface.action.ContributionItem; |
7 | 9 |
import org.eclipse.jface.action.IContributionItem; |
8 | 10 |
import org.eclipse.jface.viewers.ISelection; |
... | ... | |
15 | 17 |
import org.eclipse.ui.IWorkbenchWindow; |
16 | 18 |
import org.eclipse.ui.PlatformUI; |
17 | 19 |
import org.eclipse.ui.actions.CompoundContributionItem; |
20 |
import org.eclipse.ui.commands.ICommandService; |
|
21 |
import org.eclipse.ui.handlers.IHandlerService; |
|
22 |
|
|
23 |
import eu.etaxonomy.taxeditor.model.MessagingUtils; |
|
18 | 24 |
|
19 | 25 |
/** |
20 | 26 |
* Generic context menu for opening elements in the taxeditor. |
... | ... | |
28 | 34 |
new ContributionItem() { |
29 | 35 |
@Override |
30 | 36 |
public void fill(Menu menu, int index) { |
37 |
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
|
38 |
final ISelection selection = window.getActivePage().getSelection(); |
|
39 |
|
|
31 | 40 |
MenuItem addItem = new MenuItem(menu, SWT.CASCADE); |
32 | 41 |
addItem.setText("Open in..."); |
33 | 42 |
Menu addMenu = new Menu(menu); |
34 | 43 |
addItem.setMenu(addMenu); |
35 |
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
|
36 |
final ISelection selection = window.getActivePage().getSelection(); |
|
37 | 44 |
if(selection instanceof IStructuredSelection){ |
38 | 45 |
Object firstElement = ((IStructuredSelection) selection).getFirstElement(); |
39 |
Map<Entry<Class<?>, String>, ICdmViewer> nameViewerMap = CdmViewerUtil.getNameViewerMap(firstElement); |
|
40 |
for(Entry<Entry<Class<?>, String>, ICdmViewer> entry:nameViewerMap.entrySet()){ |
|
41 |
Entry<Class<?>, String> viewerClass = entry.getKey(); |
|
46 |
Map<String, String> availableViewers = CdmViewerUtil.getAvailableViewers(firstElement); |
|
47 |
for(Entry<String, String> entry:availableViewers.entrySet()){ |
|
48 |
final String commandId = entry.getKey(); |
|
49 |
String viewerName = entry.getValue(); |
|
42 | 50 |
MenuItem menuItem = new MenuItem(addMenu, SWT.NONE); |
43 |
menuItem.setText(viewerClass.getValue()); |
|
44 |
menuItem.addSelectionListener(new OpenInViewerListener(entry.getValue(), firstElement, viewerClass.getKey())); |
|
51 |
menuItem.setText(viewerName); |
|
52 |
menuItem.addSelectionListener(new SelectionAdapter() { |
|
53 |
|
|
54 |
@Override |
|
55 |
public void widgetSelected(SelectionEvent e) { |
|
56 |
ICommandService commandService = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); |
|
57 |
|
|
58 |
Command command = commandService.getCommand(commandId); |
|
59 |
if(command.isEnabled()) { |
|
60 |
IHandlerService handlerService = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class); |
|
61 |
try { |
|
62 |
handlerService.executeCommand(commandId, null); |
|
63 |
} catch (NotDefinedException nde) { |
|
64 |
throw new RuntimeException("Could not find open command: " + commandId); |
|
65 |
} catch (Exception exception) { |
|
66 |
MessagingUtils.error(getClass(), "An exception occured while trying execute "+commandId, exception); |
|
67 |
} |
|
68 |
} |
|
69 |
} |
|
70 |
}) ; |
|
45 | 71 |
} |
46 | 72 |
} |
47 | 73 |
} |
Also available in: Unified diff
Generalize cdmViewer extension point
Refactored parameters to be based on commands.