Project

General

Profile

Download (7.81 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2013 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.view.dataimport;
10

    
11
import java.util.Collection;
12

    
13
import org.apache.log4j.Logger;
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.IDirtyMarkable;
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, IDirtyMarkable,
46
IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener{
47

    
48
    protected Logger logger = Logger.getLogger(DataImportEditor.class);
49

    
50
    private ConversationHolder conversation;
51

    
52
    private TableViewer tableViewer;
53

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

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

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

    
71
        // Propagate selection from viewer
72
        getSite().setSelectionProvider(tableViewer);
73

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

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

    
96

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

    
110
    /* (non-Javadoc)
111
     * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
112
     */
113
    @Override
114
    public void dispose() {
115
        super.dispose();
116
        CdmStore.getContextManager().removeContextListener(this);
117
    }
118

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

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

    
135
    /* (non-Javadoc)
136
     * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
137
     */
138
    @Override
139
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
140
        //nothing
141
    }
142

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

    
163
    /**
164
     * Returns the text label of the given item.
165
     * @param item the item for which the label should be returnes
166
     * @return the label of the item
167
     */
168
    protected abstract String getTextForTableItem(T item);
169

    
170
    /* (non-Javadoc)
171
     * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
172
     */
173
    @Override
174
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
175
        if(conversation!=null && conversation.isBound() && !conversation.isClosed()) {
176
            conversation.close();
177
        }
178
    }
179

    
180
    /* (non-Javadoc)
181
     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
182
     */
183
    @Override
184
    public void update(CdmDataChangeMap changeEvents) {
185
        //nothing
186
    }
187

    
188
    /* (non-Javadoc)
189
     * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
190
     */
191
    @Override
192
    public ConversationHolder getConversationHolder() {
193
        return conversation;
194
    }
195

    
196
    /* (non-Javadoc)
197
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
198
     */
199
    @Override
200
    public void changed(Object element) {
201
        // cannot be changed
202
    }
203

    
204
    /* (non-Javadoc)
205
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
206
     */
207
    @Override
208
    public void forceDirty() {
209
        // cannot be dirty
210
    }
211

    
212
    /* (non-Javadoc)
213
     * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
214
     */
215
    @Override
216
    public void doSave(IProgressMonitor monitor) {
217
    }
218

    
219
    /* (non-Javadoc)
220
     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
221
     */
222
    @Override
223
    public void doSaveAs() {
224
    }
225

    
226
    /* (non-Javadoc)
227
     * @see org.eclipse.ui.part.EditorPart#isDirty()
228
     */
229
    @Override
230
    public boolean isDirty() {
231
        return false;
232
    }
233

    
234
    /* (non-Javadoc)
235
     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
236
     */
237
    @Override
238
    public boolean isSaveAsAllowed() {
239
        return false;
240
    }
241

    
242
}
(2-2/17)