3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.view
.dataimport
;
12 import java
.util
.Collection
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
16 import org
.eclipse
.jface
.action
.IMenuManager
;
17 import org
.eclipse
.jface
.action
.IToolBarManager
;
18 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
19 import org
.eclipse
.swt
.SWT
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
21 import org
.eclipse
.swt
.widgets
.Display
;
22 import org
.eclipse
.swt
.widgets
.Table
;
23 import org
.eclipse
.swt
.widgets
.TableItem
;
24 import org
.eclipse
.ui
.IMemento
;
25 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
26 import org
.eclipse
.ui
.part
.ViewPart
;
28 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
29 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
30 import eu
.etaxonomy
.cdm
.ext
.occurrence
.OccurenceQuery
;
31 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
32 import eu
.etaxonomy
.taxeditor
.model
.IContextListener
;
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
;
39 * View which shows a list of "data" that can be imported into the CDM
43 * @param <T> the CDM type that will be handled by this view
46 public abstract class DataImportView
<T
> extends ViewPart
implements IPartContentHasFactualData
,
47 IConversationEnabled
, IPartContentHasDetails
, IPartContentHasSupplementalData
, IContextListener
{
49 protected final Logger logger
= Logger
.getLogger(DataImportView
.class);
51 protected Collection
<T
> results
;
53 protected OccurenceQuery query
;
55 private static ConversationHolder conversationHolder
;
57 private SaveImportedSpecimenAction saveImportedSpecimenAction
;
59 private final FormToolkit toolkit
= new FormToolkit(Display
.getCurrent());
64 * Constructs a new DataImportEditor and registers it to listen to context changes
66 public DataImportView() {
67 CdmStore
.getContextManager().addContextListener(this);
68 if(CdmStore
.isActive()){
74 * Create contents of the view part.
78 public void createPartControl(Composite parent
) {
80 CheckboxTableViewer checkboxTableViewer
= CheckboxTableViewer
.newCheckList(parent
, SWT
.BORDER
| SWT
.FULL_SELECTION
);
81 table
= checkboxTableViewer
.getTable();
82 toolkit
.paintBordersFor(table
);
92 private void createActions() {
93 saveImportedSpecimenAction
= new SaveImportedSpecimenAction();
97 * Initialize the toolbar.
99 private void initializeToolBar() {
100 IToolBarManager tbm
= getViewSite().getActionBars().getToolBarManager();
101 tbm
.add(saveImportedSpecimenAction
);
105 * Initialize the menu.
107 private void initializeMenu() {
108 IMenuManager manager
= getViewSite().getActionBars().getMenuManager();
111 public Table
getTable() {
116 * @param query the query to set
118 public void setQuery(OccurenceQuery query
) {
123 * @param results the results to set
125 public void setResults(Collection
<T
> results
) {
126 this.results
= results
;
130 * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
133 public void dispose() {
135 CdmStore
.getContextManager().removeContextListener(this);
139 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
142 public void contextRefresh(IProgressMonitor monitor
) {
146 protected void refresh(){
147 getTable().removeAll();
149 TableItem tableItem
= new TableItem(getTable(), SWT
.NONE
);
150 tableItem
.setText(getTextForTableItem(item
));
151 tableItem
.setData(item
);
155 public abstract void query();
159 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
162 public void update(CdmDataChangeMap changeEvents
) {
167 * Returns the text label of the given item.
168 * @param item the item for which the label should be returns
169 * @return the label of the item
171 protected abstract String
getTextForTableItem(T item
);
174 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
177 public void setFocus() {
178 getTable().setFocus();
179 //make sure to bind again if maybe in another view the conversation was unbound
180 if(getConversationHolder()!=null && !getConversationHolder().isBound()){
181 getConversationHolder().bind();
186 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
189 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
193 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
196 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
197 // derivateSearchCompositeController.setEnabled(false);
198 // derivateSearchCompositeController.reset();
202 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
205 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
207 // derivateSearchCompositeController.setEnabled(true);
210 private void initConversation(){
211 if(conversationHolder
==null){
212 conversationHolder
= CdmStore
.createConversation();
217 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
220 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
221 if(getConversationHolder()!=null && getConversationHolder().isBound() && !getConversationHolder().isClosed()) {
222 getConversationHolder().close();
227 * @return the conversationHolder
230 public ConversationHolder
getConversationHolder() {
231 if(CdmStore
.isActive() && conversationHolder
==null){
234 return conversationHolder
;