Project

General

Profile

Download (8.29 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2007 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

    
11
package eu.etaxonomy.taxeditor.editor.key.polytomous;
12

    
13
import java.util.List;
14

    
15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.jface.action.GroupMarker;
17
import org.eclipse.jface.action.MenuManager;
18
import org.eclipse.jface.viewers.StructuredSelection;
19
import org.eclipse.jface.viewers.TableViewer;
20
import org.eclipse.jface.viewers.TableViewerColumn;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.events.MouseAdapter;
23
import org.eclipse.swt.events.MouseEvent;
24
import org.eclipse.swt.graphics.Point;
25
import org.eclipse.swt.graphics.Rectangle;
26
import org.eclipse.swt.layout.FillLayout;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Control;
29
import org.eclipse.swt.widgets.Menu;
30
import org.eclipse.swt.widgets.Table;
31
import org.eclipse.swt.widgets.TableItem;
32
import org.eclipse.ui.IEditorInput;
33
import org.eclipse.ui.IEditorSite;
34
import org.eclipse.ui.IWorkbenchActionConstants;
35
import org.eclipse.ui.PartInitException;
36
import org.eclipse.ui.part.EditorPart;
37

    
38
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
39
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
40
import eu.etaxonomy.cdm.model.common.CdmBase;
41
import eu.etaxonomy.cdm.model.description.PolytomousKey;
42
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
43
import eu.etaxonomy.cdm.model.taxon.Taxon;
44
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
45
import eu.etaxonomy.taxeditor.editor.EditorUtil;
46
import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
47
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
48
import eu.etaxonomy.taxeditor.singlesource.editor.key.polytomous.PolytomousKeyListLabelProviderFacade;
49

    
50

    
51
/**
52
 * @author n.hoffmann
53
 * @created Mar 31, 2011
54
 * @version 1.0
55
 */
56
public class PolytomousKeyListEditor extends EditorPart implements
57
		IConversationEnabled, IDirtyMarkableSelectionProvider,
58
		IPolytomousKeyEditorPage {
59

    
60
	private class LinkListener extends MouseAdapter {
61
		/*
62
		 * (non-Javadoc)
63
		 * 
64
		 * @see
65
		 * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
66
		 * .MouseEvent)
67
		 */
68
		@Override
69
		public void mouseUp(MouseEvent event) {
70

    
71
			Table table = (Table) event.widget;
72
			// Determine where the mouse was clicked
73
			Point point = new Point(event.x, event.y);
74

    
75
			int selectedColumn = getSelectedColumn(table, point);
76

    
77
			if (selectedColumn == 3) {
78
				PolytomousKeyNode node = (PolytomousKeyNode) getTableItem(
79
						table, point).getData();
80
				Object linkData = getItemLinkData(node);
81
				if (linkData instanceof PolytomousKeyNode) {
82
					viewer.setSelection(new StructuredSelection(linkData), true);
83
				} else if (linkData instanceof Taxon) {
84
					try {
85
						EditorUtil.openTaxonBase(((Taxon) linkData).getUuid());
86
					} catch (PartInitException e) {
87
						EditorUtil.error(getClass(), e);
88
					}
89
				}
90
			}
91

    
92
		}
93

    
94
		private int getSelectedColumn(Table table, Point point) {
95
			TableItem item = getTableItem(table, point);
96
			if (item != null) {
97
				for (int i = 0, n = table.getColumnCount(); i < n; i++) {
98
					Rectangle rect = item.getBounds(i);
99
					if (rect.contains(point)) {
100
						// This is the selected column
101
						return i;
102
					}
103
				}
104
			}
105
			return -1;
106
		}
107

    
108
		private TableItem getTableItem(Table table, Point point) {
109
			return table.getItem(point);
110
		}
111

    
112
		/**
113
		 * @return
114
		 */
115
		private Object getItemLinkData(PolytomousKeyNode node) {
116
			return node.getChildren().isEmpty() ? node.getTaxon() : node
117
					.getChildAt(0);
118
		}
119
	}
120

    
121
	public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
122

    
123
	private TableViewer viewer;
124

    
125
	private final KeyEditor editor;
126

    
127
	public PolytomousKeyListEditor(KeyEditor editor) {
128
		this.editor = editor;
129
	}
130

    
131
	/*
132
	 * (non-Javadoc)
133
	 * 
134
	 * @see
135
	 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
136
	 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
137
	 */
138
	@Override
139
	public void update(CdmDataChangeMap arg0) {
140

    
141
	}
142

    
143
	/*
144
	 * (non-Javadoc)
145
	 * 
146
	 * @see
147
	 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
148
	 * ()
149
	 */
150
	@Override
151
	public ConversationHolder getConversationHolder() {
152
		return ((PolytomousKeyEditorInput) getEditorInput())
153
				.getConversationHolder();
154
	}
155

    
156
	/*
157
	 * (non-Javadoc)
158
	 * 
159
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
160
	 * IProgressMonitor)
161
	 */
162
	@Override
163
	public void doSave(IProgressMonitor monitor) {
164

    
165
	}
166

    
167
	/*
168
	 * (non-Javadoc)
169
	 * 
170
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
171
	 */
172
	@Override
173
	public void doSaveAs() {
174
	}
175

    
176
	/*
177
	 * (non-Javadoc)
178
	 * 
179
	 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
180
	 * org.eclipse.ui.IEditorInput)
181
	 */
182
	@Override
183
	public void init(IEditorSite site, IEditorInput input)
184
			throws PartInitException {
185
		setSite(site);
186
		setInput(input);
187
	}
188

    
189
	/*
190
	 * (non-Javadoc)
191
	 * 
192
	 * @see org.eclipse.ui.part.EditorPart#isDirty()
193
	 */
194
	@Override
195
	public boolean isDirty() {
196
		return false;
197
	}
198

    
199
	/*
200
	 * (non-Javadoc)
201
	 * 
202
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
203
	 */
204
	@Override
205
	public boolean isSaveAsAllowed() {
206
		return false;
207
	}
208

    
209
	/*
210
	 * (non-Javadoc)
211
	 * 
212
	 * @see
213
	 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
214
	 * .Composite)
215
	 */
216
	@Override
217
	public void createPartControl(Composite parent) {
218

    
219
		FillLayout fillLayout = new FillLayout();
220
		fillLayout.marginWidth = 0;
221
		fillLayout.marginHeight = 0;
222
		fillLayout.type = SWT.VERTICAL;
223
		parent.setLayout(fillLayout);
224

    
225
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
226
				| SWT.V_SCROLL | SWT.FULL_SELECTION);
227
		getSite().setSelectionProvider(viewer);
228

    
229
		createColumns(viewer);
230
		viewer.getControl().addMouseListener(new LinkListener());
231
		viewer.setContentProvider(new PolytomousKeyListContentProvider());
232
		viewer.setLabelProvider(new PolytomousKeyListLabelProviderFacade());
233

    
234
		createMenu();
235

    
236
		PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
237
				.getKey();
238

    
239
		setPartName(key.getTitleCache());
240

    
241
		viewer.setInput(key);
242
	}
243

    
244
	private void createMenu() {
245
		// register context menu
246
		MenuManager menuManager = new MenuManager();
247
		menuManager
248
				.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
249
		getSite().registerContextMenu(ID, menuManager, viewer);
250

    
251
		Control control = viewer.getControl();
252
		Menu menu = menuManager.createContextMenu(control);
253
		control.setMenu(menu);
254
	}
255

    
256
	// This will create the columns for the table
257
	private void createColumns(TableViewer viewer) {
258
		Table table = viewer.getTable();
259
		String[] titles = { "Node Number", "Question", "Statement", "Link" };
260
		int[] bounds = { 50, 200, 200, 100 };
261

    
262
		for (int i = 0; i < titles.length; i++) {
263
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
264
			column.getColumn().setText(titles[i]);
265
			column.getColumn().setWidth(bounds[i]);
266
			column.getColumn().setResizable(true);
267
			column.getColumn().setMoveable(true);
268
		}
269
		table.setHeaderVisible(true);
270
		table.setLinesVisible(false);
271

    
272
	}
273

    
274
	/*
275
	 * (non-Javadoc)
276
	 * 
277
	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
278
	 */
279
	@Override
280
	public void setFocus() {
281
		
282
	}
283

    
284
	/*
285
	 * (non-Javadoc)
286
	 * 
287
	 * @see
288
	 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
289
	 * java.lang.Object)
290
	 */
291
	@Override
292
	public void changed(Object element) {
293
		viewer.update(element, null);
294

    
295
		if (element instanceof PolytomousKeyNode) {
296
			List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
297
					.getParent().getChildren();
298
			for (PolytomousKeyNode child : children) {
299
				viewer.update(child, null);
300
			}
301
		}
302

    
303
	}
304

    
305
	/*
306
	 * (non-Javadoc)
307
	 * 
308
	 * @see
309
	 * eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(
310
	 * eu.etaxonomy.cdm.model.common.CdmBase)
311
	 */
312
	@Override
313
	public boolean postOperation(CdmBase objectAffectedByOperation) {
314
		viewer.refresh();
315

    
316
		editor.changed(objectAffectedByOperation);
317

    
318
		if (objectAffectedByOperation != null) {
319
			viewer.setSelection(new StructuredSelection(
320
					objectAffectedByOperation), true);
321
		}
322
		return true;
323
	}
324

    
325
	/*
326
	 * (non-Javadoc)
327
	 * 
328
	 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
329
	 */
330
	@Override
331
	public boolean onComplete() {
332
		return true;
333
	}
334

    
335
}
(7-7/8)