3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.view
;
12 import java
.util
.HashMap
;
14 import java
.util
.Map
.Entry
;
16 import org
.eclipse
.core
.commands
.ExecutionEvent
;
17 import org
.eclipse
.core
.runtime
.CoreException
;
18 import org
.eclipse
.core
.runtime
.IConfigurationElement
;
19 import org
.eclipse
.core
.runtime
.IExtensionRegistry
;
20 import org
.eclipse
.core
.runtime
.IStatus
;
21 import org
.eclipse
.core
.runtime
.Platform
;
22 import org
.eclipse
.core
.runtime
.Status
;
23 import org
.eclipse
.jface
.dialogs
.PopupDialog
;
24 import org
.eclipse
.jface
.viewers
.ArrayContentProvider
;
25 import org
.eclipse
.jface
.viewers
.ILabelProvider
;
26 import org
.eclipse
.jface
.viewers
.ILabelProviderListener
;
27 import org
.eclipse
.jface
.viewers
.ISelection
;
28 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
29 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
30 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
31 import org
.eclipse
.jface
.viewers
.TableViewer
;
32 import org
.eclipse
.swt
.SWT
;
33 import org
.eclipse
.swt
.graphics
.Image
;
34 import org
.eclipse
.swt
.widgets
.Composite
;
35 import org
.eclipse
.swt
.widgets
.Control
;
36 import org
.eclipse
.swt
.widgets
.Shell
;
37 import org
.eclipse
.swt
.widgets
.Table
;
39 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
40 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
43 * This class provides the possibility to choose from a list of possible viewers
44 * which can be opened for a given input in a popup dialog.
50 public class CdmViewerChooser
extends PopupDialog
implements ISelectionChangedListener
, ILabelProvider
{
53 private Map
<Entry
<Class
<?
>, String
>, ICdmViewer
> nameViewerMap
;
54 private ExecutionEvent executionEvent
;
56 public CdmViewerChooser(Shell parentShell
) {
57 this(parentShell
, SWT
.RESIZE
| SWT
.ON_TOP
, true, false, false, false, false, "Open in ...",
58 "Clicking will open the selected viewer");
61 public CdmViewerChooser(Shell parent
, int shellStyle
, boolean takeFocusOnOpen
, boolean persistSize
,
62 boolean persistLocation
, boolean showDialogMenu
, boolean showPersistActions
, String titleText
,
64 super(parent
, shellStyle
, takeFocusOnOpen
, persistSize
, persistLocation
, showDialogMenu
, showPersistActions
,
69 * Opens a popup dialog with all possible viewers for the given input.
70 * @param input the input for which the viewers are listed
71 * @param event the {@link ExecutionEvent} if invoked via command/handler
73 public void chooseViewer(Object input
, ExecutionEvent event
){
75 this.executionEvent
= event
;
76 this.nameViewerMap
= new HashMap
<Entry
<Class
<?
>, String
>, ICdmViewer
>();
78 IExtensionRegistry reg
= Platform
.getExtensionRegistry();
79 IConfigurationElement
[] extensions
= reg
80 .getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.cdmViewer");
81 for (IConfigurationElement configElement
: extensions
) {
83 Object object
= configElement
.createExecutableExtension("class");
84 if(object
instanceof ICdmViewer
){
85 ICdmViewer cdmViewer
= (ICdmViewer
)object
;
86 Map
<Class
<?
>, String
> viewerClasses
= cdmViewer
.getViewerClasses(input
);
87 for (Entry
<Class
<?
>, String
> entry
: viewerClasses
.entrySet()) {
88 nameViewerMap
.put(entry
, cdmViewer
);
92 MessagingUtils
.error(CdmViewerChooser
.class, new Status(IStatus
.ERROR
, TaxeditorStorePlugin
.PLUGIN_ID
, "Could not load cdmViewer extension"));
94 } catch (CoreException e
) {
95 MessagingUtils
.error(CdmViewerChooser
.class, "Could not load cdmViewer extension", e
);
98 //if only one editor is available then open it
99 if(nameViewerMap
.size()==1){
100 Entry
<Class
<?
>, String
> next
= nameViewerMap
.keySet().iterator().next();
101 ICdmViewer cdmViewer
= nameViewerMap
.get(next
);
102 cdmViewer
.show(input
, next
.getKey(), event
);
105 if(nameViewerMap
.isEmpty()){
106 this.setInfoText("No viewers registered for this input");
113 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
116 protected Control
createDialogArea(Composite parent
) {
117 TableViewer viewer
= new TableViewer(new Table(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
| SWT
.FULL_SELECTION
));
118 viewer
.setContentProvider(new ArrayContentProvider());
119 viewer
.setLabelProvider(this);
120 viewer
.addSelectionChangedListener(this);
121 viewer
.setInput(nameViewerMap
.keySet());
126 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
129 public void selectionChanged(SelectionChangedEvent event
) {
130 ISelection selection
= event
.getSelection();
131 if(selection
instanceof IStructuredSelection
){
132 Object firstElement
= ((IStructuredSelection
) selection
).getFirstElement();
133 if(nameViewerMap
.containsKey(firstElement
)){
134 Entry
<Class
<?
>, String
> entry
= (Entry
<Class
<?
>, String
>)firstElement
;
135 ICdmViewer cdmViewer
= nameViewerMap
.get(entry
);
136 cdmViewer
.show(input
, entry
.getKey(), this.executionEvent
);
143 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
146 public String
getText(Object element
) {
148 if(nameViewerMap
.containsKey(element
)){
149 Entry
<Class
<?
>, String
> entry
= (Entry
<Class
<?
>, String
>) element
;
150 text
= entry
.getValue();
156 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
159 public void addListener(ILabelProviderListener listener
) {
160 // TODO Auto-generated method stub
165 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
168 public void dispose() {
169 // TODO Auto-generated method stub
174 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
177 public boolean isLabelProperty(Object element
, String property
) {
178 // TODO Auto-generated method stub
183 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
186 public void removeListener(ILabelProviderListener listener
) {
187 // TODO Auto-generated method stub
192 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
195 public Image
getImage(Object element
) {
196 // TODO Auto-generated method stub