From 4c16f29659b6eeec7c45a09e68214cc122e92169 Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Mon, 20 Jul 2015 18:31:02 +0200
Subject: [PATCH] Generalize cdmViewer extension point
Refactored parameters to be based on commands.
---
...u.etaxonomy.taxeditor.store.cdmViewer.exsd | 40 ++++++++++++++++++-
.../taxeditor/view/CdmViewerContextMenu.java | 40 +++++++++++++++----
.../taxeditor/view/CdmViewerUtil.java | 27 ++++++++++++-
3 files changed, 98 insertions(+), 9 deletions(-)
diff --git a/eu.etaxonomy.taxeditor.store/schema/eu.etaxonomy.taxeditor.store.cdmViewer.exsd b/eu.etaxonomy.taxeditor.store/schema/eu.etaxonomy.taxeditor.store.cdmViewer.exsd
index 42791ec3b..b233e53f9 100644
--- a/eu.etaxonomy.taxeditor.store/schema/eu.etaxonomy.taxeditor.store.cdmViewer.exsd
+++ b/eu.etaxonomy.taxeditor.store/schema/eu.etaxonomy.taxeditor.store.cdmViewer.exsd
@@ -21,7 +21,8 @@
-
+
+
@@ -72,6 +73,43 @@
+
+
+
+ Maps a viewing class, like editors or views, to a command which opens it.
+
+
+
+
+
+
+ The command which opens the viewer to show the selected object
+
+
+
+
+
+
+
+
+
+ The name of the viewer which shows the selected element
+
+
+
+
+
+
+ The class of the selected element
+
+
+
+
+
+
+
+
+
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 712bec9d8..f2eef9fe3 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
@@ -3,6 +3,8 @@ package eu.etaxonomy.taxeditor.view;
import java.util.Map;
import java.util.Map.Entry;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.viewers.ISelection;
@@ -15,6 +17,10 @@ import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
/**
* Generic context menu for opening elements in the taxeditor.
@@ -28,20 +34,40 @@ public class CdmViewerContextMenu extends CompoundContributionItem {
new ContributionItem() {
@Override
public void fill(Menu menu, int index) {
+ final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ final ISelection selection = window.getActivePage().getSelection();
+
MenuItem addItem = new MenuItem(menu, SWT.CASCADE);
addItem.setText("Open in...");
Menu addMenu = new Menu(menu);
addItem.setMenu(addMenu);
- final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- final ISelection selection = window.getActivePage().getSelection();
if(selection instanceof IStructuredSelection){
Object firstElement = ((IStructuredSelection) selection).getFirstElement();
- Map, String>, ICdmViewer> nameViewerMap = CdmViewerUtil.getNameViewerMap(firstElement);
- for(Entry, String>, ICdmViewer> entry:nameViewerMap.entrySet()){
- Entry, String> viewerClass = entry.getKey();
+ Map availableViewers = CdmViewerUtil.getAvailableViewers(firstElement);
+ for(Entry entry:availableViewers.entrySet()){
+ final String commandId = entry.getKey();
+ String viewerName = entry.getValue();
MenuItem menuItem = new MenuItem(addMenu, SWT.NONE);
- menuItem.setText(viewerClass.getValue());
- menuItem.addSelectionListener(new OpenInViewerListener(entry.getValue(), firstElement, viewerClass.getKey()));
+ menuItem.setText(viewerName);
+ menuItem.addSelectionListener(new SelectionAdapter() {
+
+ @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);
+ try {
+ handlerService.executeCommand(commandId, 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);
+ }
+ }
+ }
+ }) ;
}
}
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerUtil.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerUtil.java
index 6f5c6f67a..8fc2e73e3 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerUtil.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/CdmViewerUtil.java
@@ -32,7 +32,7 @@ public class CdmViewerUtil {
public static Map, String>, ICdmViewer> getNameViewerMap(Object input){
Map, String>, ICdmViewer> nameViewerMap = new HashMap, String>, ICdmViewer>();
-
+
IExtensionRegistry reg = Platform.getExtensionRegistry();
IConfigurationElement[] extensions = reg
.getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.cdmViewer");
@@ -56,4 +56,29 @@ public class CdmViewerUtil {
return nameViewerMap;
}
+ public static Map getAvailableViewers(Object input){
+ Map commandViewerNameMap = new HashMap();
+
+ IExtensionRegistry reg = Platform.getExtensionRegistry();
+ IConfigurationElement[] extensions = reg
+ .getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.cdmViewer");
+ for (IConfigurationElement configElement : extensions) {
+ if(configElement.getName().equals("viewCommandMapping")){
+ String commandId = configElement.getAttribute("commandId");
+ String viewerName = configElement.getAttribute("viewerName");
+ try {
+ Object selectionObject = configElement.createExecutableExtension("selection");
+ System.out.println(selectionObject);
+ Class extends Object> selectionClass = selectionObject.getClass();
+ if(input.getClass().isAssignableFrom(selectionClass)){
+ commandViewerNameMap.put(commandId, viewerName);
+ }
+ } catch (CoreException e) {
+ MessagingUtils.error(CdmViewerChooser.class, "Could not initalize selection class element of cdmViewer extension", e);
+ }
+ }
+ }
+ return commandViewerNameMap;
+ }
+
}
--
2.34.1