merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / dataimport / DataImportView.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.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;
27
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;
37
38 /**
39 * View which shows a list of "data" that can be imported into the CDM
40 * @author pplitzner
41 * @date Sep 3, 2014
42 *
43 * @param <T> the CDM type that will be handled by this view
44 */
45
46 public abstract class DataImportView<T> extends ViewPart implements IPartContentHasFactualData,
47 IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener{
48
49 protected final Logger logger = Logger.getLogger(DataImportView.class);
50
51 protected Collection<T> results;
52
53 protected OccurenceQuery query;
54
55 private static ConversationHolder conversationHolder;
56
57 private SaveImportedSpecimenAction saveImportedSpecimenAction;
58
59 private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
60
61 private Table table;
62
63 /**
64 * Constructs a new DataImportEditor and registers it to listen to context changes
65 */
66 public DataImportView() {
67 CdmStore.getContextManager().addContextListener(this);
68 if(CdmStore.isActive()){
69 initConversation();
70 }
71 }
72
73 /**
74 * Create contents of the view part.
75 * @param parent
76 */
77 @Override
78 public void createPartControl(Composite parent) {
79
80 CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.FULL_SELECTION);
81 table = checkboxTableViewer.getTable();
82 toolkit.paintBordersFor(table);
83
84 createActions();
85 initializeToolBar();
86 initializeMenu();
87 }
88
89 /**
90 * Create the actions.
91 */
92 private void createActions() {
93 saveImportedSpecimenAction = new SaveImportedSpecimenAction();
94 }
95
96 /**
97 * Initialize the toolbar.
98 */
99 private void initializeToolBar() {
100 IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager();
101 tbm.add(saveImportedSpecimenAction);
102 }
103
104 /**
105 * Initialize the menu.
106 */
107 private void initializeMenu() {
108 IMenuManager manager = getViewSite().getActionBars().getMenuManager();
109 }
110
111 public Table getTable() {
112 return table;
113 }
114
115 /**
116 * @param query the query to set
117 */
118 public void setQuery(OccurenceQuery query) {
119 this.query = query;
120 }
121
122 /**
123 * @param results the results to set
124 */
125 public void setResults(Collection<T> results) {
126 this.results = results;
127 }
128
129 /* (non-Javadoc)
130 * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#dispose()
131 */
132 @Override
133 public void dispose() {
134 super.dispose();
135 CdmStore.getContextManager().removeContextListener(this);
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 refresh();
144 }
145
146 protected void refresh(){
147 getTable().removeAll();
148 for(T item:results){
149 TableItem tableItem = new TableItem(getTable(), SWT.NONE);
150 tableItem.setText(getTextForTableItem(item));
151 tableItem.setData(item);
152 }
153 }
154
155 public abstract void query();
156
157
158 /* (non-Javadoc)
159 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
160 */
161 @Override
162 public void update(CdmDataChangeMap changeEvents) {
163 //nothing
164 }
165
166 /**
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
170 */
171 protected abstract String getTextForTableItem(T item);
172
173 /* (non-Javadoc)
174 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
175 */
176 @Override
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();
182 }
183 }
184
185 /* (non-Javadoc)
186 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
187 */
188 @Override
189 public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
190 }
191
192 /* (non-Javadoc)
193 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
194 */
195 @Override
196 public void contextStop(IMemento memento, IProgressMonitor monitor) {
197 // derivateSearchCompositeController.setEnabled(false);
198 // derivateSearchCompositeController.reset();
199 }
200
201 /* (non-Javadoc)
202 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
203 */
204 @Override
205 public void contextStart(IMemento memento, IProgressMonitor monitor) {
206 initConversation();
207 // derivateSearchCompositeController.setEnabled(true);
208 }
209
210 private void initConversation(){
211 if(conversationHolder==null){
212 conversationHolder = CdmStore.createConversation();
213 }
214 }
215
216 /* (non-Javadoc)
217 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
218 */
219 @Override
220 public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
221 if(getConversationHolder()!=null && getConversationHolder().isBound() && !getConversationHolder().isClosed()) {
222 getConversationHolder().close();
223 }
224 }
225
226 /**
227 * @return the conversationHolder
228 */
229 @Override
230 public ConversationHolder getConversationHolder() {
231 if(CdmStore.isActive() && conversationHolder==null){
232 initConversation();
233 }
234 return conversationHolder;
235 }
236
237 }