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
.ArrayList
;
13 import java
.util
.Collection
;
15 import org
.apache
.log4j
.Logger
;
16 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
17 import org
.eclipse
.jface
.action
.IMenuManager
;
18 import org
.eclipse
.jface
.action
.IToolBarManager
;
19 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
20 import org
.eclipse
.swt
.SWT
;
21 import org
.eclipse
.swt
.widgets
.Composite
;
22 import org
.eclipse
.swt
.widgets
.Display
;
23 import org
.eclipse
.swt
.widgets
.Table
;
24 import org
.eclipse
.swt
.widgets
.TableItem
;
25 import org
.eclipse
.ui
.IMemento
;
26 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
27 import org
.eclipse
.ui
.part
.ViewPart
;
29 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
30 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
31 import eu
.etaxonomy
.cdm
.ext
.occurrence
.OccurenceQuery
;
32 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
33 import eu
.etaxonomy
.taxeditor
.model
.IContextListener
;
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 * View which shows a list of "data" that can be imported into the CDM
44 * @param <T> the CDM type that will be handled by this view
47 public abstract class DataImportView
<T
> extends ViewPart
implements IPartContentHasFactualData
,
48 IConversationEnabled
, IPartContentHasDetails
, IPartContentHasSupplementalData
, IContextListener
{
50 protected final Logger logger
= Logger
.getLogger(DataImportView
.class);
52 protected Collection
<T
> results
= new ArrayList
<T
>();
54 protected OccurenceQuery query
;
56 private static ConversationHolder conversationHolder
;
58 private SaveImportedSpecimenAction saveImportedSpecimenAction
;
60 private final FormToolkit toolkit
= new FormToolkit(Display
.getCurrent());
65 * Constructs a new DataImportEditor and registers it to listen to context changes
67 public DataImportView() {
68 CdmStore
.getContextManager().addContextListener(this);
69 if(CdmStore
.isActive()){
75 * Create contents of the view part.
79 public void createPartControl(Composite parent
) {
81 CheckboxTableViewer checkboxTableViewer
= CheckboxTableViewer
.newCheckList(parent
, SWT
.BORDER
| SWT
.FULL_SELECTION
);
82 table
= checkboxTableViewer
.getTable();
83 toolkit
.paintBordersFor(table
);
93 private void createActions() {
94 saveImportedSpecimenAction
= new SaveImportedSpecimenAction();
98 * Initialize the toolbar.
100 private void initializeToolBar() {
101 IToolBarManager tbm
= getViewSite().getActionBars().getToolBarManager();
102 tbm
.add(saveImportedSpecimenAction
);
106 * Initialize the menu.
108 private void initializeMenu() {
109 IMenuManager manager
= getViewSite().getActionBars().getMenuManager();
112 public Table
getTable() {
117 * @param query the query to set
119 public void setQuery(OccurenceQuery query
) {
124 * @param results the results to set
126 public void setResults(Collection
<T
> results
) {
127 this.results
= results
;
131 * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
134 public void dispose() {
136 CdmStore
.getContextManager().removeContextListener(this);
140 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
143 public void contextRefresh(IProgressMonitor monitor
) {
147 protected void refresh(){
148 getTable().removeAll();
150 TableItem tableItem
= new TableItem(getTable(), SWT
.NONE
);
151 tableItem
.setText(getTextForTableItem(item
));
152 tableItem
.setData(item
);
156 public abstract void query();
160 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
163 public void update(CdmDataChangeMap changeEvents
) {
168 * Returns the text label of the given item.
169 * @param item the item for which the label should be returns
170 * @return the label of the item
172 protected abstract String
getTextForTableItem(T item
);
175 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
178 public void setFocus() {
179 getTable().setFocus();
180 //make sure to bind again if maybe in another view the conversation was unbound
181 if(getConversationHolder()!=null && !getConversationHolder().isBound()){
182 getConversationHolder().bind();
187 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
190 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
194 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
197 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
198 // derivateSearchCompositeController.setEnabled(false);
199 // derivateSearchCompositeController.reset();
203 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
206 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
208 // derivateSearchCompositeController.setEnabled(true);
211 private void initConversation(){
212 if(conversationHolder
==null){
213 conversationHolder
= CdmStore
.createConversation();
218 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
221 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
222 if(getConversationHolder()!=null && getConversationHolder().isBound() && !getConversationHolder().isClosed()) {
223 getConversationHolder().close();
228 * @return the conversationHolder
231 public ConversationHolder
getConversationHolder() {
232 if(CdmStore
.isActive() && conversationHolder
==null){
235 return conversationHolder
;