Project

General

Profile

Download (7.49 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2015 EDIT
4
 * European Distributed Institute of Taxonomy
5
 * http://www.e-taxonomy.eu
6
 *
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.
9
 */
10
package eu.etaxonomy.taxeditor.view;
11

    
12
import java.util.HashMap;
13
import java.util.Map;
14
import java.util.Map.Entry;
15

    
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;
38

    
39
import eu.etaxonomy.taxeditor.model.MessagingUtils;
40
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
41

    
42
/**
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.
45
 *
46
 * @author pplitzner
47
 * @date Feb 23, 2015
48
 *
49
 */
50
public class CdmViewerChooser extends PopupDialog implements ISelectionChangedListener, ILabelProvider{
51

    
52
    private Object input;
53
    private Map<Entry<Class<?>, String>, ICdmViewer> nameViewerMap;
54
    private ExecutionEvent executionEvent;
55

    
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");
59
    }
60

    
61
    public CdmViewerChooser(Shell parent, int shellStyle, boolean takeFocusOnOpen, boolean persistSize,
62
            boolean persistLocation, boolean showDialogMenu, boolean showPersistActions, String titleText,
63
            String infoText) {
64
        super(parent, shellStyle, takeFocusOnOpen, persistSize, persistLocation, showDialogMenu, showPersistActions,
65
                titleText, infoText);
66
    }
67

    
68
    /**
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
72
     */
73
    public void chooseViewer(Object input, ExecutionEvent event){
74
        this.input = input;
75
        this.executionEvent = event;
76
        this.nameViewerMap = new HashMap<Entry<Class<?>, String>, ICdmViewer>();
77

    
78
        IExtensionRegistry reg = Platform.getExtensionRegistry();
79
        IConfigurationElement[] extensions = reg
80
                .getConfigurationElementsFor("eu.etaxonomy.taxeditor.store.cdmViewer");
81
        for (IConfigurationElement configElement : extensions) {
82
            try {
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);
89
                    }
90
                }
91
                else{
92
                    MessagingUtils.error(CdmViewerChooser.class, new Status(IStatus.ERROR, TaxeditorStorePlugin.PLUGIN_ID, "Could not load cdmViewer extension"));
93
                }
94
            } catch (CoreException e) {
95
                MessagingUtils.error(CdmViewerChooser.class, "Could not load cdmViewer extension", e);
96
            }
97
        }
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);
103
        }
104
        else{
105
            if(nameViewerMap.isEmpty()){
106
                this.setInfoText("No viewers registered for this input");
107
            }
108
            this.open();
109
        }
110
    }
111

    
112
    /* (non-Javadoc)
113
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
114
     */
115
    @Override
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());
122
        return parent;
123
    }
124

    
125
    /* (non-Javadoc)
126
     * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
127
     */
128
    @Override
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);
137
                this.close();
138
            }
139
        }
140
    }
141

    
142
    /* (non-Javadoc)
143
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
144
     */
145
    @Override
146
    public String getText(Object element) {
147
        String text = null;
148
        if(nameViewerMap.containsKey(element)){
149
            Entry<Class<?>, String> entry = (Entry<Class<?>, String>) element;
150
            text = entry.getValue();
151
        }
152
        return text;
153
    }
154

    
155
    /* (non-Javadoc)
156
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
157
     */
158
    @Override
159
    public void addListener(ILabelProviderListener listener) {
160
        // TODO Auto-generated method stub
161

    
162
    }
163

    
164
    /* (non-Javadoc)
165
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
166
     */
167
    @Override
168
    public void dispose() {
169
        // TODO Auto-generated method stub
170

    
171
    }
172

    
173
    /* (non-Javadoc)
174
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
175
     */
176
    @Override
177
    public boolean isLabelProperty(Object element, String property) {
178
        // TODO Auto-generated method stub
179
        return false;
180
    }
181

    
182
    /* (non-Javadoc)
183
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
184
     */
185
    @Override
186
    public void removeListener(ILabelProviderListener listener) {
187
        // TODO Auto-generated method stub
188

    
189
    }
190

    
191
    /* (non-Javadoc)
192
     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
193
     */
194
    @Override
195
    public Image getImage(Object element) {
196
        // TODO Auto-generated method stub
197
        return null;
198
    }
199

    
200
}
(6-6/7)