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
 * @author n.hoffmann
52
 * @created Mar 31, 2011
53
 * @version 1.0
54
 */
55
public class PolytomousKeyListEditor extends EditorPart implements
56
		IConversationEnabled, IDirtyMarkableSelectionProvider,
57
		IPolytomousKeyEditorPage {
58

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

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

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

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

    
91
		}
92

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

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

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

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

    
122
	private TableViewer viewer;
123

    
124
	private final KeyEditor editor;
125

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

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

    
140
	}
141

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

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

    
164
	}
165

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

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

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

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

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

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

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

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

    
233
		createMenu();
234

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

    
238
		setPartName(key.getTitleCache());
239

    
240
		viewer.setInput(key);
241
	}
242

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

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

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

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

    
271
	}
272

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

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

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

    
302
	}
303

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

    
315
		editor.changed(objectAffectedByOperation);
316

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

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

    
334
}
(7-7/9)