2 * Copyright (C) 2013 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.view
.dataimport
;
11 import java
.util
.Collection
;
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
;
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
;
40 * Editor which shows a list of "data" that can be imported into the CDM
45 public abstract class DataImportEditor
<T
> extends EditorPart
implements IPartContentHasFactualData
, IDirtyMarkable
,
46 IConversationEnabled
, IPartContentHasDetails
, IPartContentHasSupplementalData
, IContextListener
{
48 protected Logger logger
= Logger
.getLogger(DataImportEditor
.class);
50 private ConversationHolder conversation
;
52 private TableViewer tableViewer
;
55 * Constructs a new DataImportEditor and registers it to listen to context changes
57 public DataImportEditor() {
61 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
64 public void createPartControl(Composite parent
) {
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
);
71 // Propagate selection from viewer
72 getSite().setSelectionProvider(tableViewer
);
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
);
83 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
86 public void setFocus() {
87 tableViewer
.getControl().setFocus();
88 //make sure to bind again if maybe in another view the conversation was unbound
89 if(!conversation
.isBound()){
96 * @see org.eclipse.ui.texteditor.AbstractTextEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
99 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
100 CdmStore
.getContextManager().addContextListener(this);
103 setPartName(input
.getName());
104 setTitleToolTip(input
.getName());
105 conversation
= ((DataImportEditorInput
<T
>)input
).getConversationHolder();
109 * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
112 public void dispose() {
114 CdmStore
.getContextManager().removeContextListener(this);
118 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
121 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
126 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
129 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
134 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
137 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
142 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
145 public void contextRefresh(IProgressMonitor monitor
) {
146 IEditorInput editorInput
= getEditorInput();
147 setInput(editorInput
);
148 if(editorInput
instanceof DataImportEditorInput
){
149 tableViewer
.getTable().removeAll();
150 Collection
<T
> results
= ((DataImportEditorInput
<T
>) editorInput
).getResults();
153 TableItem tableItem
= new TableItem(tableViewer
.getTable(), SWT
.NONE
);
154 tableItem
.setText(getTextForTableItem(item
));
155 tableItem
.setData(item
);
162 * Returns the text label of the given item.
163 * @param item the item for which the label should be returnes
164 * @return the label of the item
166 protected abstract String
getTextForTableItem(T item
);
169 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
172 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
173 if(conversation
!=null && conversation
.isBound() && !conversation
.isClosed()) {
174 conversation
.close();
179 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
182 public void update(CdmDataChangeMap changeEvents
) {
187 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
190 public ConversationHolder
getConversationHolder() {
195 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
198 public void changed(Object element
) {
203 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
206 public void forceDirty() {
211 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
214 public void doSave(IProgressMonitor monitor
) {
218 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
221 public void doSaveAs() {
225 * @see org.eclipse.ui.part.EditorPart#isDirty()
228 public boolean isDirty() {
233 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
236 public boolean isSaveAsAllowed() {