Project

General

Profile

Download (7.29 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2013 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.editor.view.dataimport;
11

    
12
import java.util.Collection;
13

    
14
import org.eclipse.core.runtime.IProgressMonitor;
15
import org.eclipse.jface.action.MenuManager;
16
import org.eclipse.jface.viewers.TableViewer;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.widgets.Composite;
19
import org.eclipse.swt.widgets.Control;
20
import org.eclipse.swt.widgets.Menu;
21
import org.eclipse.swt.widgets.Table;
22
import org.eclipse.swt.widgets.TableItem;
23
import org.eclipse.ui.IEditorInput;
24
import org.eclipse.ui.IEditorSite;
25
import org.eclipse.ui.IMemento;
26
import org.eclipse.ui.PartInitException;
27
import org.eclipse.ui.part.EditorPart;
28

    
29
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
30
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
31
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
32
import eu.etaxonomy.taxeditor.model.IContextListener;
33
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
34
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
35
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
36
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38

    
39
/**
40
 * Editor which shows a list of "data" that can be imported into the CDM
41
 * @author pplitzner
42
 * @date 20.09.2013
43
 *
44
 */
45
public abstract class DataImportEditor<T> extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider,
46
IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener{
47

    
48
    private ConversationHolder conversation;
49

    
50
    private TableViewer tableViewer;
51

    
52
    /**
53
     * Constructs a new DataImportEditor and registers it to listen to context changes
54
     */
55
    public DataImportEditor() {
56
    }
57

    
58
    /* (non-Javadoc)
59
     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
60
     */
61
    @Override
62
    public void createPartControl(Composite parent) {
63

    
64
        Table table = new Table(parent, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
65
        table.setHeaderVisible(true);//TODO: set header title as query
66
        table.setLinesVisible(true);
67
        tableViewer = new TableViewer(table);
68

    
69
        // Propagate selection from viewer
70
        getSite().setSelectionProvider(tableViewer);
71

    
72
        //create context menu
73
        MenuManager menuManager = new MenuManager();
74
        getSite().registerContextMenu(menuManager, tableViewer);
75
        Control control = tableViewer.getControl();
76
        Menu menu = menuManager.createContextMenu(control);
77
        control.setMenu(menu);
78
    }
79

    
80
    /* (non-Javadoc)
81
     * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
82
     */
83
    @Override
84
    public void setFocus() {
85
        //make sure to bind again if maybe in another view the conversation was unbound
86
        if(!conversation.isBound()){
87
            conversation.bind();
88
        }
89
    }
90

    
91

    
92
    /* (non-Javadoc)
93
     * @see org.eclipse.ui.texteditor.AbstractTextEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
94
     */
95
    @Override
96
    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
97
        CdmStore.getContextManager().addContextListener(this);
98
        setSite(site);
99
        setInput(input);
100
        setPartName(input.getName());
101
        setTitleToolTip(input.getName());
102
        conversation = ((DataImportEditorInput<T>)input).getConversationHolder();
103
    }
104

    
105
    /* (non-Javadoc)
106
     * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
107
     */
108
    @Override
109
    public void dispose() {
110
        super.dispose();
111
        CdmStore.getContextManager().removeContextListener(this);
112
    }
113

    
114
    /* (non-Javadoc)
115
     * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
116
     */
117
    @Override
118
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
119
        //nothing
120
    }
121

    
122
    /* (non-Javadoc)
123
     * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
124
     */
125
    @Override
126
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
127
        //nothing
128
    }
129

    
130
    /* (non-Javadoc)
131
     * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
132
     */
133
    @Override
134
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
135
        //nothing
136
    }
137

    
138
    /* (non-Javadoc)
139
     * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
140
     */
141
    @Override
142
    public void contextRefresh(IProgressMonitor monitor) {
143
        IEditorInput editorInput = getEditorInput();
144
        setInput(editorInput);
145
        if(editorInput instanceof DataImportEditorInput){
146
            tableViewer.getTable().removeAll();
147
            Collection<T> results = ((DataImportEditorInput<T>) editorInput).getResults();
148
            if(results!=null){
149
                for(T item:results){
150
                    TableItem tableItem = new TableItem(tableViewer.getTable(), SWT.NONE);
151
                    tableItem.setText(getTextForTableItem(item));
152
                    tableItem.setData(item);
153
                }
154
            }
155
        }
156
    }
157

    
158
    protected abstract String getTextForTableItem(T item);
159

    
160
    /* (non-Javadoc)
161
     * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
162
     */
163
    @Override
164
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
165
        if(conversation!=null && conversation.isBound() && !conversation.isClosed()) {
166
            conversation.close();
167
        }
168
    }
169

    
170
    /* (non-Javadoc)
171
     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
172
     */
173
    @Override
174
    public void update(CdmDataChangeMap changeEvents) {
175
        //nothing
176
    }
177

    
178
    /* (non-Javadoc)
179
     * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
180
     */
181
    @Override
182
    public ConversationHolder getConversationHolder() {
183
        return conversation;
184
    }
185

    
186
    /* (non-Javadoc)
187
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
188
     */
189
    @Override
190
    public void changed(Object element) {
191
        // cannot be changed
192
    }
193

    
194
    /* (non-Javadoc)
195
     * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
196
     */
197
    @Override
198
    public void doSave(IProgressMonitor monitor) {
199
    }
200

    
201
    /* (non-Javadoc)
202
     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
203
     */
204
    @Override
205
    public void doSaveAs() {
206
    }
207

    
208
    /* (non-Javadoc)
209
     * @see org.eclipse.ui.part.EditorPart#isDirty()
210
     */
211
    @Override
212
    public boolean isDirty() {
213
        return false;
214
    }
215

    
216
    /* (non-Javadoc)
217
     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
218
     */
219
    @Override
220
    public boolean isSaveAsAllowed() {
221
        return false;
222
    }
223

    
224
}
(2-2/13)