ade771dc047acf51cc4be31fa65f55a487b0df0f
[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.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.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 }