3033125181265de46d0685f985b266e8184c8f73
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / dataimport / DataImportEditor.java
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.model.common.IIdentifiableEntity;
32 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
33 import eu.etaxonomy.taxeditor.model.IContextListener;
34 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
35 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
36 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
37 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
38 import eu.etaxonomy.taxeditor.store.CdmStore;
39
40 /**
41 * Editor which shows a list of "data" that can be imported into the CDM
42 * @author pplitzner
43 * @date 20.09.2013
44 *
45 */
46 public abstract class DataImportEditor<T extends IIdentifiableEntity> extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider,
47 IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener{
48
49 private ConversationHolder conversation;
50
51 private TableViewer tableViewer;
52
53 /**
54 * Constructs a new DataImportEditor and registers it to listen to context changes
55 */
56 public DataImportEditor() {
57 CdmStore.getContextManager().addContextListener(this);
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 BioCase 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 //make sure to bind again if maybe in another view the conversation was unbound
88 if(!conversation.isBound()){
89 conversation.bind();
90 }
91 }
92
93
94 /* (non-Javadoc)
95 * @see org.eclipse.ui.texteditor.AbstractTextEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
96 */
97 @Override
98 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
99 setSite(site);
100 setInput(input);
101 setPartName(input.getName());
102 setTitleToolTip(input.getName());
103 conversation = ((DataImportEditorInput)input).getConversationHolder();
104 }
105
106 /* (non-Javadoc)
107 * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
108 */
109 @Override
110 public void dispose() {
111 super.dispose();
112 CdmStore.getContextManager().removeContextListener(this);
113 }
114
115 /* (non-Javadoc)
116 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
117 */
118 @Override
119 public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
120 //nothing
121 }
122
123 /* (non-Javadoc)
124 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
125 */
126 @Override
127 public void contextStop(IMemento memento, IProgressMonitor monitor) {
128 //nothing
129 }
130
131 /* (non-Javadoc)
132 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
133 */
134 @Override
135 public void contextStart(IMemento memento, IProgressMonitor monitor) {
136 //nothing
137 }
138
139 /* (non-Javadoc)
140 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
141 */
142 @Override
143 public void contextRefresh(IProgressMonitor monitor) {
144 IEditorInput editorInput = getEditorInput();
145 setInput(editorInput);
146 if(editorInput instanceof DataImportEditorInput){
147 tableViewer.getTable().clearAll();
148 Collection<T> results = ((DataImportEditorInput<T>) editorInput).getResults();
149 if(results!=null){
150 for(T specimen:results){
151 TableItem tableItem = new TableItem(tableViewer.getTable(), SWT.NONE);
152 tableItem.setText(specimen.generateTitle());
153 tableItem.setData(specimen);
154 }
155 }
156 }
157 }
158
159 /* (non-Javadoc)
160 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
161 */
162 @Override
163 public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
164 if(conversation!=null &&!conversation.isClosed()) {
165 conversation.close();
166 }
167 }
168
169 /* (non-Javadoc)
170 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
171 */
172 @Override
173 public void update(CdmDataChangeMap changeEvents) {
174 //nothing
175 }
176
177 /* (non-Javadoc)
178 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
179 */
180 @Override
181 public ConversationHolder getConversationHolder() {
182 return conversation;
183 }
184
185 /* (non-Javadoc)
186 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
187 */
188 @Override
189 public void changed(Object element) {
190 // cannot be changed
191 }
192
193 /* (non-Javadoc)
194 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
195 */
196 @Override
197 public void doSave(IProgressMonitor monitor) {
198 }
199
200 /* (non-Javadoc)
201 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
202 */
203 @Override
204 public void doSaveAs() {
205 }
206
207 /* (non-Javadoc)
208 * @see org.eclipse.ui.part.EditorPart#isDirty()
209 */
210 @Override
211 public boolean isDirty() {
212 return false;
213 }
214
215 /* (non-Javadoc)
216 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
217 */
218 @Override
219 public boolean isSaveAsAllowed() {
220 return false;
221 }
222
223 }