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